From patchwork Mon Mar 3 17:10:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999221 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FCEAC282D2 for ; Mon, 3 Mar 2025 17:10:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EA73B280026; Mon, 3 Mar 2025 12:10:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E554F280016; Mon, 3 Mar 2025 12:10:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CF585280026; Mon, 3 Mar 2025 12:10:21 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B4375280016 for ; Mon, 3 Mar 2025 12:10:21 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 6A50CB673E for ; Mon, 3 Mar 2025 17:10:21 +0000 (UTC) X-FDA: 83180878242.15.46035DB Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) by imf01.hostedemail.com (Postfix) with ESMTP id 48E0640021 for ; Mon, 3 Mar 2025 17:10:19 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=adY5CRQf; spf=pass (imf01.hostedemail.com: domain of 3eeLFZwUKCJoN4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3eeLFZwUKCJoN4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021819; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=w5p1u51hDu4RIdVFXU2+a7I5FQFTXTH5HXvwkoJ+/VY=; b=RKh9lCwDBTzGmKdZlnDi/CFomXWjMbYJvG+kIyc9iqeb1px2CjYuUi3OAVHSwcfrfHnrRT Rio5gYlBFDmgaw5y0SNrn8esU82qSmN8x44zwuHh6wMGtHk6j/IXyMJNuT/SrxV503+wFY OPFv+X8VivQr0BLhfyouLwC5xtjagcQ= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=adY5CRQf; spf=pass (imf01.hostedemail.com: domain of 3eeLFZwUKCJoN4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3eeLFZwUKCJoN4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021819; a=rsa-sha256; cv=none; b=rfCF18pBU8q1tIoQK566dFqtHwXq/Vap8FNOqqgu3VSDkRDxI/4jC2U9Bp75V2cE5hhCnX 9f2Jc0DcB1I4oZDgzvjiscwog6wZ2oytf3Pbp/1mJLHQQL5nWByeu+sWTmhGjiHEpycOb8 FlfHNqvSawFmhaDtbQ/i4gaSgX8Y1Eo= Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-390f7db84faso1812109f8f.2 for ; Mon, 03 Mar 2025 09:10:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021818; x=1741626618; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=w5p1u51hDu4RIdVFXU2+a7I5FQFTXTH5HXvwkoJ+/VY=; b=adY5CRQfMIKLmar3wrjOm8gI1yuPRSZt5OC03FsGV0ktfBb33s9ULdKmGNqo157RLe qKmqWpTzoiMppP/QCDVhVHwcgHSNVBAT78s13jiD2QrTXdYN9n1cHznFUzzGe/JkB0x3 XUlNJVvkPHFNDtzWQ4obXZj524Y00IAghbZ/5MJXRg2LA0O/zIIwA6wKTDHSF1pLiBv4 +f2ZiW/mRPakNeFR8KSvpTGRu7qil+Ye74j59bHed9BwRo3L1ekXL2R7vcjTw6kHX9VS Kw/fFZD3Uw93qfID1lIuiGrcdNH6eCl43YpwDK7gt9s1+mokfBsz+91D6xlWplxPyLtx CWhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021818; x=1741626618; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=w5p1u51hDu4RIdVFXU2+a7I5FQFTXTH5HXvwkoJ+/VY=; b=RG/OXhdTLZCz61+qjUpuE1gQH/cDJSZ4BmL+JytFCJWynmip6ai1awfN7kLtM1cZUY odfkn2vlaCnv1sXp/KuPHjHe6ompp0WXODa9car7IH9e5rL4ZPrqvjzp3Cya+MGQnAb+ FaUGKBZnMQA+3KDsO2gTyATM1qhwAysM9+5D0tcp6rkcZCtpXmE+yTluPRrjZSdD8AM8 6xp+MOY1JefWeS//MpuiTvje88pJjIbo+1dQHzueSNwkKYr4kBcwT99lETdTaQZhp0Wb sVHYmeBQbYHHJ/cnuNG9dBWXb4cNZ5KJVEwiTYmU0s5nlzarU/kdKCM3uYh2Rle9bbe7 fr0Q== X-Forwarded-Encrypted: i=1; AJvYcCXtGd7otT4o3lDRkHnnQPyatu8UWwLX44xd/gRfvEVR1481NSYL1fnwLiybcT8tq2KwNfdjrhqRJg==@kvack.org X-Gm-Message-State: AOJu0YxYBW4078FJpuVvRh1kp81+jmgMQo6ivBEHYm7sOmiyW9THt+IJ G11QTgm5Lszlqys8jlM36h0S+ev6VAaPf2DiVo+nrIDlC+2DVMap7kYun0t//x3DWYML7jzZTg= = X-Google-Smtp-Source: AGHT+IHrIQRTSbIxQusEzSVfIPDJzKXN0UjZRRQHhWJRv/ncbjwRbNznaVOzH4GMAzYPY56lQvuMR1QBGw== X-Received: from wre13.prod.google.com ([2002:a05:6000:4b0d:b0:390:e0e3:e8cd]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:186d:b0:391:13ef:1b35 with SMTP id ffacd0b85a97d-39113ef1da9mr1259620f8f.29.1741021817721; Mon, 03 Mar 2025 09:10:17 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:05 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-2-tabba@google.com> Subject: [PATCH v5 1/9] mm: Consolidate freeing of typed folios on final folio_put() From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 48E0640021 X-Rspamd-Server: rspam09 X-Stat-Signature: ke8h4tpi6n86md8ubs8owgzp5p3qimcu X-HE-Tag: 1741021819-33552 X-HE-Meta: U2FsdGVkX1+1WEzgJLzmw8wlVyX8D03EmmNuAseZp0jORKaS+ZCojA8YWmC3LOv/vaLHgjvyrBAj1Nb83hG0LdXBl0qDWx3c8yd1cfz0hz/BQEqM6PhKSIy0RlMUMKLq7UgO+FtJk6cVu4o4ssRIKSZyil0wwZAUuhNVPB55Jo1f8UYHK2M3SvuYojnxbvn0z0yar+LWzteOZC2/slkPQ58Vzm81GkNNQlVg0GzoEIx2gJkdH1Czf8PpHofgAR8hTDVdotCYwST0FnrYkS6FLr2kFYHRNX7/aVgcKA83XftDRfbLPUbci3/7oEXz8x5Xx1zLuCzJrrqUilS5zDCFki7Yu8vqLVB7Ka1c2EYa9Cr7vg2wnaduiYOktn6epEglF+wXqG6FJSqnaa54VRWol1rzhCXaPUt3Q4wUTiR8DVRBcRSGTxHTTsUsxHuVCE5wKULCwXxHBcmxSsIzS+/I+n+X8rUx+lVXBDaQM6pDlY/NiLCROeVBxk+Svu9961CtFZA53l447utH4qRXpJ2uNUFdPNIk0EJ3RFK7BNHX2IwjPWs2s99giSwjZ9vy/0PM3BnuRc/yyqxg7ntfy7UgtWb+GyeyUG0Zz3IG+Jn9ihdFJs1hyQJt5Rjjb4MOHOHWRYLbuSo18/2eguqyqRZzqMKDZk8LdZXMD4Ei9PJhUfk0A0LTDPb84wD/AeEZh00vq4BydzhsNpqdqSOm6uuThKjIpFi9S8yqcSWSs2q6pV8gJD5Gd/fznRj2VgzMsL/Vg8q1906qvsIrNOey6mDW4vlpS97V1rT1kitWqEJOW/mDCP5rFhBqQeQwDrfZZk+gDE33N5w5Wk0cClsfh/fJozTOSpe796CuyIkhH8o/IF+KBAJYQBI4LWy1Iivou9G2Sp6LZjmyPGmJVw2KDeKP/FhailwuEqBU8MEBlI4bdiEPkE0EB2pi6enqDERp/ARg9uq98jzJZRmjEe/B6BE wjE1NaTZ VzB4JDg2ND60WN/rdF9IkpHoUl8tUU47Diw9/Vqd/uToi0+9noKsq/P540j0I1zMVFpEKwMbJV/p1aSfUXm0JxMJI29oFcAVEEJ3YwktioEi5NCr0AHYyFtEhKCs9vbMNqiVrRxZG2ayCOXFK2y+mcHtuLJCatQAO2J1jog/PflwcxjrzHasAs7+PnmMbwg3pRrpvzVZOh3C2uW0WyQ5mkg0hAQ1hnoI7M1H+SMRCC1zpK/7Z0ZYtPU8VNXYWnAjpVTM5c3zRZusL0HIfRLSheZH4wEQEPZ7iwcZf/AgqklK/t4RPYZdIm1dbenyJW5NiWTopk37Id6PxtzOh7z4IZpAdQe5q08uNt88fWxftCfFgZ6R3nsDDK80LfTsVN4bj0Mt0m2STp83ue2OvEL/bHyr5tHBko2SGf4SPPKKyqZNSiTDfkEd3Jo8GhpeHkluhtrPLR5h56iPUJ8mSh8MzdvRw5fX4Xb7g4vbN6AuMKRISgni/S8keBH00Vp4Hub2y3HmLq+dBr1RaK4us2WuCdHvxPnfpK8kgEnET/PorjqDLc7AUvXgAUWgc4eijciEPXnjkLleis/U45h2Si9x6jdV6fJVC4J8B5hzCH7GlZjT+mT2wofTkwYBvJtOPx6R2xq+uu742rKMFAcT/M0+M1ZGSzf1VJ8j4uzS5LYcMWHrZBz4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Some folio types, such as hugetlb, handle freeing their own folios. Moreover, guest_memfd will require being notified once a folio's reference count reaches 0 to facilitate shared to private folio conversion, without the folio actually being freed at that point. As a first step towards that, this patch consolidates freeing folios that have a type. The first user is hugetlb folios. Later in this patch series, guest_memfd will become the second user of this. Suggested-by: David Hildenbrand Acked-by: Vlastimil Babka Acked-by: David Hildenbrand Signed-off-by: Fuad Tabba --- include/linux/page-flags.h | 15 +++++++++++++++ mm/swap.c | 23 ++++++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 36d283552f80..6dc2494bd002 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -953,6 +953,21 @@ static inline bool page_has_type(const struct page *page) return page_mapcount_is_type(data_race(page->page_type)); } +static inline int page_get_type(const struct page *page) +{ + return page->page_type >> 24; +} + +static inline bool folio_has_type(const struct folio *folio) +{ + return page_has_type(&folio->page); +} + +static inline int folio_get_type(const struct folio *folio) +{ + return page_get_type(&folio->page); +} + #define FOLIO_TYPE_OPS(lname, fname) \ static __always_inline bool folio_test_##fname(const struct folio *folio) \ { \ diff --git a/mm/swap.c b/mm/swap.c index fc8281ef4241..47bc1bb919cc 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -94,6 +94,19 @@ static void page_cache_release(struct folio *folio) unlock_page_lruvec_irqrestore(lruvec, flags); } +static void free_typed_folio(struct folio *folio) +{ + switch (folio_get_type(folio)) { +#ifdef CONFIG_HUGETLBFS + case PGTY_hugetlb: + free_huge_folio(folio); + return; +#endif + default: + WARN_ON_ONCE(1); + } +} + void __folio_put(struct folio *folio) { if (unlikely(folio_is_zone_device(folio))) { @@ -101,8 +114,8 @@ void __folio_put(struct folio *folio) return; } - if (folio_test_hugetlb(folio)) { - free_huge_folio(folio); + if (unlikely(folio_has_type(folio))) { + free_typed_folio(folio); return; } @@ -966,13 +979,13 @@ void folios_put_refs(struct folio_batch *folios, unsigned int *refs) if (!folio_ref_sub_and_test(folio, nr_refs)) continue; - /* hugetlb has its own memcg */ - if (folio_test_hugetlb(folio)) { + if (unlikely(folio_has_type(folio))) { + /* typed folios have their own memcg, if any */ if (lruvec) { unlock_page_lruvec_irqrestore(lruvec, flags); lruvec = NULL; } - free_huge_folio(folio); + free_typed_folio(folio); continue; } folio_unqueue_deferred_split(folio); From patchwork Mon Mar 3 17:10:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999222 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A291EC282CD for ; Mon, 3 Mar 2025 17:10:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 41F3D280027; Mon, 3 Mar 2025 12:10:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3CD9D280016; Mon, 3 Mar 2025 12:10:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 19262280027; Mon, 3 Mar 2025 12:10:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CF92B280016 for ; Mon, 3 Mar 2025 12:10:23 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 1930D1C8276 for ; Mon, 3 Mar 2025 17:10:23 +0000 (UTC) X-FDA: 83180878326.06.03A80FF Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf14.hostedemail.com (Postfix) with ESMTP id 322A4100002 for ; Mon, 3 Mar 2025 17:10:20 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=33kBEpAk; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3e-LFZwUKCJwP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3e-LFZwUKCJwP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021821; a=rsa-sha256; cv=none; b=XDVOcTmurkcSgg1PfygL2Jp9hOkKX8DdRUIAuWI6CoYig3epI4Eny3ksZbJhNvVlKaupOp uQE9f3RsE+CKKcEI8TQzceciYenz91rG1GDHY5aT6jO+1q41j2J8k6hYeVWspqD3MhaWBq Y2EOxlMAMOiBEjpA8T/ix5dfS7Rbwjw= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=33kBEpAk; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3e-LFZwUKCJwP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3e-LFZwUKCJwP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021821; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SRXCGSvCKi8KFNLeYd6jvsHWuv061HBQkZp/LgnTXzc=; b=WjDp/ot9exwADn75aBJ7QKS09bDwj6Ak+9casrUEA3a82PBfPI4e0ozdMa6lqy+xoZJCxL UMqcpVrFvW6LvpYy3LrOwF4vf0L4YsT8/5t3Jmam73Qt235CwmJF4BcT/qwjNsPpB/GHmm lyqQyxnz1D/ie0fjHEyIp/8zZeHuMeE= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-4399a5afc95so18161355e9.3 for ; Mon, 03 Mar 2025 09:10:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021820; x=1741626620; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=SRXCGSvCKi8KFNLeYd6jvsHWuv061HBQkZp/LgnTXzc=; b=33kBEpAkCqhO9SFsKYqEOPRpDvOHznmBCnbk5iK+wy62hoykPandWLPiKlGrBZH0S+ bDYkfcIKxjHAn2J/5ctr8GW/8vp3AovEr3BgL/qHREqYE73BXiiqxpYGXLymthULm55Y 7bMTHnRiCyRAlWe9/UQpGO8gSkZrMF2Ie/kABz5K/wGq1ikhYGsL5m0nc7qqx3xE1eh5 WOBXZxY8oexQiT0143VELDi2doGgb26v0BK+aExI/bMu2vnQmEyzaptR1hLCM9Y9NXhi 4K323Kd7sLdCxRXe+1zX9CH/J3Dk4b8daeEpOxAaKUspKTwaU+Q18YWs3Igc5fMqJiJt NVoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021820; x=1741626620; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SRXCGSvCKi8KFNLeYd6jvsHWuv061HBQkZp/LgnTXzc=; b=weaetZsntOZgcupvxIWDNGsFUXRqeiMo3jieHxQjAx4b0hSv3+fWk/JMovAC4WwLme x5BwbTOaHtuEkzvq+3Ixcz1P6lrrvu+dNkTLuLxOagwNc/a3SpxrVi9BEYSpvM8ZkdT+ 1kPW7dJXu1kQsr0GjraJkASXdr0VTLDF+6pXfYauyMhHlnMqc8WynQU3XwCtJrgumwmD mJqxmM09V+5Pji1QRS8aGulA13NBf18banpYNScysDTfadmlzPNux4U7i9aTSvQL4Y80 3ii1G21+H32tE9pQR0m6UQMSk3n2HDYsX43Q2VWEr9fnxlkES/qT33PuKRPmS/ZTVjW1 RGZw== X-Forwarded-Encrypted: i=1; AJvYcCUGPkglbVMK48D7yYqOa2qtJPmYWh089T6LPX78QaYbOTsD+f0cBZMhMVh3mZ6wEaLKLaAFq+39sw==@kvack.org X-Gm-Message-State: AOJu0YwxmHC9Rlzbr+14TqEguAmL1jD6hloNjKQRK1PxExXvwrAZ60Ik 0Vi5q2rCvDPlZuMnx07ttGqQc8iHWxsb8egI5l9/JoqN7W4+t+IAG775VwkoJlMzEWvWgLnnxg= = X-Google-Smtp-Source: AGHT+IHiT+g0b2FcJU3pHgUKOxKohFEOEB1W2gcQabUIaCdSRC5gA7558TblaDocxHQhpruqsN96dOjIwQ== X-Received: from wmbet10.prod.google.com ([2002:a05:600c:818a:b0:43b:c9e4:2160]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:190a:b0:434:a4b3:5ebe with SMTP id 5b1f17b1804b1-43ba675830emr94037315e9.24.1741021819910; Mon, 03 Mar 2025 09:10:19 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:06 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-3-tabba@google.com> Subject: [PATCH v5 2/9] KVM: guest_memfd: Handle final folio_put() of guest_memfd pages From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 322A4100002 X-Stat-Signature: enhato5cwkadm8ntsqtzbscdr6bezufe X-HE-Tag: 1741021820-667549 X-HE-Meta: U2FsdGVkX1/MTdMjJ1dsOahc0Fwih8d4W/AvhZuujTHwmp8lS3yPAY3pSZSfVrySfa8K7ga490YjrBYHO2II33z2J+yhXksFyr0G2PxW53VKcLCJo97qPGrSGGL0ZS29bU1XBBTlMc+yKCj9/SRmIYpSpIFd92B2sFDMIWM/Cbwgq0UOvhM/jAQMDFwPQDfm8oMNaUH+GHuy9eSMJPi55xp80um9vDajCndxdO+RVrq+rxn3b8Q7X1wkN6kRZ/baQX0DPDc2DequQXb31179ueF68CUiqysyl+UuLDwJTfUgJPOYWj3WvoIO1rTKrcnCZho5UpkjzxKmFtW7Y2BDcCxXrDgpHcz5tiddiZyUIK0bVVqL0iEISgs4aGJlhxAX/CxQM8o+YAyeEMuoIDsS3pyZ5ZJ+Ocxg1E7AssdJ1+JGnCT8/oxQYzUd5b/JC+zaQF0HSnwDXwsYR2YJjj3luCc3MLZaqriC6UVNXncmx6LIeLjT6afl/sf3Zt3Q9+0ljOm563xAe9iDkv4jY2ai0RDzd++tOGolRHyqnStlomZDkl+jxxU2WhBS1EkaaEYRCmGZswuFLSFf+eMbGTQvgK0BCTxD+dQyfmdPPmzTeaFJO6T9Qd5O5tLYgf3xFRp9+AF9b0r+9H5Uli+uKX//MIK5RDNL6cVXPLX5ADJcaDNKv7r+MNSZ6/sqJ8TQkq17ADJE3BXNgz1B9DhCNiM9A3b9ceiVwSwRWnza573BwhyDnriea3m7iDYy56sze4nEeUxCptA8w7eh8PxHUj8dW4fcDdk3gSQlz+TmcDisEbi2D+T6sSVW3feBzEihA94tjhIK1jW1ghCKTJjjRlg4/RJNOqjU6OpUvSnPTlx6yGGVMTR1JhmyhUXUg+4lBXPFptYL+RRopxPXU5maej6WgAP4THbUVj1sGOEzpixwv8VlcGUW8tnniYRaWBJAMddA8mGbt4pLCjlzf815+lY npI9Kv3K 8R+BTrkhwNaUdOFgWGUIItZais7mNFp5zO4Px568v5O24G8rjEYqWpOWNaO1e2sT6dlN+mO6s9PMuR3b05njP8NudWRIvEYBvp6UYM3Lt9zl6SZhC9OXFXa5IQZKid5KwZKZ+VAa69fN4M90Ce3v48ezB+aDQuuLorPg8nIvO86k31YrpsFWtH84ajlS7//Wx8XpZqrP//doDJwqmY4TFQ/lyvSO3uYxa4Kh7Ay58ParDmXevBqDUY1yJcMgANirfxrxl7wIcVSo3EdFI90c5WXgm5ej/+anLgPWHe3niQRJpD14Dz5XLM4+JdozvzEfE1pjbpKiSPmcXjXA6AjaqpC9NsDtahMGxXP1BiSMCEpLJ3brvNOCH8Tb3nzAYNEL2bnTXU2hDui63QEggoIy87pWhR79gH7glTn8UrGJ7u5vAZVJY4rzv1/Nxs9s/Ara70QK52Iqb6UgIs4Bz6o1PeJHAzUB7clrceA2BH0im3SgAB21JJsotrYDv0nov+y7qcbrNvxqLf1/ytGZ8amnid2XLQFo/zRXRzZzYpBFAmkgziOeiw5TjDTef7eKON1x/8rp/84OlHICOGv4Ky2vP0rEdfPTfa23IWAhs4V886x9Oqshv8mQjDXJInFFs2nc+1XsR0aiBfcDLrRCOhQFm35ZBHlmkUES7I6O+hwy0VqIwDfg= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Before transitioning a guest_memfd folio to unshared, thereby disallowing access by the host and allowing the hypervisor to transition its view of the guest page as private, we need to be sure that the host doesn't have any references to the folio. This patch introduces a new type for guest_memfd folios, which isn't activated in this series but is here as a placeholder and to facilitate the code in the subsequent patch series. This will be used in the future to register a callback that informs the guest_memfd subsystem when the last reference is dropped, therefore knowing that the host doesn't have any remaining references. This patch also introduces the configuration option, KVM_GMEM_SHARED_MEM, which toggles support for mapping guest_memfd shared memory at the host. Signed-off-by: Fuad Tabba Acked-by: Vlastimil Babka Acked-by: David Hildenbrand --- include/linux/kvm_host.h | 7 +++++++ include/linux/page-flags.h | 16 ++++++++++++++++ mm/debug.c | 1 + mm/swap.c | 9 +++++++++ virt/kvm/Kconfig | 5 +++++ 5 files changed, 38 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f34f4cfaa513..7788e3625f6d 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2571,4 +2571,11 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, struct kvm_pre_fault_memory *range); #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +static inline void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); +} +#endif + #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6dc2494bd002..daeee9a38e4c 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -933,6 +933,7 @@ enum pagetype { PGTY_slab = 0xf5, PGTY_zsmalloc = 0xf6, PGTY_unaccepted = 0xf7, + PGTY_guestmem = 0xf8, PGTY_mapcount_underflow = 0xff }; @@ -1082,6 +1083,21 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) FOLIO_TEST_FLAG_FALSE(hugetlb) #endif +/* + * guestmem folios are used to back VM memory as managed by guest_memfd. Once + * the last reference is put, instead of freeing these folios back to the page + * allocator, they are returned to guest_memfd. + * + * For now, guestmem will only be set on these folios as long as they cannot be + * mapped to user space ("private state"), with the plan of always setting that + * type once typed folios can be mapped to user space cleanly. + */ +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +FOLIO_TYPE_OPS(guestmem, guestmem) +#else +FOLIO_TEST_FLAG_FALSE(guestmem) +#endif + PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc) /* diff --git a/mm/debug.c b/mm/debug.c index 8d2acf432385..08bc42c6cba8 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -56,6 +56,7 @@ static const char *page_type_names[] = { DEF_PAGETYPE_NAME(table), DEF_PAGETYPE_NAME(buddy), DEF_PAGETYPE_NAME(unaccepted), + DEF_PAGETYPE_NAME(guestmem), }; static const char *page_type_name(unsigned int page_type) diff --git a/mm/swap.c b/mm/swap.c index 47bc1bb919cc..241880a46358 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -38,6 +38,10 @@ #include #include +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +#include +#endif + #include "internal.h" #define CREATE_TRACE_POINTS @@ -101,6 +105,11 @@ static void free_typed_folio(struct folio *folio) case PGTY_hugetlb: free_huge_folio(folio); return; +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case PGTY_guestmem: + kvm_gmem_handle_folio_put(folio); + return; #endif default: WARN_ON_ONCE(1); diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig index 54e959e7d68f..37f7734cb10f 100644 --- a/virt/kvm/Kconfig +++ b/virt/kvm/Kconfig @@ -124,3 +124,8 @@ config HAVE_KVM_ARCH_GMEM_PREPARE config HAVE_KVM_ARCH_GMEM_INVALIDATE bool depends on KVM_PRIVATE_MEM + +config KVM_GMEM_SHARED_MEM + select KVM_PRIVATE_MEM + depends on !KVM_GENERIC_MEMORY_ATTRIBUTES + bool From patchwork Mon Mar 3 17:10:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999223 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD6D3C282CD for ; Mon, 3 Mar 2025 17:10:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 24B71280028; Mon, 3 Mar 2025 12:10:27 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1D2B3280016; Mon, 3 Mar 2025 12:10:27 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 02ABC280028; Mon, 3 Mar 2025 12:10:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D5515280016 for ; Mon, 3 Mar 2025 12:10:26 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 26B121C8D57 for ; Mon, 3 Mar 2025 17:10:26 +0000 (UTC) X-FDA: 83180878452.29.1665DED Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) by imf12.hostedemail.com (Postfix) with ESMTP id 8FFD040021 for ; Mon, 3 Mar 2025 17:10:23 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=mvPRiM9w; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf12.hostedemail.com: domain of 3feLFZwUKCJ4R8998EMMEJC.AMKJGLSV-KKIT8AI.MPE@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3feLFZwUKCJ4R8998EMMEJC.AMKJGLSV-KKIT8AI.MPE@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021824; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=iEl5LoBVGArZ0Hko7f7NcM1d/VPAiCytVB+FzStXmAM=; b=mU/nAXgbyWEdliCFnlAOiLRwCp/L8E9g2GrPZdOQyJXXVb5wAlF4UYzrnSlnMQzFn1efMf 7PMdjmYYkguDItj0YAraXni84TAXSyr+C13Jz+UGz3dgWTFzk1zYr6UTQ9ONBDEXtQTIfN 7C0WLSz/hjhRW7KVvo+tlmOpIy5JckE= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=mvPRiM9w; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf12.hostedemail.com: domain of 3feLFZwUKCJ4R8998EMMEJC.AMKJGLSV-KKIT8AI.MPE@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3feLFZwUKCJ4R8998EMMEJC.AMKJGLSV-KKIT8AI.MPE@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021824; a=rsa-sha256; cv=none; b=qyZhWSKO1fFaX02pWBqyU+tXFlmo0Eq+RCY9TaX+MfmIbvqYi+r6ozN1dVW1Xyq2d0r/2l dcfC7Q+pf7EuYcsS1h1xUlSr81IaOg9lguw6Lc+fIwCkoSE++kMLvjQUTd2BFXimqwqBff AoRRcDDHhMcRm0UhJJNWzoLdukNJ3gM= Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-390e8df7ab6so1579564f8f.3 for ; Mon, 03 Mar 2025 09:10:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021822; x=1741626622; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=iEl5LoBVGArZ0Hko7f7NcM1d/VPAiCytVB+FzStXmAM=; b=mvPRiM9w8I/SkLWpYhvL0teO9ii+2Pnd/74BZ5PfUmtFp9nTq2gUV6TAR9wr9M4JK1 nXxwqOsH66rvQaMeerZyqpLqoG0AH/FVpx56Yk+ZglYF+MmX2//H7eDcD0kEe0d/I07Y XU9KadA0jnJv0xu+Bkc0Foo/OBWxcmU+/az58ECk8oiy0alL7+woTmD0UMXk/08bEJ7T ybatcU1bJRiIlsUnj3wMg2gRyMbWLCLvxjdp++KxnbMGaxMN0amCzaz9AmK4FogVao+F fk45njJKDBg5R82+tOrWXiqJW+0KaBHxEyDt99lGMs30yssCGmGYi9T6VgeYOFu1BA1U 3Fng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021822; x=1741626622; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=iEl5LoBVGArZ0Hko7f7NcM1d/VPAiCytVB+FzStXmAM=; b=lhpPMP7HRm/mPLhNThg98KXaz5k4W1qQaZqvmSxqHQE8GxdYy5UVKtKfySfqGX8qzO NrX/30wQJ9D1bFGy7Y/AAs/Gx1jARdJo+heTwt8T6CRfYAU/4O4C1Ywa1LmhKVeBBqDb +ksvZRLjCqbPJNj5yyXEw8sCi6xFJunTLk2B83xVMj6dol/r2cI8cBXe10M1dUkjeGJ5 gvVMv5hCcrmU5A+dxRcnLsyZqPdXzDYdSW4bd95Cv5f77fhyHM9FldzE6sBFVk/EGtPN opkBWmxeRg2NYviESNtUUed83idMDVizBVvJpEg3oY+nRkPVzJDC3cKlcJs2nB877K/S rQDQ== X-Forwarded-Encrypted: i=1; AJvYcCWqtXMEEP78b1Hm9kzP6hHRtittNF1jwf0oH6nCKRAtvFyrY6rQzYOvLtE/XrsWiS3YfrAo0o4b5A==@kvack.org X-Gm-Message-State: AOJu0YwEX/1D4Up7e5aSUGNQu94bsEwawKKbeGhJRpCCH4KqiTdMpixR wwSbHzxgDQgBAmejwTJUXO+MxpJmcBpLH1Ta4XJx1wizwtvahVRp8FaSx5tb3pOObpSOc4LuuA= = X-Google-Smtp-Source: AGHT+IHgoYpjT7qfoJb2A88YneKFoylvHGn17OMTHx97hw2eQNXCP3h043pd8jbo3m8XgXFe11agjUZICw== X-Received: from wmgg5.prod.google.com ([2002:a05:600d:5:b0:43b:c99a:4af8]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:1ac9:b0:391:13ef:1b1b with SMTP id ffacd0b85a97d-39113ef1e57mr1340632f8f.30.1741021821960; Mon, 03 Mar 2025 09:10:21 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:07 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-4-tabba@google.com> Subject: [PATCH v5 3/9] KVM: guest_memfd: Allow host to map guest_memfd() pages From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 8FFD040021 X-Rspam-User: X-Stat-Signature: dtftezi3einuhwrni5kf1fc9rkwxbjrw X-HE-Tag: 1741021823-764847 X-HE-Meta: U2FsdGVkX1866SjE3gE/njRd3uLc9bghSCjucatTQP0jE9/oO0V95cf/tVOj20Oe96Crz4GySWsgH6ITbEPNiJtqN7bkIfBcqbAH1CfnG3giB597rdoSFRLUu3ERoVv0NFj4WidsxrpCzZbRGu14vZpDAlGhkD+A52Ejd2Ls/BNapyu/sJi1EXhD7hEqYyAaZMrhlF4w6/f5o4cvMUiMpj7D/0S1pzGSbvQ7TuA9G38Y5WZqVRb35r/cM3rs9SwGOhI5XPk+sDAGkHjILiI/Jf8BcitgXLE55TTvH8Je03ad/VUu2mkiDRaM846qOZKHy6tu26y5v9lqgSqQOeJR2uSt4nUPMXmUWXmfIKagBT1U/MkXPiMLsrsfytqXjNdOoeYQ6poEgDt7DynFw+8Bbzohh/hAMTd0ZXqtvqITMrxguhCALCV3G0BUDsQhP3O33hACpYaQGPX42dqou2Ta16hoKaTVt3Ys/A4SRq5mFbdM42fn2urQSzNNtltSn/FfsrdptBeo9L/WXUbJ5YUw7AuSMNBfnGUjpU5MRxoKVwdH2WR7t7h/eC36eeBPNA8b9gTvgn31iZuPfZLVsq+65Mba63cejs72M3tye/+cBv06d5h0rrmLbgJbt95EBnLpVDBpeIf4AbHEEPpgCD6fDYcxBunNvAmex8IjrdTumranZMtrZD1Aq0eC/5YZNVSkqATSoxU/HkvvA6y29hsNzNzAd7/KSBjy+Xk+6N2CJnWbytpyza4CzEIU5Nf63k+fVr7ru7RC1CGFMGhWreh/g6Gs45Gckht37VQnBpWlZs0aI6QCEi/FFUSyrgT/4MD5g4OhpoGyf/ThIi95iHzzsV8nOd7DhvtWv0ljw7AjYUeCH0xO7yt2JHHaLJDKJLzZm40rrO1oHyiQsPjTkhMeP3fnIfTQE8HmBclcrA2RbFOg0JWbL0+eOaN7aczbC5X7NQHG+HY2ym7755tyRCz XQx0gvxC +KCJ3P70Rl4xyqPEdtLcts48P1rCjNPsk5d3T8P4OdEyP2ji6zpL+twEhOmRxz30+TIUUGQLGf486rFUj99Wg1AWqHJRcE+VExtMFIiUaMSL6oZl2RZdcedJwNK8dazUQf5Sv8aQNqyusp21ttSoMxBx84GgXQNfEEr4gZsB2dV/08IdNZriw8CK0gyzK3snOIIQNxXqOEqbtpFHhJHlNFnaMunWtvPmtl2rm5p/GVvYnW0HHTwv0Rel6c47BcgxwG8vvG7fNutT3yPPcEWrU+Nj7DwRLLF/1ksEC9Y0mdZEF2n9i+vR3t0lKbPXfjqrvx5wE52ojcFwWyAwi77ZWrjXW8Z40mD4bFsUIKNZQtSgT06WD8I9L17Rgah9TN9mHG/DOR19ni62BcZD3O6QLWr9lZxgpoOKl3/bVxJymGRQsiv9mMNpxx6J1U47/MAKAsTN9/nZ6uczVFTVilOYEK8LL77LP77ZWKXonRK8KyO0W9NjzwfYg/BJcS/PVAV0arDpT/j1CDZnDZ1SLErMmsmP8pO4td8u2iDIor3hN2/FUIbMsW6i8XQMwdKLw/eSWEoL1wch4bWISD2uWJZMIc+OoEJSPwBmAxm2uSqV0vmo7Dnb2V50pHTTutugBiShvW2+jhj429rftmHuSaoSGAjMjQA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add support for mmap() and fault() for guest_memfd backed memory in the host for VMs that support in-place conversion between shared and private. To that end, this patch adds the ability to check whether the VM type supports in-place conversion, and only allows mapping its memory if that's the case. Also add the KVM capability KVM_CAP_GMEM_SHARED_MEM, which indicates that the VM supports shared memory in guest_memfd, or that the host can create VMs that support shared memory. Supporting shared memory implies that memory can be mapped when shared with the host. This is controlled by the KVM_GMEM_SHARED_MEM configuration option. Signed-off-by: Fuad Tabba --- include/linux/kvm_host.h | 11 ++++ include/uapi/linux/kvm.h | 1 + virt/kvm/guest_memfd.c | 105 +++++++++++++++++++++++++++++++++++++++ virt/kvm/kvm_main.c | 4 ++ 4 files changed, 121 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7788e3625f6d..2d025b8ee20e 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -728,6 +728,17 @@ static inline bool kvm_arch_has_private_mem(struct kvm *kvm) } #endif +/* + * Arch code must define kvm_arch_gmem_supports_shared_mem if support for + * private memory is enabled and it supports in-place shared/private conversion. + */ +#if !defined(kvm_arch_gmem_supports_shared_mem) && !IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) +{ + return false; +} +#endif + #ifndef kvm_arch_has_readonly_mem static inline bool kvm_arch_has_readonly_mem(struct kvm *kvm) { diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 45e6d8fca9b9..117937a895da 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -929,6 +929,7 @@ struct kvm_enable_cap { #define KVM_CAP_PRE_FAULT_MEMORY 236 #define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237 #define KVM_CAP_X86_GUEST_MODE 238 +#define KVM_CAP_GMEM_SHARED_MEM 239 struct kvm_irq_routing_irqchip { __u32 irqchip; diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b2aa6bf24d3a..4291956b51ae 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -312,7 +312,112 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +static bool kvm_gmem_offset_is_shared(struct file *file, pgoff_t index) +{ + struct kvm_gmem *gmem = file->private_data; + + /* For now, VMs that support shared memory share all their memory. */ + return kvm_arch_gmem_supports_shared_mem(gmem->kvm); +} + +static vm_fault_t kvm_gmem_fault(struct vm_fault *vmf) +{ + struct inode *inode = file_inode(vmf->vma->vm_file); + struct folio *folio; + vm_fault_t ret = VM_FAULT_LOCKED; + + filemap_invalidate_lock_shared(inode->i_mapping); + + folio = kvm_gmem_get_folio(inode, vmf->pgoff); + if (IS_ERR(folio)) { + switch (PTR_ERR(folio)) { + case -EAGAIN: + ret = VM_FAULT_RETRY; + break; + case -ENOMEM: + ret = VM_FAULT_OOM; + break; + default: + ret = VM_FAULT_SIGBUS; + break; + } + goto out_filemap; + } + + if (folio_test_hwpoison(folio)) { + ret = VM_FAULT_HWPOISON; + goto out_folio; + } + + /* Must be called with folio lock held, i.e., after kvm_gmem_get_folio() */ + if (!kvm_gmem_offset_is_shared(vmf->vma->vm_file, vmf->pgoff)) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + /* + * Only private folios are marked as "guestmem" so far, and we never + * expect private folios at this point. + */ + if (WARN_ON_ONCE(folio_test_guestmem(folio))) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + /* No support for huge pages. */ + if (WARN_ON_ONCE(folio_test_large(folio))) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + if (!folio_test_uptodate(folio)) { + clear_highpage(folio_page(folio, 0)); + kvm_gmem_mark_prepared(folio); + } + + vmf->page = folio_file_page(folio, vmf->pgoff); + +out_folio: + if (ret != VM_FAULT_LOCKED) { + folio_unlock(folio); + folio_put(folio); + } + +out_filemap: + filemap_invalidate_unlock_shared(inode->i_mapping); + + return ret; +} + +static const struct vm_operations_struct kvm_gmem_vm_ops = { + .fault = kvm_gmem_fault, +}; + +static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) +{ + struct kvm_gmem *gmem = file->private_data; + + if (!kvm_arch_gmem_supports_shared_mem(gmem->kvm)) + return -ENODEV; + + if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) != + (VM_SHARED | VM_MAYSHARE)) { + return -EINVAL; + } + + file_accessed(file); + vm_flags_set(vma, VM_DONTDUMP); + vma->vm_ops = &kvm_gmem_vm_ops; + + return 0; +} +#else +#define kvm_gmem_mmap NULL +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + static struct file_operations kvm_gmem_fops = { + .mmap = kvm_gmem_mmap, .open = generic_file_open, .release = kvm_gmem_release, .fallocate = kvm_gmem_fallocate, diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index ba0327e2d0d3..38f0f402ea46 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4830,6 +4830,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #ifdef CONFIG_KVM_PRIVATE_MEM case KVM_CAP_GUEST_MEMFD: return !kvm || kvm_arch_has_private_mem(kvm); +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case KVM_CAP_GMEM_SHARED_MEM: + return !kvm || kvm_arch_gmem_supports_shared_mem(kvm); #endif default: break; From patchwork Mon Mar 3 17:10:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999270 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DFC70C282CD for ; Mon, 3 Mar 2025 17:11:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B234E280029; Mon, 3 Mar 2025 12:10:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AD3B3280016; Mon, 3 Mar 2025 12:10:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 94CC3280029; Mon, 3 Mar 2025 12:10:28 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 75AD1280016 for ; Mon, 3 Mar 2025 12:10:28 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0A1E0120CFC for ; Mon, 3 Mar 2025 17:10:28 +0000 (UTC) X-FDA: 83180878536.17.DC15504 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf27.hostedemail.com (Postfix) with ESMTP id 924354001C for ; Mon, 3 Mar 2025 17:10:25 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=bYRegHIW; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf27.hostedemail.com: domain of 3gOLFZwUKCKEUBCCBHPPHMF.DPNMJOVY-NNLWBDL.PSH@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3gOLFZwUKCKEUBCCBHPPHMF.DPNMJOVY-NNLWBDL.PSH@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021825; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4oI5gikAe6u/yzkS2aHXgPYAy14SbTcaxCMtBWbnfZE=; b=bwC6E2JZ2ZTbbKU6oEiw4fzacETGhNy1CXSSZICkrUSgAP6XwOzAEin2ro1m9Rd5St9C6q 2YFKh45CAP8W0NzMwKIDwFn1xHFCyOr1di65TpsgB0QKe+SFUBnpq1zvfIdg9ZQkX/waLs jMdKRMsIoPl/QlEyAgFsGcFqvklfmsA= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=bYRegHIW; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf27.hostedemail.com: domain of 3gOLFZwUKCKEUBCCBHPPHMF.DPNMJOVY-NNLWBDL.PSH@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3gOLFZwUKCKEUBCCBHPPHMF.DPNMJOVY-NNLWBDL.PSH@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021825; a=rsa-sha256; cv=none; b=O53yDKHY9cyRlQO6hYj2LWm8ctGD1xlmJCQZbW+DdZu9APAqWt90K4xKN0G2yzjGdbK4Kr seW2rbb/7omEKYsSeu0uITUcOmIngGauA1JgQNYRGqUYJGhLP/sEVydcxMfjIJ7xfqqoEy mNvHDj1k7Ga2suczOahMzHJVrRkpgio= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43bc5a18c52so4838035e9.3 for ; Mon, 03 Mar 2025 09:10:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021824; x=1741626624; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=4oI5gikAe6u/yzkS2aHXgPYAy14SbTcaxCMtBWbnfZE=; b=bYRegHIWlypyZR5JaKqt1AVUROzfDWrYiPF6LzzQZD1bMxuacdXNbRhBlBSemIa/Fd owryrxdZyxRVsvUvPOYIdemOlF6CumOasZfBa+NMHgprFSY9QDVAo1whpFkwTtP8CRM9 pFxAYrd2kDkL11fq22/amVz8xQk8Rezf4NrbLdPNBQZNnrEcJKRG8mlknt/lFoSqcerv 0qPpliEQB6+JnAFZTkoDbGve0458KF2K12VdsgDT8HjQDm59vBwspMvyTnmUmmklqlbD jhde06IVWI3YJWAHe3eWyz+fW+fwt+uvgYL4Ri9wui9pso+H/DWkcm9/32rK9UO+qyLT RLrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021824; x=1741626624; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4oI5gikAe6u/yzkS2aHXgPYAy14SbTcaxCMtBWbnfZE=; b=SV7w2BvzSGmlCaiePRLOdBJ3BvOC/HnnNF9jnzVDMQFFgUm6NW20+2zjCH1CaErTRT JmRSmzeZY0Z1P8yC65ETYWj9lYRseLNXLD4/a1gXpH7OczpwCcImVA9y3T25rxN8L2BS m5G0TMjcIerr0X2Cud9NNhl3nwuMR4oC+4Hq2Y+KLsreWn+4XhHyMyTvXS3zKMCKcgBZ r51GMBJCYTTHTQPxERn2mvvpQBvhAF0BwFK8zlo5zCp/8p6vsMqCKykFxgwzsHV42urz BV9Wpet/jglvvD22QdkbK8RLmRv+sVzYPLPxC+jc5KpmQEUEZl/o4vqODwC2C01569fZ +rXw== X-Forwarded-Encrypted: i=1; AJvYcCVz5RL/2U5PRisO+ullnnnCe0+Xkobs7UubY/Agv/bSU9A/S4U2Dn5eA8YNtP5PngayuCm8ZTVRJg==@kvack.org X-Gm-Message-State: AOJu0Yy/Yh+Dk1BYzkSVpowjVFve7L+GVL9KcWp02MJ1rsYnRoIScxFF B2UUAF1Rm1b+XZxYgDebFq7fG7BC2eJqKpgci3iifuJYZ2Qn8Z7n1LzCInUqH85FFE4YpzvVVw= = X-Google-Smtp-Source: AGHT+IEpy3ESU/AqUCDzF54FxB9DXrs2FJ78OuUIkcSkZmbkbP/GGc1e3KuLkPNQiVV2tNmdlqnulefRMg== X-Received: from wmcn3-n2.prod.google.com ([2002:a05:600c:c0c3:20b0:439:93e2:dc87]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:244:b0:43b:c7ad:55f0 with SMTP id 5b1f17b1804b1-43bc7ad56ecmr27090665e9.5.1741021824142; Mon, 03 Mar 2025 09:10:24 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:08 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-5-tabba@google.com> Subject: [PATCH v5 4/9] KVM: guest_memfd: Handle in-place shared memory as guest_memfd backed memory From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 924354001C X-Rspam-User: X-Stat-Signature: ddn9okjazkoybf8bex17uefrbrxb3ag8 X-HE-Tag: 1741021825-161568 X-HE-Meta: U2FsdGVkX18Y4AQL7/ChHQVkUHcEQrV9u/uG3Tuu0VTi/G3KXUf5x/FgEokkvUgBDdgqU1vWRp3wrhuSTUtMSD3q7Wup8pRfGImI31Dn+OV8lYHdaOcp5VgyHe4g1w8fXmBtABeD6tyeUJNapweGlKJmI5J+vaDYDFf/7b3JhLwhkLtp6FGwmTPl/hWJSi5KQj/7JuTT4jBaiPmuSmXHn9vV5pt+fe/yTJhgauOHmeK1zhThEpOupNcptRwPYpZG5vu2HqqeOSY74kLMhHkIEb1BbevNOHRKJsnrL9DtjOfuJwnJqV7hzIFhWFV4o0bch8sPiTQ+iGPvuoNJKKDocjoopcuA7PawGRP5TD15+6OQz6uSaIhMsyqueheGCdwjZTup7Rtk4+KLyutSTCV1nLQkcN0PyQci/EamFKyjghdHS8FxjJ/iEQeRn9wi5g6hRJoVyOsA1xF7opF4RSX3XfUvMDo70vgHYsi1KpbffNFYIisFUy8H9WIBXzv0gLdkJNSWuP/Z6rsWKemUEPgeTL5zRegBJ1I1oT4y5CeP9euzklO+/urY7NM+J5/UKb/2vW3Fx6DRFtdVpc6rTbQiTduvwJS5xU/ftTVhC6rhQeFJgmnPNLh4qYrkcb9czc1r/mPpd7hIm9VPAdW4QolLWp8sAteuJuQFxFBc21NJWLxd7mdlY0waH89F9I1bmcBhRrW+wdMPL4hG+OF6xdvMX+m24lOfUuA0/qYv3K7yNvP9MUhOtRLLzzRYbcadYTfRoLdE7Aof7yh+/DoYmQCWSmN1m5Kt86/4bUWpJ+Yq+F+Bnqupfk47ClcYx12pcLCoydm1lKhnfyde7dMFlaZIigDjJpp5MKIg6hgT/rTcJYf77YECkf3XEj5gTxNfbw/AQM/B4QQnPP7s8tkbmfFMYvBfdj3BiEdYY/d8wwKj+k6FQHJVzX18R/FD/mx1YeeEd9+iW1lgzLIaIh1VxoF fTeBomUe Yu7LeZrYSXfYaU/n9qliMI5T1Z5OHIqN/a35Ep6V8ZOxVpKCuWM9Rw8R+PzuW7mxe7Jp7aJt5LLek+M47JWEQd1Ga3XKhe6qfast9ATek76hYaqgtwFhuFjTcGcr7NfOYPCZiKof/8X1dwUwmrSBSzY+OFSDUu2nSko7Oe50ybi2PiFxukXhhJgaH0oFJzyZ86eN5Asd5Y2eZojjP0+7z/srqQVA3FKdABbNHIrrNpthEMnHVnbDj3bWBbtlH3iLmusPqJ5z4RGRdm9Rt8cDrXzn2VrddHKCyJauIZGleqSaaiq9Uvbu6ZoongQOgLAXWWMouN/f22OWfbkfu4xQ4u+bftdcpzYCH3CxwA7szG5iWQ088Rr4xZxz4FtUU6NccJs/0LUgZbF2wd1nIojrbwOJ1jLvRBnUh09K+a5DgpVmdGs/Yxf0Vq+rLS6lvWZsqy/Usq/+VhjIA+NPQkwWQ7qQJqp7jKdPzOAhUosLpY1hr6mlIFLpDQiHsI/7oNO7D8oaRn8Fpgx020GbyYvTvR7ybIh8n5tiR/1ZO5wPjt6gTsNDkSk0fib10h/S71+ml/nRZSYFuoE5kfBTGJcvF2QHMZ1YC/iGGORXJh6BkWpxcaswV10UHz2lWOTipEUuzv/H+InkLaArdtIJMiUoxhV+Ogw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000004, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: For VMs that allow sharing guest_memfd backed memory in-place, handle that memory the same as "private" guest_memfd memory. This means that faulting that memory in the host or in the guest will go through the guest_memfd subsystem. Note that the word "private" in the name of the function kvm_mem_is_private() doesn't necessarily indicate that the memory isn't shared, but is due to the history and evolution of guest_memfd and the various names it has received. In effect, this function is used to multiplex between the path of a normal page fault and the path of a guest_memfd backed page fault. Signed-off-by: Fuad Tabba --- include/linux/kvm_host.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 2d025b8ee20e..296f1d284d55 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2521,7 +2521,8 @@ static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) #else static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) { - return false; + return kvm_arch_gmem_supports_shared_mem(kvm) && + kvm_slot_can_be_private(gfn_to_memslot(kvm, gfn)); } #endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */ From patchwork Mon Mar 3 17:10:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999271 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F40A3C282CD for ; Mon, 3 Mar 2025 17:11:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DBE0728002A; Mon, 3 Mar 2025 12:10:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D6B3E280016; Mon, 3 Mar 2025 12:10:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE76228002A; Mon, 3 Mar 2025 12:10:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 9F57B280016 for ; Mon, 3 Mar 2025 12:10:29 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 58FD480D1F for ; Mon, 3 Mar 2025 17:10:29 +0000 (UTC) X-FDA: 83180878578.21.BFE9BD9 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf20.hostedemail.com (Postfix) with ESMTP id 5FF671C0019 for ; Mon, 3 Mar 2025 17:10:27 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=rEOswSxE; spf=pass (imf20.hostedemail.com: domain of 3guLFZwUKCKMWDEEDJRRJOH.FRPOLQXa-PPNYDFN.RUJ@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3guLFZwUKCKMWDEEDJRRJOH.FRPOLQXa-PPNYDFN.RUJ@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021827; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kBo9cxuckkLxj1P4sgBwDTqSuyzpVc+06bRUFpsmRRk=; b=58Afy6P21w9rHwx/3WWKd8GkMe0fk/QcRJ5fxWNj234qB4k2yA4NBOo3w3JnVsvnSWlNNr s9MC3YnrwF4HcbgaeIoa/m3pHbx3nbLZaKYWFJgetD17/D4LKRdUr+pnMpliL+Xn3+ozOh Ux0QOde+rtz0KDVsGP1PGNtwMTsblMc= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=rEOswSxE; spf=pass (imf20.hostedemail.com: domain of 3guLFZwUKCKMWDEEDJRRJOH.FRPOLQXa-PPNYDFN.RUJ@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3guLFZwUKCKMWDEEDJRRJOH.FRPOLQXa-PPNYDFN.RUJ@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021827; a=rsa-sha256; cv=none; b=t5cCaUw48L/bH8FmWEsy16X/gSE43K/PRGH7acS7mD7c98orLJFQZHTCbMQdALPStvz7m+ zg+gsZo0JzgN1PTYSp/Bb2PJj3caTDqwz0XmRr1SWdETnx8BRmjLZdu08aTyRi/xWJEPLM PCDsJ9ZJUUTCDoM6zAb+1C95Q1uAAi0= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43bc1aa0673so5700115e9.2 for ; Mon, 03 Mar 2025 09:10:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021826; x=1741626626; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=kBo9cxuckkLxj1P4sgBwDTqSuyzpVc+06bRUFpsmRRk=; b=rEOswSxEGvQu3G6Hp/cluf1Am8GeTTo51jPCy3QYrZg/0v7CltOY6qf3gpFUbOzmVy mT7aTeue/I1dCvuk/fjR1E0t6fRIVxQKrAoVvWk9sl85ZyblHSK9yKPbEFrDiFfl5Ah7 VqWn7ql1P0BgXKLlUrXxB2nXJpcYcNuqfyD6G+QUSnwa+9bbhMIPYHC6UMTtG6GDFaua Nb6iqQ+/EP65Yjv0bk6V9BbDZ7ecv9U5EX/8Sk7jE0QfGBh+8URUxJ1+aDq41klByXiU R1RGzQh5tlXMF8B1BM8RMR7g3G+YKvFWCPHQe0IgFYGopxabi1WipFtXmGkvwrUGdjDh ZeBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021826; x=1741626626; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kBo9cxuckkLxj1P4sgBwDTqSuyzpVc+06bRUFpsmRRk=; b=JiCyEF3OtaNhRCEngwcyAXU/vQcAfucD94mZJ8bc4Jq2OtbQpr4a82wL3WJsQ77vs/ 1p5lB32uPsWpR7eLWvLM6XTR9P4Elv3l0ODBMo+t25l2QdXp9jJQmfllnQduF1nhBwUo 0B+HRSdu68dwm7uwph33K7PjvlDP24u9Hqhs/Vu1WSSVQfff8eOAizirQvvRUBG8uDMQ zvhqmhSLmK8LSjRaquVEVvLZUuuBkSvu/x+rfFoDt+gd2cSLA9VOEVvEQF2qaHmYRZRd xyY/1eSBrjGa6CYv54pVdFj03NVd/02u5Y4nKnNx1HK10W0A/AobDWgFqQsprtxFdHJm KRmA== X-Forwarded-Encrypted: i=1; AJvYcCUHqn8PUk/Vy+oib/WZkQC6lNNIS5yFKfShKPyArC4SFwd5ZlgbV1t1SSS06CqzoKMR8Qal2mbsrg==@kvack.org X-Gm-Message-State: AOJu0YxHKsuapabp3b32EnAQMvNpz8/T2oxViyD4SfgvtUsCcKHRMtHG lte45Ts4J8Coxsb0DPNGJbiUmfSDyVV/bMlziu/RF+cdbVGl8D2+RhI9DB7xLmanTJrSeI7noA= = X-Google-Smtp-Source: AGHT+IEzzWpqEnLXSXMECYOpjexIXQkN5OcLraeoWVVOWbC+GmYVuhkSVhxjsVgVJQAszWAWjCT5GaMLGQ== X-Received: from wmqa13.prod.google.com ([2002:a05:600c:348d:b0:439:64f9:d801]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1f89:b0:439:96b2:e8f with SMTP id 5b1f17b1804b1-43bb4550794mr52549605e9.28.1741021826102; Mon, 03 Mar 2025 09:10:26 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:09 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-6-tabba@google.com> Subject: [PATCH v5 5/9] KVM: x86: Mark KVM_X86_SW_PROTECTED_VM as supporting guest_memfd shared memory From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Stat-Signature: bpoxwg9aqwh1z518sxx8eyxu1db3nqkn X-Rspamd-Queue-Id: 5FF671C0019 X-Rspamd-Server: rspam06 X-Rspam-User: X-HE-Tag: 1741021827-4717 X-HE-Meta: U2FsdGVkX186hAPjKn13nSRrB1wsv367tRPInZB1qwD5wNdpcaQo+OOAqmMwFZZvhN0auRn8TORDV6j2Lp/6CCQ1FIgTwMvEMKR/nG/CF0gubBPHyupxPi09op1XGXUg0Te94MErVV+A7PS6Y1E6r/m6tRudt9fM3eB9SHAZzlWNap4XWkcJwzIAcpXelZMqijFgY+fbqOGEr90jR7Fnd1RDL5JOWPATODJGQNDI1eNV9KtMBa7sTx8KxufeV3dfzDC6X8KF2E7O7OLfnE2bI1w91u/12zV5FlX/LWU4D2+Cm/PmTrZRJsaemUjocH6XvYLJvtB6WY34vP+xhRxUncF+e3JZEeN3h+dgzvJJCgFmRgyKga3GQuHmkmdx/59ANpm4ueC5crBuZ2j2WXn90V8+ir1jq7IsJHvz/i9BGsNtYbWxcdkvdZEsE5x/41sfCUiqyd7EigTpMLzg2StluHy5KLWD2eR6IQybueOubaHI8yo13Nutk+DU6SJalpDAhqZY7ckk8G7et0AIWrrc0tiSE6kQvbq2cIX23Lv5y3MF1ZS810ib8sN+EGmDbxupZ7Ixgh0OzbB3ozC4nd2Z5t3Ep2S7gmv+em/6qBaKhYf7kNHi7F80NmVLpFOGfmIwBJ3dwDDIpZ/DzVwI3q8CGEs0FuwvGseagtiUBqkX74zEXrawzpYDezdPH7kemPK50Vo3LewFePEoECyxeFAd/5nPMlok+zOJR2L6d/AmcGnU4VkPVmfKYH/dzSm7RtthwoZ0OI4uCpyPQKe4AEWUUNlYzEvt3DwfwkkmbVdzohV/wEel2C6U8VkFGDC1KAnvVT4Vzd7T1cBGTVaZFgRLr9NcHltpZ1YOUJn6R1aUGBCjxBVr7q31NvS2krd1eH6N6o9mO1x5uedvdd88QL6n2jZpkUqPfCkJHNyzgh8IdxldQX8TAJxdziE5ijdI4XwHjEzGh4tkNtyNry8dHZE gB8+wr2j 3Pmw3UK5w5WNx2ZE3ZJ7siiLBBWGl5/cWnAcClPt2o6xMN8VbskBN2yjAezM+w4hW4NZHoGm5lvWzsn5Ppk17nSskXZ962AAnfseZJlRrcZyXUo/x/lXjwdKLA5sEtYqMdsWS/EalAEAbHkwuh9AEQbXvhUF/sLHkNLIfAfMOpKFV+UYvfq1BNn6kvqORuw5FaealeXKFPy/QH0g2YlHvQgwpSeLuscpk7lziZ+O+cMYTtzCqAjAfl4+IbpMZ37nVYdH/8s0KWm7bwb10qD/G+0lpgn5l3fI3STLOr4IUrl+0ZdW5Upj0VNdcH2pQWysoFz+Vd6FoF5L9SYH3ilBZlMbEL2xD3q7rLwJWmJ3sDCiU1g44YLyhPtDfrWFgo7K3wuvvIsmyszN+yIlfoBmKzcXhKiom7eYvkNjNVOTn9Zq1Tirrs7gQQNRSA3lsQqONyVoUOhLRoyy2PNsd1luMNWnILXxtYqsLcH14ayCH/ijGkM65LbpEZUbOL6YC8jTYi0nQzkldU5HY7a0w1NfXQrq1dQWf4vBYOCByeMJ+euJPuW4zK6E1AC4D4Oa+t53N84iGHLLlryS6Srunz/HMqZsyn7TiHJV6c79kGrrYR0eaBqqVJzdqubMycpAZoKPh/3ceBNdxeMO/PaPbIdWb8WvlqQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The KVM_X86_SW_PROTECTED_VM type is meant for experimentation and does not have any underlying support for protected guests. This makes it a good candidate for testing mapping shared memory. Therefore, when the kconfig option is enabled, mark KVM_X86_SW_PROTECTED_VM as supporting shared memory. This means that this memory is considered by guest_memfd to be shared with the host, with the possibility of in-place conversion between shared and private. This allows the host to map and fault in guest_memfd memory belonging to this VM type. Signed-off-by: Fuad Tabba --- arch/x86/include/asm/kvm_host.h | 5 +++++ arch/x86/kvm/Kconfig | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 0b7af5902ff7..c6e4925bdc8a 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -2245,8 +2245,13 @@ void kvm_configure_mmu(bool enable_tdp, int tdp_forced_root_level, #ifdef CONFIG_KVM_PRIVATE_MEM #define kvm_arch_has_private_mem(kvm) ((kvm)->arch.has_private_mem) + +#define kvm_arch_gmem_supports_shared_mem(kvm) \ + (IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) && \ + ((kvm)->arch.vm_type == KVM_X86_SW_PROTECTED_VM)) #else #define kvm_arch_has_private_mem(kvm) false +#define kvm_arch_gmem_supports_shared_mem(kvm) false #endif #define kvm_arch_has_readonly_mem(kvm) (!(kvm)->arch.has_protected_state) diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index ea2c4f21c1ca..22d1bcdaad58 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -45,7 +45,8 @@ config KVM_X86 select HAVE_KVM_PM_NOTIFIER if PM select KVM_GENERIC_HARDWARE_ENABLING select KVM_GENERIC_PRE_FAULT_MEMORY - select KVM_GENERIC_PRIVATE_MEM if KVM_SW_PROTECTED_VM + select KVM_PRIVATE_MEM if KVM_SW_PROTECTED_VM + select KVM_GMEM_SHARED_MEM if KVM_SW_PROTECTED_VM select KVM_WERROR if WERROR config KVM From patchwork Mon Mar 3 17:10:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999272 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67711C282D1 for ; Mon, 3 Mar 2025 17:11:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 83D3B28002B; Mon, 3 Mar 2025 12:10:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7ED0A280016; Mon, 3 Mar 2025 12:10:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 68D8428002B; Mon, 3 Mar 2025 12:10:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 4B4D8280016 for ; Mon, 3 Mar 2025 12:10:34 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id E91C3120D32 for ; Mon, 3 Mar 2025 17:10:33 +0000 (UTC) X-FDA: 83180878746.11.12ECE31 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf04.hostedemail.com (Postfix) with ESMTP id D02F54001F for ; Mon, 3 Mar 2025 17:10:29 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=lFjhr+du; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf04.hostedemail.com: domain of 3hOLFZwUKCKUYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3hOLFZwUKCKUYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021829; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=eGgo65KrsUc27GFmFSac9JDxcDr3yyxu9F6SQNqcVKk=; b=m30+cEKmKgjzvweTODddvGWq3abc/75drZ8ClS7ss0AVLlY7UW9cGHT97t9E4lXNvJOeW0 lAw9aExbm5WWwTt/f7VsfSBgwLGorttse6YodNSwj9c0tLcAiNoFrOpcfOdxmFmIt+QXzV CMM8X3FKFT4EFJft/vJDRFKNCGt3HMs= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=lFjhr+du; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf04.hostedemail.com: domain of 3hOLFZwUKCKUYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3hOLFZwUKCKUYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021829; a=rsa-sha256; cv=none; b=Xb1FS9TptOHFSBVVxGl0pN/Sx5R+Eh2fmZ9C8ErFn1IssMBSAWGastshtCxpE4V3NYRilH nb0omN8/rFwjyApMo3W45R8ObjwGbW7bPw/ZFFn6Fxqq9/3SOUzY4DXL5VN9Zu27uAQTaX VgM73La38bBLd8Pc5OpJD/KxPtH07XA= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43942e82719so33496735e9.2 for ; Mon, 03 Mar 2025 09:10:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021828; x=1741626628; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=eGgo65KrsUc27GFmFSac9JDxcDr3yyxu9F6SQNqcVKk=; b=lFjhr+duUGP4UmIp5rGDM0cdSP8Sm7kXYsJHY0NMDZPIO9Hpjl0OfNVKb8fqJOeJay 4n/dcoIReHOJtJg1+JyKkVw4YkOnKtldLlUdT6olzvxjXveUprqfIQcTbLzdUC8K3seq Yg6RDg0T49ORw1dRVGZbSmzPxbnrdxdY1aLwdBflNRJOs1K0jbpAOmse8mefhKW3XZSE 51sgGDUbSY6UsAJEkDrgVTFwgX6WsjncSIrALknsP5II0Up2SUTNxH/xJXpY5/+TD53O Y2y4KvX7TvaoCPYkhWm47tnUcywcgQpJsSF+3zEXOdJILGSysgHqDEUYC3WAcEEMjDlb urWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021828; x=1741626628; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eGgo65KrsUc27GFmFSac9JDxcDr3yyxu9F6SQNqcVKk=; b=BFRqEUoefv2d79b/7F03LRT2wHdQ95Jclc/JebvJ0ieVIEBXSiojlAe1yvdFfeL4yl NJ9W6UVRsUutXY0AXBbXuDmopp5oYVUEK54brh/Qm2y57qM715O5qtGK+vnsORF1IRGX 1a24Lv7g7/G4b4eKgydzzXUoa4wjwdOndGj+4dqoEAAkuRN2amvACqvBO0pvw5kv0TuE ceV2PqtBT9vdUYH3pup1wXDqm8GcOZbdSl/ePuu9idNYHxkpHLkAW7KIKvkP5ta18Rui 2j0xr9PQd/B/icz5pEqOFkGMNKAJ6ik5rFCr70Iv7uXqG4oB2S/cNd4J3sCnzm0Rz/0L Z6Fg== X-Forwarded-Encrypted: i=1; AJvYcCWRSUkxP9C11FHrF1X+NTuxINlzzxkm7a7HdhVhqnehRwA8305+K6k6df5X9d4A2cRAXLSBHW56jA==@kvack.org X-Gm-Message-State: AOJu0YwlJYVJLsyUP5B1lhHZsZj5RRywe3D9bRE5YEqmVryeQS1X+fZF odYFDkKsCMkilY69nKAdoAuTNix0NH2Pos3ATW1Y6Hxz7XdMHk2191uavywdyEX4+uqSPDbpIw= = X-Google-Smtp-Source: AGHT+IEzTL2DCjgOiyb3Cw1M14HJjX54cJX0QrxcjGlJF7HY9SJWIHrxMRrLYT+9PiOpxfffVqhEaRBMeg== X-Received: from wmbbd15.prod.google.com ([2002:a05:600c:1f0f:b0:43b:c4f0:4c2f]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:5122:b0:439:8ef6:5782 with SMTP id 5b1f17b1804b1-43ba6703c4amr121624595e9.10.1741021828083; Mon, 03 Mar 2025 09:10:28 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:10 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-7-tabba@google.com> Subject: [PATCH v5 6/9] KVM: arm64: Refactor user_mem_abort() calculation of force_pte From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: D02F54001F X-Rspam-User: X-Stat-Signature: een8jpcofr5x7oqkjfedh4scnm8ch3da X-HE-Tag: 1741021829-39076 X-HE-Meta: U2FsdGVkX1+NCZSd/8CiuSQ7rCHQqZZJUz31+uu4wAX0wzLZsdVqlTUxaZDwQAxtNC5rAHSEvULy7XBJ/kpr3PRxEXIiufQpHho75uEZ2YSMR1SB0ZaGgkNmlGxSIv6lPY9ZbSKV9POJ18QYAFPAUek5fsO29vLmBFAv+Xx9J6qpIMbdrqcvH0ta9jnHnmRYd5bWSMtbHiz6UXh2LOEJ1JWKrJ+912WrYXVi8EZWtdOIatna5A4CyjXc+/DQoKFxq5lDbmXRFVKxncjFZdUeZhH5cw0IstkB5hydh5q4D2H2RmGUQGD/2eCO/f9Zv72Dk+Xi0WZrdo9jxgybJ2VIpRykYq6IyETlHh0ErqQj9p6um5XXoT/SfcHVe7dPNmfild/C8x+0h+PVWRB6ZIIYMG9QbV6Byf8L06P5bYzr+EaUHI7nolKN9iyMmaS4wP6NsoJLzHtLKalY5l6dqWjhluwa5XdZ/Kh54NnL2LaEHsczPHcqO3T+1QR4VyWpbwo9g9LGpj5+qU1M/jcFEx+3ecLgmRxNeYwD6cABM6stpBe1em1gTOw6SACuTI4ty+lXl7cV9v4RnZdD0YTQ11SS+aVe8jQP9NlFIkpQ5rNqHtbgTNzw9kT8pCAZ9YkENY5oZn7vnoxHXyXCp7zH8fXdEg9mbaWUeExEpDgwi/spcyygI0Wo9BhcS80LCnw97gT7BaqDohFhgp8Uc1wb2V+3LklVvXz+vk/o3ihoMFQwi0Z7hjoCq9XHZvxeA3gEl4E+rxRKRQuPrPTNCmgz8Fiq6OOZImpnGVDDB6eZwvihons18le4b6lEoP9hRXlAR2bBea8FqwnTU5Yd+U7sxyE4hcVLDz+DMCcMR4uUVj5FX5JtAoU0tJFhXT3rwrInhLM18RFmqC7Ck+HMUuJL1vihIPAt1GKYIZf4mGHJ3SStJJO0yaekjvtYGvNNy5mP9DYWsZqeeiAq51Gmc3390qc vWxM+Llw 6CFbWB3wH5RhutkwQXMcHgJfs4U7AmTBGY7iVubZDA8OyrvY5ma+gT8RomxCc/HzrULDax3MB4bEJNvDhD9wUcclDNXApMPZTZsN3N2Yiu8YmUXMvIJ1KMdkPDtXukaBfv1+1iAcHWj10Rdxvp+aq8Dfxy1b5fj3MirPtE2Oz3t6y/or0u6MybKI/f9oBpZ+N+6mdCyGW1SvCUfV03JufW1uNdg/uDGW/Ih+Z1LddEAODamUYYt6qtqAP/S31jPSbOoorFYzW56tH1+AIqqxCMd/xVj90ZsNAvq5d/RoFzm1CXt0x3hETccDLKTI4UOGMXWfK0TJxP8Zo7GOO4dj6sZG7bjzVn9OyGfiLV3z6UJT/SdCmV0GbYA2/RkDbfqrwN/vdFrYxzD5Tad2/fX/O7jkiIFWY+5tDmgpPjdiVe1Baxj5z144OYUSLu+bruLvUohBAXWsG7nv1gAL3DY5o0QVjODuCnJ/3de0KMOL4Y/4TSyjsdZXN3kw45xSmH1QvdIsfmxh2ghBQkO/nOfCXQlg4QGprDMzzRGNxUn/NngVs2I/CuhHLpm+0c/ff5hR9yiiMFKP5PNi/Qeg9nBVQ6hcQeoFatZocAw/LKdzJBpRMDO4yizbB2kntl6Yy54+m2N9Do8+Osdv1GqShGBgXBdy5dA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: To simplify the code and to make the assumptions clearer, refactor user_mem_abort() by immediately setting force_pte to true if the conditions are met. Also, remove the comment about logging_active being guaranteed to never be true for VM_PFNMAP memslots, since it's not technically correct right now. No functional change intended. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 1f55b0c7b11d..887ffa1f5b14 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1460,7 +1460,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, bool fault_is_perm) { int ret = 0; - bool write_fault, writable, force_pte = false; + bool write_fault, writable; bool exec_fault, mte_allowed; bool device = false, vfio_allow_any_uc = false; unsigned long mmu_seq; @@ -1472,6 +1472,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, gfn_t gfn; kvm_pfn_t pfn; bool logging_active = memslot_is_logging(memslot); + bool force_pte = logging_active || is_protected_kvm_enabled(); long vma_pagesize, fault_granule; enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt; @@ -1521,16 +1522,10 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return -EFAULT; } - /* - * logging_active is guaranteed to never be true for VM_PFNMAP - * memslots. - */ - if (logging_active || is_protected_kvm_enabled()) { - force_pte = true; + if (force_pte) vma_shift = PAGE_SHIFT; - } else { + else vma_shift = get_vma_page_shift(vma, hva); - } switch (vma_shift) { #ifndef __PAGETABLE_PMD_FOLDED From patchwork Mon Mar 3 17:10:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999274 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8C82CC282CD for ; Mon, 3 Mar 2025 17:12:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9EA7C28002E; Mon, 3 Mar 2025 12:10:38 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 99A8528002D; Mon, 3 Mar 2025 12:10:38 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 83B3028002E; Mon, 3 Mar 2025 12:10:38 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 6505728002D for ; Mon, 3 Mar 2025 12:10:38 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id A6E35140D0B for ; Mon, 3 Mar 2025 17:10:36 +0000 (UTC) X-FDA: 83180878872.14.27686A4 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) by imf09.hostedemail.com (Postfix) with ESMTP id 1B8A814000D for ; Mon, 3 Mar 2025 17:10:31 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iirtDVC4; spf=pass (imf09.hostedemail.com: domain of 3huLFZwUKCKcaHIIHNVVNSL.JVTSPUbe-TTRcHJR.VYN@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3huLFZwUKCKcaHIIHNVVNSL.JVTSPUbe-TTRcHJR.VYN@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021832; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=gt/riWGcUGRHcZwRoC2V1jTyAk/j0KNMZMVzsat7B0s=; b=kDzFhjTUi3ZAm/a9AFo8NpvCKrnF3K7pxVdV0I83DSVevyVfXKtzi8FkfZ5cK+3Sj1Fnep LeuuKcCzHkD2XEwKYbZ0rQdLv0r5joTLswUGAwvcSrwfA43613GiLAxWLEtyn7m7VVaf/G z0Q1HscACpVAnkE4Od08fg638AxgI2w= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iirtDVC4; spf=pass (imf09.hostedemail.com: domain of 3huLFZwUKCKcaHIIHNVVNSL.JVTSPUbe-TTRcHJR.VYN@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3huLFZwUKCKcaHIIHNVVNSL.JVTSPUbe-TTRcHJR.VYN@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021832; a=rsa-sha256; cv=none; b=L3zwXj9/foUjsCpsQwrgnAAEW0T/M7ffhqmfPDIu5rIEmdYo95n5iPMiMvt/pkBGV5M1up H/Gu966/EgmeQAOs/ME2zlySimo1gxZiSzDDwbLHkr3d2SbIGvgD5QOEgT9W2a+wYU9YXJ cXwckDzC2ckp7FqR7P1cGoS+yS3oRb0= Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-390f000e962so1119757f8f.2 for ; Mon, 03 Mar 2025 09:10:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021830; x=1741626630; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=gt/riWGcUGRHcZwRoC2V1jTyAk/j0KNMZMVzsat7B0s=; b=iirtDVC4ojuCySZbICPZSS+Tu4nAE7BRGBL+Y2qGNGG6nnfbV447Ka9lewX2Bpgk+0 xlL6dpTQTIz8Zf3ESRJTkFOrBGQCv2ngFiHt2cKq07ZgY15lwzXsNdwC8QDQhiUQBFm9 vMYP30x69ZuubbZ/fhQ3mQEG3Dwu7rSsQo1mDaYue7Ngicktv0vZo9kJuVh1u4uiJeyO StOMpuIAbyl2Ams38LQPq+tjGlE8C8A1a9XdDY2ZVwvc6yey1ZiLuOiolB6h44nFHvEK zSsm5NMXNjuSQOm9LoiEzoCtqjwXN1rvj+LqAlupQWQ5Xsm0BCxMyt4v37RSBMwTYk+N WYgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021830; x=1741626630; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gt/riWGcUGRHcZwRoC2V1jTyAk/j0KNMZMVzsat7B0s=; b=YjmKtuycDEcsrIcZlWy4aTPytQh1qrRqg83T4jquKJX2KSpUwMeL5Ri3tOvBLByAhn QUSXDmuFFPJd9Fk04XtljeFQwu/PcpxnoJNYFiA8ZHmcFeQ82iJIqAKI/s9Yosg+Mr4I DtodEJOR7H/FgIWA+5GbrQJaoA4hp2HCJOq56WwdlmNm2jZu+NQMrDpeWHDpKACM0eCA GwypDFvUZQk6r5KIbLrQkX8TvfNS5fQJBA2KFzR/UrHiZJwQXauv9nX88wQO0qDv5LUY Punac0t8VQcRr8GroygWUCL9x++yKAMn2+xtzbjOqAtmz+tiotPaJHoGWuFg1JBsvQow Suww== X-Forwarded-Encrypted: i=1; AJvYcCXSMk4B4CNIyB0Sw5rWndPqQA7i5svJth7mLy1YB9l5cNBPVE5WSpC4DpS0ssO6+0ngiw49si8EFw==@kvack.org X-Gm-Message-State: AOJu0YxjuHB6NGUSxmCGZX1KiNT7bmo01HhIV2Ors7hEpWtEOaq/S3ZT SfAwcXdcjp4BX7dsX0cjc5Eq+5U1TCU01rGIoEFQ3GpLaEHFBrvuVGwTEb5zgQxAdHPtG/x4sw= = X-Google-Smtp-Source: AGHT+IHjUvSjd+E6xvwns/9W7bCh3g1PvhkarhqtlRtOoo2/O/7/4oOGG+YV5YIkmlaYkfIS1yNvw3pbbA== X-Received: from wmbfk7.prod.google.com ([2002:a05:600c:cc7:b0:43b:bfff:e091]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:4023:b0:390:fb2b:62bc with SMTP id ffacd0b85a97d-390fb2b634dmr8086880f8f.23.1741021830280; Mon, 03 Mar 2025 09:10:30 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:11 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-8-tabba@google.com> Subject: [PATCH v5 7/9] KVM: arm64: Handle guest_memfd()-backed guest page faults From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Stat-Signature: srx5fqdm1jn99pj4wfk4i7u6snur6qa5 X-Rspamd-Queue-Id: 1B8A814000D X-Rspamd-Server: rspam06 X-Rspam-User: X-HE-Tag: 1741021831-3338 X-HE-Meta: U2FsdGVkX1+wK1pdXAZqFDhxCrDgm/+OksO/8WUbanqZ3QJxJCncP6uI1NKEOsSFewTeCB8hxFN+9z8ta1SqkFvK87hLYTwqoQCEWutwz/VPCbqiQ1j1K6CaqpK/vfrW7A8ibAmlhCcMGjXCZMTcF0X+Yzy0e3ZpgKwPrSB0vmns96fOgXmCM58yzvSNTJsqxkKfg6n76R9rWwbAOXSKeWC0FAfEKVa13vCi3+0P8pGX8pNOX6bZLQd25PZJWzNZ/p2X30h2XX7+ZCh7+azn0UZZ5lLVmliXaHokXhCCeJpXYvZMpK0nckUoJyAIy34mZagolxKTVomsGJBQabx7SEQvanXFE0czc/4wPV07fkAT94kKhu+OkvfnQTd7qetgYK8nuTFS3UWfIvnMiV42o9f9n/P2WLkgA8YUVLM9dl6WygCLVcoGWwn6tbOeglNtrvFayE6fZD1ROeYNTUrH5yEMvUbVrhk0JzelE/EybHvRYj5yFAUNsIE6QaJMNa4aSQVJ12fl3M5NP65FEAZX4FxRTC8jWdbBKry5pJWMLykAJXvtlkdJUNDRq23FKF7SVbeG+uhvvq/fc2GxF7ZcJtHKjLgGmc5mJwI6mjx3Qt/+HVOpl0PEp0Ur5a+DedIbdoe0ldJ06xRO85OevPk8hMoMUdURg21ZcVAHXi13Nx8NdzmlPhdTQq7SJhXeFypAeD44saZjFI/RZynB9BUZGoH1SuXSpuM4+k/oVpSpvujWZSGbmu14Aj46CAVba0UYjDm1cFSoZ7GG3VeUrM7e6LCCbpbsKSUVhLVR7kpxbI+aUsbVYVtsQ4wI24aAMZDz0HUdKh7v880U9ywkiRv5K3EzVtu8Ts9GwH4GwF7NhjvSIFtmqa/9KlHVb0dzA83O6UiyVnPWmH+KyyRbVVmZ26NifszbpvG5zlxxLzlwV/DXneNyNdTNejWIopGBvKdaGjAUqd01yNb3hdvoGst O38E/2sS QVyCnXEDgPWXpflknoI7utzKYneJsB7/M0fMubB+QlXE9aOxh1Zvlw3wmsK4SCjzgzXKrWGEqDzOqtVq2d4bMg7pZqG7z9Mo4CukGHmKnT3mht1BVjjznpkyL6NO4CxieEgihpDjaR7eWTrBqRRCuocmEsWBJIp5GgzHLq1qPwekJxUnmxaqZ/GlO42ajH3tS2qRg65+1c2j4kgF6H/M6tlUXCsZKgx4b1Fo96FO7kbr65JajsFV7zvlB2uLC0evS4NTQwvdhtfphH3Thj8prRCzFJlh7oeRtB6rUZ/moRGbIwxecoNkMnQKGvaA2VjTleNsiV9ItMRQiUMfEbsYKi3o2XyJOFzQEzWr7OxNtroBnr0DLzOqBme56DaZaHBXJjPTiu6r9fxQv4G5DnybHtKSuj7IETVtkExMsO6z1rTw4gVkt50pL4hesEfnqS2+Vjmz3FcgWgs613RqkrQaFOqv8O15p9pgicj/Nbz30JfaEzT/DUZN2S4kStUT6+gmHjbB7ugZasFc4YUgSQ8YexpBPhgZuERD5lCn/Du5br+TwRVOCovfZ2H4KFR4t/H7A+louuXsX69/UYg2xCw2KOwbs/uUGVCWwyruVKd6f+vu3sWSsm8gmUQUOoY3llJA5Z2OMdX7CHf70+4apW9amdrQXvg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add arm64 support for handling guest page faults on guest_memfd backed memslots. For now, the fault granule is restricted to PAGE_SIZE. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 65 +++++++++++++++++++++++++++------------- include/linux/kvm_host.h | 5 ++++ virt/kvm/kvm_main.c | 5 ---- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 887ffa1f5b14..adb0681fc1c6 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1454,6 +1454,30 @@ static bool kvm_vma_mte_allowed(struct vm_area_struct *vma) return vma->vm_flags & VM_MTE_ALLOWED; } +static kvm_pfn_t faultin_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn, bool write_fault, bool *writable, + struct page **page, bool is_private) +{ + kvm_pfn_t pfn; + int ret; + + if (!is_private) + return __kvm_faultin_pfn(slot, gfn, write_fault ? FOLL_WRITE : 0, writable, page); + + *writable = false; + + ret = kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, page, NULL); + if (!ret) { + *writable = !memslot_is_readonly(slot); + return pfn; + } + + if (ret == -EHWPOISON) + return KVM_PFN_ERR_HWPOISON; + + return KVM_PFN_ERR_NOSLOT_MASK; +} + static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, struct kvm_s2_trans *nested, struct kvm_memory_slot *memslot, unsigned long hva, @@ -1461,19 +1485,20 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, { int ret = 0; bool write_fault, writable; - bool exec_fault, mte_allowed; + bool exec_fault, mte_allowed = false; bool device = false, vfio_allow_any_uc = false; unsigned long mmu_seq; phys_addr_t ipa = fault_ipa; struct kvm *kvm = vcpu->kvm; - struct vm_area_struct *vma; + struct vm_area_struct *vma = NULL; short vma_shift; void *memcache; - gfn_t gfn; + gfn_t gfn = ipa >> PAGE_SHIFT; kvm_pfn_t pfn; bool logging_active = memslot_is_logging(memslot); - bool force_pte = logging_active || is_protected_kvm_enabled(); - long vma_pagesize, fault_granule; + bool is_gmem = kvm_mem_is_private(kvm, gfn); + bool force_pte = logging_active || is_gmem || is_protected_kvm_enabled(); + long vma_pagesize, fault_granule = PAGE_SIZE; enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt; struct page *page; @@ -1510,16 +1535,22 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return ret; } + mmap_read_lock(current->mm); + /* * Let's check if we will get back a huge page backed by hugetlbfs, or * get block mapping for device MMIO region. */ - mmap_read_lock(current->mm); - vma = vma_lookup(current->mm, hva); - if (unlikely(!vma)) { - kvm_err("Failed to find VMA for hva 0x%lx\n", hva); - mmap_read_unlock(current->mm); - return -EFAULT; + if (!is_gmem) { + vma = vma_lookup(current->mm, hva); + if (unlikely(!vma)) { + kvm_err("Failed to find VMA for hva 0x%lx\n", hva); + mmap_read_unlock(current->mm); + return -EFAULT; + } + + vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; + mte_allowed = kvm_vma_mte_allowed(vma); } if (force_pte) @@ -1590,18 +1621,13 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, ipa &= ~(vma_pagesize - 1); } - gfn = ipa >> PAGE_SHIFT; - mte_allowed = kvm_vma_mte_allowed(vma); - - vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; - /* Don't use the VMA after the unlock -- it may have vanished */ vma = NULL; /* * Read mmu_invalidate_seq so that KVM can detect if the results of - * vma_lookup() or __kvm_faultin_pfn() become stale prior to - * acquiring kvm->mmu_lock. + * vma_lookup() or faultin_pfn() become stale prior to acquiring + * kvm->mmu_lock. * * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs * with the smp_wmb() in kvm_mmu_invalidate_end(). @@ -1609,8 +1635,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, mmu_seq = vcpu->kvm->mmu_invalidate_seq; mmap_read_unlock(current->mm); - pfn = __kvm_faultin_pfn(memslot, gfn, write_fault ? FOLL_WRITE : 0, - &writable, &page); + pfn = faultin_pfn(kvm, memslot, gfn, write_fault, &writable, &page, is_gmem); if (pfn == KVM_PFN_ERR_HWPOISON) { kvm_send_hwpoison_signal(hva, vma_shift); return 0; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 296f1d284d55..88efbbf04db1 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1882,6 +1882,11 @@ static inline int memslot_id(struct kvm *kvm, gfn_t gfn) return gfn_to_memslot(kvm, gfn)->id; } +static inline bool memslot_is_readonly(const struct kvm_memory_slot *slot) +{ + return slot->flags & KVM_MEM_READONLY; +} + static inline gfn_t hva_to_gfn_memslot(unsigned long hva, struct kvm_memory_slot *slot) { diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 38f0f402ea46..3e40acb9f5c0 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2624,11 +2624,6 @@ unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn) return size; } -static bool memslot_is_readonly(const struct kvm_memory_slot *slot) -{ - return slot->flags & KVM_MEM_READONLY; -} - static unsigned long __gfn_to_hva_many(const struct kvm_memory_slot *slot, gfn_t gfn, gfn_t *nr_pages, bool write) { From patchwork Mon Mar 3 17:10:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999273 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5E9DC282CD for ; Mon, 3 Mar 2025 17:11:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5A5AB28002C; Mon, 3 Mar 2025 12:10:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 554FC280016; Mon, 3 Mar 2025 12:10:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F6D328002C; Mon, 3 Mar 2025 12:10:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 237F9280016 for ; Mon, 3 Mar 2025 12:10:37 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 6FCB6A4ADB for ; Mon, 3 Mar 2025 17:10:36 +0000 (UTC) X-FDA: 83180878872.22.9BDF215 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf28.hostedemail.com (Postfix) with ESMTP id 0500AC0009 for ; Mon, 3 Mar 2025 17:10:33 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=TCcZAZvH; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of 3iOLFZwUKCKkcJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3iOLFZwUKCKkcJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021834; a=rsa-sha256; cv=none; b=fYOzx606vyhx4ZtWrgoDo6VXProEiANeu/L6PZYBOlon/XmtOYFP0eHbjEmyDEx4wV6MMI 3vZCsdeoFYKT7gSNnvC8DPhcvoZNqVeqG90/oAEtYlznfKSHkDAn/MlG/eAKJ0NH12/U3u /0Cg9uiKiOmDnM1KXUVymma/JTY/C9A= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=TCcZAZvH; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of 3iOLFZwUKCKkcJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3iOLFZwUKCKkcJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021834; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=RV6G8AsPpZM1XsfZjeI6zZRAfM93BJc0/BH0p1ZFFrU=; b=abdavM1uKxH3OqJdw1sIy9ink+hsEHWHEL43xBxmWUrvO2IAw10itY3ZJAEQSrM7FxAJOi BDf/w9u5SDqrOLN+ny4CeehVpbNGq2cra6cVB1e0YwYigS+nt0Bwd0JIr86otOmNfvFUK4 bhcBH6Ibs0s8PhkrBiHgP0PWIiHrYb4= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43935e09897so34315275e9.1 for ; Mon, 03 Mar 2025 09:10:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021832; x=1741626632; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=RV6G8AsPpZM1XsfZjeI6zZRAfM93BJc0/BH0p1ZFFrU=; b=TCcZAZvH4/NUjNeNi5S6aNBafZTidOSKgTvl63yskaDpfP834mTj81Qm8W1DY57vCi i2Ib9sn1f7uWJd+IuNIt2ByAQB4SZGwPobLzrC4jr7KzPL15+9nscHfoLQUAhQAPqmBz lmbDI7mmfDCcEGz7KAARNHUDrBn4ZypJoR8RdowLwkH9A9OhMtCE2VnA44/mP1xkA8bH tuoAoQl7EfB8txmo1OeTIli/oTvpSHdZFhLZNZ5N+mtKCsCz7dHXAz3fPFMS7azKqsdE 88CaiHsU7fQsqIjBXW+aNNwYhMc8tLEBJkAGaLDgGF5NycltpDiWW/MUiat4ntS1Sbhv XtpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021832; x=1741626632; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RV6G8AsPpZM1XsfZjeI6zZRAfM93BJc0/BH0p1ZFFrU=; b=G1V0pvIzcyOVlnS7vGz6Rf3QO3oxXXGRmd9Z4/M7OiwozMDEnQDiP0Kap6A+NuDj7e 043dRo2gPrtmJjLAN0oki4DD6i+FW3Bdk3c9ZlD8BTTUhQ7orLoX4DOnQv21e92+mZo3 +YBEY1IOkchadFrQJZaLFO7vDxX0LO/gozS0oeUd+k7+LyZbm7Ly2GntxeSiC+3G/+DY bgRTLXqGnwcsm0do6Z9g+a5dU6ht9tkNKXOu6qh03moPxvfj5MkAJSCGBmRQc8SjJmNr UVfBk4RZH2cwsqlSXO2xSQumShq2YH68t2Aq2BXuyMxYBFcNrB0V7beaXLsi+xmVHVWJ QHuQ== X-Forwarded-Encrypted: i=1; AJvYcCWc/hPjCUM6M5dAb5P0S0f+OCpsJfGM0Pqh+DCJjoDI+0ig/ZfM4vNxK6osyDnHkR/tuwhTk9QayQ==@kvack.org X-Gm-Message-State: AOJu0YyxkskPcPYHyPqOfq8TMIIpTggVYu8dHpJPzp2ZPl8gctQyAgup GtDkhOROh44sId8Ro0CFIEooZQe9Oj5M7D8oGkeUyuxNNMDzoWpG3Gks7h4qYnCOL+e7iVxKWw= = X-Google-Smtp-Source: AGHT+IEPkwrqgZz9F0LOCGix+An6bf7Do2qKk7ux4Yk25RiEez6hyNid1EwZjrwsbgErCWJs0vQG+9fB+w== X-Received: from wmbep24.prod.google.com ([2002:a05:600c:8418:b0:434:f1d0:7dc9]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:478a:b0:43b:c7bb:84ee with SMTP id 5b1f17b1804b1-43bc7bb85bfmr22679895e9.2.1741021832556; Mon, 03 Mar 2025 09:10:32 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:12 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-9-tabba@google.com> Subject: [PATCH v5 8/9] KVM: arm64: Enable mapping guest_memfd in arm64 From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspamd-Queue-Id: 0500AC0009 X-Stat-Signature: yy6qtiraiwdm17gww46b7mdn3skr8q18 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1741021833-8591 X-HE-Meta: U2FsdGVkX18zl+VTpLj5Y2STHqo19XyohRZAyRrgkMG43Q8lTlyTlkbjoSQgGrjr1B5dF0aeQfHxZLT6qjp35RIlzlPQmgC3xGeyFa0iYwJxT+OzkEUuvEajKFC/WAluO2v+smgVzzQZ+RMvsPDGHic51KNOJsMy6tXwEjGX5Ynjr4miWaXJLWRP/DbqUGkcGcJLknG/fL9LeiaOFSw7N/hYLnsLkLWauL03aKbyA52eB0r4zJXrwIcGN47HR2hgTX68LAZW7DuvRWYYhUaihRD7k1PtiKUY9H+bQJ5aNJ3do404HYmPywdN0GkpE5tqTEvmVaEQDCDza/FWsAlddQF0eCnqvNnMwAwTvYYUsDfFjVY+c0K2EOaYf6aM6jMayfdTWL2uy1rUFWZ58gKSrg6hcdpAG8KZsdSF0fKaPQQD1JcbUv4FOTM3yt4gQAIHQhb2921UQ7/tGEf2wju6kflNU6mJZWpxDHoU+L8mM7A1j802zAAxnwYnKviZTBIqh1zgUl8LkWAczEucKe4lotWf7Fx2q0woq65cwr4tsjzcg2VhXtlrLG3o/ZT50e7wAxNm140ufePNNwvyMPWrmqH3iDUYK8GlouM2RFoESLZ23zg4BpvB65hUW9MUVnK/Ntf0oCY6lskmK0PaVUInPpbFkF5YdyNkJwftfUDnGHFPAGVnwcnijtqQu+KYMdlAGIOcRPG3EfOPWT7D/y+NOsQ/kyjuHzzB15mbVGyZGPXuyUUC08ZmcXqcewwH45toHY7VpSHjR6Qr1qiJgMesbRJI3MDtKWpmu8Z8RuwbAgkH0OHPRIUEkGErS3CEMTafuRvLQnU//fykhK1wUC9cF52TY+DKeaC+A0+USQPQDNegcp3XoNxPnekW/OPWRmC4fDcHWyVOy+5DYG3kh1DM97s7AA641VYpXuKx/BDQX7Iqqs4J3cvA1t86Jfd9N9V3ReKNeiDgf218b39ZKCD 7zYjIohX +8zYXW4MSfoltzEvKe1wl3FEs5xy6hx5xXd/nVjR2YfF5wK5MTbMGemn2RmO5kJUciSvPUwtH3CMziPL7sDvhRAnyptA/m26lkzxEPSMUNX0RdRJOlh0b16qoLGQ5sbVxJ0iAno3Vq9FnMgPziqrd5LehDhMSOapRYvNNBWtoVfEGKnA9h4ny5Q523Y54Tb4jY+m/FdRbjWF05xEzMwnRjGKaktoXArVqZRAcAChtNCyt1Q61NJlcRxPAgZIUC/T5R/PptFQpv9KmWlJor3uTGBMPNZmmCev85uZCLsWb2lXakWY8Ls/TA3WdMf8/1eeYhhECZ1ORwONl1buF9BiRAFEIh0tSVYuJyDWCgH3pNCvERdrQXbayP7vl/VEakk3njOARzivkUDNZXu3o8cIprGd4ibizicGAtB8pGX3t4zVjovhPqwqMFYHiIAJIZRRx8QJad0t1fQHq1t89bTNiFOk31cZutomFUCUDlnnRVUsiPxEBAik6lLJTeQSVJmsksYaZPgZ5KiOwzR4R1rsWtQoCENxAssXCOTHaWO+tMaluni7Cj3bPUv+MykXYMb7F1gW9ciECacDz4PeW2XI2dtBBpdkxYaU4Q5tb9Ly+1cKFZR6SONv3uyQMgqcWlz3U5sqAR42lXQK02ilOXbGcOWow0WznVCfFv37/OuyuJaZnJQZMqUjMbMzxO/159MjcZPFd X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Enable mapping guest_memfd in arm64. For now, it applies to all VMs in arm64 that use guest_memfd. In the future, new VM types can restrict this via kvm_arch_gmem_supports_shared_mem(). Signed-off-by: Fuad Tabba --- arch/arm64/include/asm/kvm_host.h | 10 ++++++++++ arch/arm64/kvm/Kconfig | 1 + 2 files changed, 11 insertions(+) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index d919557af5e5..b3b154b81d97 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -1543,4 +1543,14 @@ void kvm_set_vm_id_reg(struct kvm *kvm, u32 reg, u64 val); #define kvm_has_s1poe(k) \ (kvm_has_feat((k), ID_AA64MMFR3_EL1, S1POE, IMP)) +static inline bool kvm_arch_has_private_mem(struct kvm *kvm) +{ + return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM); +} + +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) +{ + return IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM); +} + #endif /* __ARM64_KVM_HOST_H__ */ diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index ead632ad01b4..4830d8805bed 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -38,6 +38,7 @@ menuconfig KVM select HAVE_KVM_VCPU_RUN_PID_CHANGE select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS + select KVM_GMEM_SHARED_MEM help Support hosting virtualized guest machines. From patchwork Mon Mar 3 17:10:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13999275 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C79B2C282D1 for ; Mon, 3 Mar 2025 17:12:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 61A0728002F; Mon, 3 Mar 2025 12:10:39 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 57B9A28002D; Mon, 3 Mar 2025 12:10:39 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 41D9D28002F; Mon, 3 Mar 2025 12:10:39 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 2149428002D for ; Mon, 3 Mar 2025 12:10:39 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id D57AD80D2B for ; Mon, 3 Mar 2025 17:10:38 +0000 (UTC) X-FDA: 83180878956.27.144A20D Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf15.hostedemail.com (Postfix) with ESMTP id C99DFA002C for ; Mon, 3 Mar 2025 17:10:36 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=UzzzDEjw; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf15.hostedemail.com: domain of 3iuLFZwUKCKseLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3iuLFZwUKCKseLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741021837; a=rsa-sha256; cv=none; b=osOT9waWDkwrqF2lyoHkltMLMhEJklBeLcEJh/NdrzqvMxSbxfoTBawX5Tasrggm4vfPZL zZl51kFrg1o53RisyNtEttSTnR4YM6vbZXzUy2RJwtMNhP3Ymz5hvRL4IyIIQMzsq+dJvh t2oJxCqjmgr8qyQ1DnfZTanlP5bsNbM= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=UzzzDEjw; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf15.hostedemail.com: domain of 3iuLFZwUKCKseLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3iuLFZwUKCKseLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741021837; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=shxzjltmhVCSEs3XLEEf6Hj2khLkpxaqKL228sddyqU=; b=GtM5O2n+DqbBkyI6NgMblJvHG4+VjD9WvQonlQYvBRDn3+JT26txq76fuyoJc6swQlHKMI c5CIcYRP2hH9WrcAzWAfbAsni+EvyYjax+z+UGycdeFNQ6DwbGahrRpOsaTCB5uREguWro VEYkz4kbVj4ZLKxDuKmTSYBil88jMBg= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-390e003c1easo2129365f8f.1 for ; Mon, 03 Mar 2025 09:10:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741021835; x=1741626635; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=shxzjltmhVCSEs3XLEEf6Hj2khLkpxaqKL228sddyqU=; b=UzzzDEjwVF6QKs8kWkQPxlmjtyEhVlYLiF+xFavUD+VAODFPz7MGUMtiRjmlO2KPpj Lv854bvZyZZhw3vnHiV14Qk+F8vd70FJzC03ssjWHFuLHS5g7+PDMXtXIUCk7DtJmuQ7 LysBbxeBX2y/k+L4s4qMQYoQy9VHQR4YZUhgdu3ZITblawDrveuwxfF9hWWyw/FPcbey QY0L8ba+Rc0Lt5Ib6jf9XqVAGc4IfVDG7/dupKgXmk1pXr6whtJ4H62qPZlTTO9p9uBz jbK2mSSeIWqX8s6yWemish3qn8hXiz4DqepPBq9+js42mTke/tZAaMblg+s05s+qg9ju FdUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741021835; x=1741626635; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=shxzjltmhVCSEs3XLEEf6Hj2khLkpxaqKL228sddyqU=; b=mO8bLOudamFVAawch7CRQwLwT1BFyDMmEgy35u/fkx5kqyOL8Akh7vZTEMNivIoh2s iRTqlwXzqGxsppGS/U1oeY9WGCPGXUuTLG2u+u4ZMqb0FywnT6T9zxSzmQZpCif+WQu8 rjhb3WmpRZ0Jjyzyc50nw6lQHQRw3nvBlFEbs7Vek+zLDNeDU2mIRPSRKsRoGphKH+PG GxsWBhXlwijuRokXOqYgKt3v0hMNwOBkubbN7FFqt/aUxUxqxs4n4g9Xibzzdcb749dJ 0tsXxdKrvAouM7mGYv7O9m9KMHTMhbxpmCj2vIX/xLv4f3b85pWq0jO8aJz6oab8JWSP uMDw== X-Forwarded-Encrypted: i=1; AJvYcCVKqzcuJOodOBHRB+9GbpyDCNQpJsYPLpVugZBtVOGcGVyzGEXiTn1pQcNx0UlSpffrWXjz53g/Ig==@kvack.org X-Gm-Message-State: AOJu0YyGbfuyl4syblirZ5fDopfaSEDTHCdKUpNMW4SIzbm+Z53IE6X8 3HV95V6ZTwHbodiER46tA8zhG7yc2HA6wvNDQCfvWAW9dxZQ2mPT6OBgq2Qf2yrBMdeQ07aUsg= = X-Google-Smtp-Source: AGHT+IFRshHAVxkzqZnB+ggYu/XSK/78X/FWHRdv+7cCRWE1mXA23VnZ9DwQ8SGznRbx9niCQ37rSqzPuA== X-Received: from wmsd10.prod.google.com ([2002:a05:600c:3aca:b0:439:7e67:ca7b]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2c7:b0:390:f0ff:2c10 with SMTP id ffacd0b85a97d-390f0ff30camr10550328f8f.19.1741021834976; Mon, 03 Mar 2025 09:10:34 -0800 (PST) Date: Mon, 3 Mar 2025 17:10:13 +0000 In-Reply-To: <20250303171013.3548775-1-tabba@google.com> Mime-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250303171013.3548775-10-tabba@google.com> Subject: [PATCH v5 9/9] KVM: guest_memfd: selftests: guest_memfd mmap() test when mapping is allowed From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: C99DFA002C X-Stat-Signature: 5fc9q8aoz8jimkiug8dthj3d6zwjbrzf X-HE-Tag: 1741021836-680854 X-HE-Meta: U2FsdGVkX1+8tskvLeYN2GqZ2AdfgVl8GDk1HLs6z+/vwTJ0o5dfdI3p9WrXGV9Ym0a46uGRQc9NFVKc9Z7CmTuQKnMv/jKLeiQV2eeBverCRGFuJt/eUV+xzY8IWZ2iFbk47cFxnFSpK7DOeC41xsCZLsrukrTF5p0Y1vYGj7xTZlM8HogDfdf8OiYCqZqDKWvRsKF275Yl45+R7gnWPeirByn+/JsRyiaDBF/a/mmjeb3DNCa1XgQQHkas4U9lov4NTQmrEXo/8hem0NT6Z4HWn+mvQOMzzkSuMva/Ci+0xPTKUTXv7yJ9+ibKFA2xzWLcHFXLkjQtdvpo5woVxNTfbFCL8Ovi7Pc9/7aR9yPXy+MKhHlDFVsftQh10/oM1okSMhJJE/NEBSIjb+R3d2odaIyjFSQ6XyQiJZoOVbpww5tOezlFdhmwELuOYbNuxkHAuIwC30juaOdunzkgstsYEVTPBjEVeRxshDYOWUKYOMt4Of4Fj/T5jHhkGdZt6i3df4gNGCx4CJWAo49oGO79n3D5w8epv5LV7fSH49q3P4/LYzszTgIuo8xbe5XBbbGqzcQnpUROkfdftEInxWJ7bVnM8NSdWdEuagYTTxXwBMf/uxW9WNbmHfsVKZ3KkUB4AnURwkzvoogHdw92KQ/roj+s5CkSmEzhcz55fouaWlcekNMRmikNWFjwsoOeFR405nljvJ39YDyzmSEggCRu+TXSf+CwzXWtIqlJqGGCDUvxvQx66sSBO9SrkXf1c5FAMhqbwK5sg0yBjoCGP5wNtcJeO9xR8yibuMYPWsUEOgjhIf0KOdIJMSsod43Q21Hcm8RY4PMqrBCoYDhIzHXxrjDL8cd38y+Rqh+cBdAW+BSBt8JczhmAVy3nqd8jwM1PePiM5CAZBOxhoSL2Lkj59aU4RRLJ7kjUFRxmSwJfmsi4Lax461PZBGxeOZ7y1pqFRQsSIEW2SX6al5u cotKCQcN ONIdK78QYgF8CKjSas83QQZs9d4/V8iKmgVyJIAsAqqQH9VlqLu8ZlJpTxyZ923AV8GdVT/LCjQlAMVdCWnWT0NwQScd2RYkobWBEh942o4loudRhpkeAtaPYL3f03ouSTsD9EHz2dS9jPXmY6x4tTxBuEEpTC7UbVqjRJTLeNOOhgFMWdP/y/ZxiS7KzRy4+eVuuVZgoMY+EacwmCI6H4DVykyynINZM+bxYerPt1j4w/XL+8lZNSrs700yOPgPLHWIL9L5Kstlw4Q7VZPc23cVatSQzzxI4rgqBvLXY5tbKGpJwmFj/UqyOwvsutyUpb95lPWkLzzsb2Z28QoH+09GLUzLt77j7GSHZfR89cXSTQkMvluzQfVldYv4Xp9JLiLpwsYivEtvnWdC8UIbUlM4350KMsYqt30O6IZf7aRCyNQc1XdnGMLgQyElquX0IosNRAaZJqhWlWFBH1OqZlV/h/ldh6QD5yi9LcdIbzHhllEkusXjpfifcnyS/keuZH3mXjmf2Vsz8JiY0/tx/kLwaJOYJ0KXaF8FitDfQp7i0m+IsPevO/mFUSgEk5y8VBTdqLCSdR1Mnq05yaoBcP+A+HZi50QQM0bJhi1IASjSHH/pPKvkJjJVlJ3Gwn+j+x5jcRlcXTPg5uT34x0rqI8yrNkS28RZDIrLWcXM/J0Hu7TmqJeXywhWfLA8M0aUu7YZK X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Expand the guest_memfd selftests to include testing mapping guest memory for VM types that support it. Also, build the guest_memfd selftest for aarch64. Signed-off-by: Fuad Tabba --- tools/testing/selftests/kvm/Makefile.kvm | 1 + .../testing/selftests/kvm/guest_memfd_test.c | 75 +++++++++++++++++-- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm index 4277b983cace..c9a3f30e28dd 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -160,6 +160,7 @@ TEST_GEN_PROGS_arm64 += coalesced_io_test TEST_GEN_PROGS_arm64 += demand_paging_test TEST_GEN_PROGS_arm64 += dirty_log_test TEST_GEN_PROGS_arm64 += dirty_log_perf_test +TEST_GEN_PROGS_arm64 += guest_memfd_test TEST_GEN_PROGS_arm64 += guest_print_test TEST_GEN_PROGS_arm64 += get-reg-list TEST_GEN_PROGS_arm64 += kvm_create_max_vcpus diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index ce687f8d248f..38c501e49e0e 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -34,12 +34,48 @@ static void test_file_read_write(int fd) "pwrite on a guest_mem fd should fail"); } -static void test_mmap(int fd, size_t page_size) +static void test_mmap_allowed(int fd, size_t total_size) { + size_t page_size = getpagesize(); + const char val = 0xaa; + char *mem; + int ret; + int i; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmaping() guest memory should pass."); + + memset(mem, val, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, + page_size); + TEST_ASSERT(!ret, "fallocate the first page should succeed"); + + for (i = 0; i < page_size; i++) + TEST_ASSERT_EQ(mem[i], 0x00); + for (; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + memset(mem, val, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + ret = munmap(mem, total_size); + TEST_ASSERT(!ret, "munmap should succeed"); +} + +static void test_mmap_denied(int fd, size_t total_size) +{ + size_t page_size = getpagesize(); char *mem; mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); TEST_ASSERT_EQ(mem, MAP_FAILED); + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT_EQ(mem, MAP_FAILED); } static void test_file_size(int fd, size_t page_size, size_t total_size) @@ -170,19 +206,27 @@ static void test_create_guest_memfd_multiple(struct kvm_vm *vm) close(fd1); } -int main(int argc, char *argv[]) +unsigned long get_shared_type(void) { - size_t page_size; +#ifdef __x86_64__ + return KVM_X86_SW_PROTECTED_VM; +#endif + return 0; +} + +void test_vm_type(unsigned long type, bool is_shared) +{ + struct kvm_vm *vm; size_t total_size; + size_t page_size; int fd; - struct kvm_vm *vm; TEST_REQUIRE(kvm_has_cap(KVM_CAP_GUEST_MEMFD)); page_size = getpagesize(); total_size = page_size * 4; - vm = vm_create_barebones(); + vm = vm_create_barebones_type(type); test_create_guest_memfd_invalid(vm); test_create_guest_memfd_multiple(vm); @@ -190,10 +234,29 @@ int main(int argc, char *argv[]) fd = vm_create_guest_memfd(vm, total_size, 0); test_file_read_write(fd); - test_mmap(fd, page_size); + + if (is_shared) + test_mmap_allowed(fd, total_size); + else + test_mmap_denied(fd, total_size); + test_file_size(fd, page_size, total_size); test_fallocate(fd, page_size, total_size); test_invalid_punch_hole(fd, page_size, total_size); close(fd); + kvm_vm_release(vm); +} + +int main(int argc, char *argv[]) +{ +#ifndef __aarch64__ + /* For now, arm64 only supports shared guest memory. */ + test_vm_type(VM_TYPE_DEFAULT, false); +#endif + + if (kvm_has_cap(KVM_CAP_GMEM_SHARED_MEM)) + test_vm_type(get_shared_type(), true); + + return 0; }