From patchwork Tue Feb 11 12:11:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969533 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 470ABC0219B for ; Tue, 11 Feb 2025 12:11:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AC47E280002; Tue, 11 Feb 2025 07:11:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A4D55280001; Tue, 11 Feb 2025 07:11:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8C805280002; Tue, 11 Feb 2025 07:11:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 72592280001 for ; Tue, 11 Feb 2025 07:11:35 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 372374AFC9 for ; Tue, 11 Feb 2025 12:11:35 +0000 (UTC) X-FDA: 83107549350.15.DE5C35B Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf03.hostedemail.com (Postfix) with ESMTP id 5ECA120008 for ; Tue, 11 Feb 2025 12:11:33 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=TizCwCla; spf=pass (imf03.hostedemail.com: domain of 3dD6rZwUKCOEWDEEDJRRJOH.FRPOLQXa-PPNYDFN.RUJ@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3dD6rZwUKCOEWDEEDJRRJOH.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=1739275893; 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=jVWwkw4l/C0CQ72V45uYNbZ5qQP6QRpYAD9vOGg0YN8=; b=RqrtNE4gXQeqI35I6RLBgr4sLI98i3lwybt9qlvmJFcqz4pCv5lQ6l+QMaP7BQkbqRYdk5 eJjOyx0k38Lysp+oBu5+YxAteU9KviqmuQb57iuXJE4QcijMkjH7ru9TKc5/9lNjrCcx4n 2SGb9W6TR9LsOWCDh6Z3O1Hc4VJq7Tw= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=TizCwCla; spf=pass (imf03.hostedemail.com: domain of 3dD6rZwUKCOEWDEEDJRRJOH.FRPOLQXa-PPNYDFN.RUJ@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3dD6rZwUKCOEWDEEDJRRJOH.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=1739275893; a=rsa-sha256; cv=none; b=UFINraciOmowWmHzShIDpCCLPYuhVci0QZ6aUV2GPs+vkCGxhmChQNjQ9jYcNHExU2c/TF RYkS3m3IQ81qN41AifIvyxLfmmkL0YjD8LKBanW9rG+hBrQwxEGOCvQ1rhgkmpcw5AddcW 6Yb2JVYrhXRDX6k9SlODNgIuwRkx/3c= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43947979ce8so9215855e9.0 for ; Tue, 11 Feb 2025 04:11:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275892; x=1739880692; 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=jVWwkw4l/C0CQ72V45uYNbZ5qQP6QRpYAD9vOGg0YN8=; b=TizCwClaxCBrdxXBInLdHGzCFsmMxBiTVXpfiJSb3FAbXHmn9RbrbxX9oArcETNjAv 923xq2cFjBZz4jyF2CCxf9Y7s313/k6iLNDklGTMBK3N+RijrM/1wKXumOdNDv/h7yeb SKpUa5uTCi3yTnmdSPDYpWIqRmXGeeUEn0BuqwBslLqnmqnGMDBtrRG1+xptDVknfQby j0XfzlKlF1rD9wyleFzgY0Q+bR5ryHZITcZz9C/BsgdrcajWacNUZNRyrKp5TrhirTRd 82y5xhhnmlio7KPZxpSWT2cEoP4dJcZLlsV3ULwr7zbD7jqZ4Woy9fM7sQouN79gME3L qQ7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275892; x=1739880692; 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=jVWwkw4l/C0CQ72V45uYNbZ5qQP6QRpYAD9vOGg0YN8=; b=gh8vHsRdXPGq9vxShhK8yVmDop97NRNxfq7bn5XJ9r3KjSmxl07axBjPgcaamV+FfQ 6Vzdwyq0XyPx3D4m4f2wIvmkSs863o+hVX8rgu/HEPXgmZBmGc2dDlwEInONQZQ2Xaud 8pmf4f5OakqIZ4pMs/+Qc3Q0ea1hEzLEMYZGYFDJABzfpMQ4gGshNKM3zkllLSdfvaVH vGlrESKxt2JlAv7pWrwoHS7fH/tz+Vh1k3hy0rRYPpeQtdsNK8WdxFbeODsO1zSD5f9T cXOPGLYTEcinD4zAhkHeOx0T2dgjXa/D0ICvAy+FSgiFN0+QMvcHHe0bmAqmO0GWYPyB BvqQ== X-Forwarded-Encrypted: i=1; AJvYcCW+DSiDonMKtFpiAa9dql2y1lEmrS29FKk1L86n1//XUe/3U/eCu+s2FVV7gEUiDQSBKatoGx41Tg==@kvack.org X-Gm-Message-State: AOJu0Yx+q3IORAlslLApTI5Ybwe/gR327IGGmJW9F4rZHcg99Oe4o7vs zk01volwAjRUCkThyIQdkFONJ/r0zqyChtp0LkaRfmTqpqztpx2k790x9f/GFg87Lyy0wYhUcA= = X-Google-Smtp-Source: AGHT+IG10/vN0gzRGJ08Wn/qWLjVjCNkXjXTKTCGAHZrBJMQnayK6w5tSeoK7viwOkkpLU5EQQeSBy5Iyw== X-Received: from wmbhc10.prod.google.com ([2002:a05:600c:870a:b0:439:4cf6:9186]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4589:b0:434:f609:1af7 with SMTP id 5b1f17b1804b1-4394c808849mr36671125e9.4.1739275892079; Tue, 11 Feb 2025 04:11:32 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:17 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-2-tabba@google.com> Subject: [PATCH v3 01/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 5ECA120008 X-Stat-Signature: iq8qusncpdbaxg1a7h35yd4o5psta5t3 X-Rspamd-Server: rspam03 X-HE-Tag: 1739275893-298615 X-HE-Meta: U2FsdGVkX18GNhXs7xEvwpWBIR/QYwPbyh/3O1y46H5fV2uWsuwn1Jzlfn0Z1t7ibj6LnB+5bZ/MuPjwfJ+aIa704MqxaX994hNdAxsoW4AzMuIq0MY0CanDpulum5QmlGnPdGHUomnwKTM5zYMYQGWQI0Vwk15op3lqEoza9IwBu6Otj7kBMuudfqzD+upmP8cubQNcxohJwBCj+LMPxHIz8UdaW4vjfAifpSeOUC6uv4K5+VMSNgMSIr05uYvocTF5z7nycN6irzbzvDMk5phqpo0nRPlJywoA8kbn6s00mw/SQaHRRn82t7IslUA+lTsVY6UM/FLz0p5zQqby7otbqB59/tuTjuReaLnaKbBanf6rh29kAQ99yG0+IkTTe5IECTQziRTHdLkGhAfFiYWrxJLiaojRCZgKp8itHs2kavjm2iSk+saZJ6Sz0AemWdiPD+lC9jvZ4USLRd+VxLeR8Rk+6CSlPFUbPyO1faVdPcONuKFwfwm1N/Hx//PnPHaBwJSRdb0fzFpNRclHKh565VIecIXBz+OaUmphfwRsZEDtKgNfsS+SXnSf/0iCy0estohX6KXBbKObDsYkTJ5gdfJPtrLkYEfuM+9lm+iM9M1hflsH9EOePQJCGWyk4SjtbKfLW95fpfoyF/6xpWeBouOrd4TxbsD36PDDfbxuEPFXqIP1FmA6mq0Fp7aBm78SYv7x3mgm3ruUyUcLxYzDatm0vpORRDPyPdo/CguxI2dsxQbb1QlZZsb5f18uvF5dpWfjn5jKS4UdK1TV8taNF5fkotuFXuerCB/mMO4ZettWmocbIQWi7cT4lRVHZ4eXaij40qMCDQubX3oO/6CPRKED8/LKCwO/zvG1Ls5Ios6n4CZWOYhyxu1xdu2f/D/RnnzcwVLeOFgSP/3QpN0sSe/DjNVpfdzRgD+zPs3KuZRp31fZLpqAOcLQkNj8pJ5TNfTWmlg1AQ0P+OI FHgN068A SptfMDXmhgwaEb4cRgM+Abe3XK9wEkpIcO7MGq7JrQ8LFieaTHKj1jEp8194YCxGNbDDofYWgkA4T6fLJrZvsGWy/ZaCn8de4cT56nHEP+aAvbluhpcLmnflc9UK6knOah9NpZ5SyxdrvVsrPmv+UFYBvOmN5xK6BKC03bi3ABnD7IRAd6IrSWij5oqeMT/E89ih/CYd39zoMr+8HHolu3of2LtT2BjopeAddmxAuetrKk98nQvoOkZ9O0Pnd3L4zAUW2PWFlqH9zHc/rMK9tYledQ5vF6mBJ1d88QBBUYE0EgU9g3W1z7wDbi8I3Q3DbyP2jZqwpDtCVj6YaBB6E76HrOTE0hoxVhxkhVeqofYV+8DI1zH9pstp+U3n+4qqOdh08QfJs5Ye2LVRBExMLUNxcOmPtTLNFZcu/jtFtViT2kh/aNPT1ZHk65PcCfvfeGtr66GGHC28tcAA6eDhnFS2Y01SPBTJj0uqBg0/YPktLEDL1s0qnUhGtVoEZM5ld6lgb7MmTD/mmX+erYmPtbVP8ceEFLPSsOYA2N61KjTmD/XBZXyK/4EafPRHyHGNlXXfGW4ZzkU3Q+VLr3qsaYn2MR9zBU+n1Hf5Lvf+YMnaDUqy3T5u3sj2n4NUu4F3ILwQOiFZhgyGy/1mng8VEknG9HQGV8T2XeHTXNppFJ1ouhX4= 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 Signed-off-by: Fuad Tabba Acked-by: Vlastimil Babka Acked-by: David Hildenbrand --- 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 Tue Feb 11 12:11:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969534 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 95792C0219D for ; Tue, 11 Feb 2025 12:11:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EBE3B280003; Tue, 11 Feb 2025 07:11:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E478B280001; Tue, 11 Feb 2025 07:11:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C988C280003; Tue, 11 Feb 2025 07:11:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id ACB38280001 for ; Tue, 11 Feb 2025 07:11:37 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 38F921A19E3 for ; Tue, 11 Feb 2025 12:11:37 +0000 (UTC) X-FDA: 83107549434.21.259CBF1 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf05.hostedemail.com (Postfix) with ESMTP id 62424100007 for ; Tue, 11 Feb 2025 12:11:35 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=3wlygTqf; spf=pass (imf05.hostedemail.com: domain of 3dj6rZwUKCOMYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3dj6rZwUKCOMYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@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=1739275895; 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=sWMrByBHh6bCcS+Ah6m7GoQirIP0Jem/nT3gsSQXFpI=; b=jSU/moi+p2ah9tUxtlAPJJschdjH6r9XOYi0R59NEMckDgS7yNQuKCh5AuLCFc4kY5Pnwy Cs9nKMjtxAxc8egtJQ7olNMuCc+t7+5Bigg9T69FIXyKHQLTgiNfgy9tKeBH25K6kKHOBU YRtpZissEM3NduRr0LMkSgtGcPoxL/Y= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=3wlygTqf; spf=pass (imf05.hostedemail.com: domain of 3dj6rZwUKCOMYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3dj6rZwUKCOMYFGGFLTTLQJ.HTRQNSZc-RRPaFHP.TWL@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275895; a=rsa-sha256; cv=none; b=FsMQyoTzGP/OjMx4oCLzuHkaLZXzzfd7fASQsASWk4Pn/yax7rir8Cy30zzZ+pqX2WMvm4 2VyTVU9DG+ATvf+Jm7TCz/A5Ma60lAK2S4g0Zjqi9VHKD6LT4tmpdJVUMx4+3OB+/AGUB1 hoUekPHmHOKTKn1pu0nh0JJZkgKph5s= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-4392fc6bceaso16982345e9.2 for ; Tue, 11 Feb 2025 04:11:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275894; x=1739880694; 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=sWMrByBHh6bCcS+Ah6m7GoQirIP0Jem/nT3gsSQXFpI=; b=3wlygTqfXtQSpaokHiJOGOAU8QGSE5cJx2Kd7qrbIXvaaAE1Uguaw44rp3IA0mWubM 7hhpNx5tkyH4CmsiPIeEogVdiU22L5TMF5rMu1u4Hg3TiYzQtucSXOX/QiVOhNz2TrhH EBVAllM3NjntB/qozVvYV2CJkm4FG5DXQAWqVKd8h0LxCNy4LlOUZCZSbXjA7SyGy8Cc XkjnGjZUBU5SNCuCeMt+S6Dz5JEIcADdbur9le8v9PONDTq8PqzYUyKTcXLPTfOTTErg cdU1ufBBObC+bYX0T9rgcuj3Al313YssQjLi0R4Kdkwwt8vQ69ned75PU3biR8Waial7 YDUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275894; x=1739880694; 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=sWMrByBHh6bCcS+Ah6m7GoQirIP0Jem/nT3gsSQXFpI=; b=qD2uTIn3HHv4UiddyruyPn2rHkCHYTt0aQZZbfesJx0NSVm7XNXpM5yFEnvjtMB2/1 lA6/esCuBEaxpocnZPUpq+e01F62zXhJ8pLFBUGZC63FvtuE9P82BhV8IjAB+CiGZpEd Oit0u5dVgtO74kGxJH0fymP+01E549jSus9HQEQUgwazXCh6PsDbA/v1NUct7RSQx8Ap 0XC3knywI5PRcl8fmjuGEjlU7kFYvmxCEYkOFoggMJdooUhElHwZeBT42s+mWVyRO8dI aJiV/FdOHxr6vkOSUw41DoQDPRnj0uLypDAxzULrJgVeNZ0Iz38UIhTwoS+IOHqr4zPF eFUA== X-Forwarded-Encrypted: i=1; AJvYcCUU1mHtpe6W8hCnCPCOpxybHvTARnk6F89uNJT6ebeMZY5iXxD/IuBE8nZAOUPzSGaT9xf+OIF4NQ==@kvack.org X-Gm-Message-State: AOJu0YymVE2MMvCQ3NEjgKjxC472Q0hbOTIk2EBzi0inAlWQRuGWGn5U MkREmG43fmNSyem9zzqSDBAqteAmUKKV++hZ+bWQiz38ZnbF7Llk3we/eBjw1f8I76XzSaSlSg= = X-Google-Smtp-Source: AGHT+IE8Ghyq44OOrdMI7rTy32U9k2qC1vm1QBwY+iABDYDzlSXr3Wt1H56p+D7BVdWhTRPrbKtMom5fBA== X-Received: from wmgg10.prod.google.com ([2002:a05:600d:a:b0:439:432f:cc11]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:ccf:b0:439:56f3:d40f with SMTP id 5b1f17b1804b1-43956f3d5c3mr1028375e9.21.1739275894075; Tue, 11 Feb 2025 04:11:34 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:18 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-3-tabba@google.com> Subject: [PATCH v3 02/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 62424100007 X-Stat-Signature: rpgsamu3ohtziz8zfxo6m1te4w9pfxnc X-Rspam-User: X-HE-Tag: 1739275895-573537 X-HE-Meta: U2FsdGVkX1/35VdSx1kgWsbyRVUPFK7G7C69ycedKl0kohlONsG3l397kQzh4Iy9cfN2g+T30rUCgZHNgoUy9TgM7Ti5zfGpWs+h0PhYUSf1UCUDtWdTbOBFUWAd6xhTFMCKX2Ea5g7kkcUSbsgaHcLEsipxuILXdYFJSZSnf/wimh9V9BhN10UQXw1FtdybgmW0yTlONHfP6/fZyiBXur/HhlRgGhQFHXtP4sU2vzDsVnF+jfoqRS2Uq0imuVulRi5NsmdqoVna07G17zFgWMWmqTRi6Uv1m4+ggKSDxVRVdrQ9NYwZ40phomWQHzlAASRwaV4Z4ZsupOjR67X+rf8NMYF/JjG/zx3b6dr9IkFWYgiD3oyH/SKd1BkajoFx2fBdYvmNcnFcS3MZ8lT+57cgpQ5jMHN8gpUUbt4VGRMbygDjTpC8WScewsqbQ1+FoA10ZC67K19e6NNEJWGoYMpxjY1GzTkT3jFiAcT1Plw1/wRF7E8tKVqHH0emFgksKgAJJpnJnl3qEJ/vgeIlS72xxU4tc4r8HjPIDg2sDFTaJyLggR5OA2eWu3PIf9x1T92Kqm0+ANPHF2kVZx6FPQvn3QtHyeM8j61dk9wcSka+L4xw0z73em4jNLV7kmnWjZ7iAj/Mt14/T1uQeiJLhVDDBq8ckDk+hnIzfCC6wcoF/HCJIsvYPHTtrtPCM2mUz8QxEkfs+kC5eCzgKoAXz98mtk8zMd9DEnfBejBwrFObxQExL7hHpQeOX3Hs/WE4+Nwv7Kdhl6eDXZkQIt9PupeR21KIYro+rjK32H/HdLg+wSZuunUXvf/b6AEcJ0EE59PARNWFDiWiX6Xenk6m9mJANzhO8cYWWY0aJ5p6pNgipPwtI6qFhv/uzi51pdcKsmDCDX59pCntAKK0ukHqiGvQweFbCc+RZe7yTAqY7Rn8uhx85XJUBDY1gZuJJ2vPW4P+oFTictL6uoeg4fl 7azCTwSA 4WGIQ9p0Zp9UejTnNarFDSq7B/xLzDTcki0gx7Ajvc6h6nEDpCpuuAgcaJ+zmAzcKRV+D5+IDqd/sf0bsitJUDvjWyJOeL0auG6z/WwdKnjvP/fChmFrPzdW3zIU58F0smyD+Jy4gSrrLYqBa6vITcm6NFprgWMWFjAFiEifSvMPhR0XeDjx+PfYEwDMPnFvbILpkq7vhHkCXeNWQrBR0BeV05fB78tp8Mt8ihtR++qWF4ejZlTQanaj0BMcI8RugDK8zA6uEKP3i8Xb7RdKu+wb7Fsdq25jrbKn58Gl6se0dt5qR3K7bcBcj/3U2gIzQRztiU0GbUzIX+HP/9IBojlx+Geao0C9cr5nuhzIWIvEs1gLAuorRF0zKNeyPDK+auCxJqT1DmFQOmMemfu69zU0Hq6m2DMAqJ3tG/Szk6p4Gp/ygZSdDDoPVhgEI2imCYiNxscTmgIUe5GecmPHH29Sde4jA7XHp9RLfJ32F1XC6707ZZaWVs7DEyrK8RIlKdRDGvjoR/wdaZm7y3nITYmTNZew34StyluPgpPaXMPcDozWK2Mmd9X1ZPhopKYA1y1N2EjAhhHuydKlAVJw6t7RjnOY/3Xt/HlC3dV+3sW4o5lBZ/Rejz3Eb2/FrkQ6B7gojZc0w36SajeKtLC9GYOK1FWdw4v0+tF7y4/PWYqsihyBAtnLEnuoJbw== 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 next patch. 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. Signed-off-by: Fuad Tabba Acked-by: Vlastimil Babka Acked-by: David Hildenbrand --- include/linux/kvm_host.h | 9 +++++++++ include/linux/page-flags.h | 17 +++++++++++++++++ mm/debug.c | 1 + mm/swap.c | 9 +++++++++ virt/kvm/guest_memfd.c | 7 +++++++ 5 files changed, 43 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f34f4cfaa513..8b5f28f6efff 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2571,4 +2571,13 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, struct kvm_pre_fault_memory *range); #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +void kvm_gmem_handle_folio_put(struct folio *folio); +#else +static inline void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ON_ONCE(1); +} +#endif + #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6dc2494bd002..734afda268ab 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -933,6 +933,17 @@ enum pagetype { PGTY_slab = 0xf5, PGTY_zsmalloc = 0xf6, PGTY_unaccepted = 0xf7, + /* + * 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. + */ + PGTY_guestmem = 0xf8, PGTY_mapcount_underflow = 0xff }; @@ -1082,6 +1093,12 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) FOLIO_TEST_FLAG_FALSE(hugetlb) #endif +#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/guest_memfd.c b/virt/kvm/guest_memfd.c index b2aa6bf24d3a..c6f6792bec2a 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -312,6 +312,13 @@ 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 +void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); +} +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + static struct file_operations kvm_gmem_fops = { .open = generic_file_open, .release = kvm_gmem_release, From patchwork Tue Feb 11 12:11:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969537 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 86EEAC021A1 for ; Tue, 11 Feb 2025 12:11:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E96C4280005; Tue, 11 Feb 2025 07:11:39 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E1EA2280004; Tue, 11 Feb 2025 07:11:39 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C9803280005; Tue, 11 Feb 2025 07:11:39 -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 A63B4280004 for ; Tue, 11 Feb 2025 07:11:39 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 572E9B20EE for ; Tue, 11 Feb 2025 12:11:39 +0000 (UTC) X-FDA: 83107549518.04.4357FC4 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf05.hostedemail.com (Postfix) with ESMTP id 7C52710000F for ; Tue, 11 Feb 2025 12:11:37 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="h11L5p1/"; spf=pass (imf05.hostedemail.com: domain of 3eD6rZwUKCOUaHIIHNVVNSL.JVTSPUbe-TTRcHJR.VYN@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3eD6rZwUKCOUaHIIHNVVNSL.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=1739275897; a=rsa-sha256; cv=none; b=gRGmNKgFshn4cwPycceo3eBTmwmAtzd3XA9kkQlXA5sCSjAli70ZnLcIC4fc4aUIO+YNXw E4TTw1UUvK3P3A0sdJOCNe44tFzO2UBOK50UrxjKolmYFZ/+p/aGqQvpknRX4EVhxzxqlV gX9XxqH1lCcO0rxz90UBDxNV1XGnFAU= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="h11L5p1/"; spf=pass (imf05.hostedemail.com: domain of 3eD6rZwUKCOUaHIIHNVVNSL.JVTSPUbe-TTRcHJR.VYN@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3eD6rZwUKCOUaHIIHNVVNSL.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=1739275897; 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=kAdYjo7w1XuCwrHZHSlpYdtLm3u9gqqV2MfDowlzC6o=; b=dNawFuGO+KHGqh4bonLrlFBDhvImkjve7lklTHOCPFNABNqMI4oGkaTGlx+QwK9Se/ANAU Hg/ZR5vwtkjM2cLeD9XP15R6Vu8sgNs9xf6Ppnu2GUyjgOpLh/QujDv34sO3q+QBeXrMYU Baoql0TVp6ncrGPsniVIEDg54m/TSVc= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43947a0919aso13869505e9.0 for ; Tue, 11 Feb 2025 04:11:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275896; x=1739880696; 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=kAdYjo7w1XuCwrHZHSlpYdtLm3u9gqqV2MfDowlzC6o=; b=h11L5p1/V6hQYuDufdM/q+piiQPqO3v+yeXNfwLJPMQPgERyIJ/EWRUDWAKb0EFx6+ 9L9sObWgHWuQJVLmDh22N2IWIs1yyVRSv/qOC3Liyl0u9ocLgXQ+hJQhSgQFUuat1nUv m8H1hWpNBUu2oMJEAQo3CXMj5Vhjbnip/aHQQOlrrY54KEcCmpJHs0zkc7cdDgAuOeY4 8s9+S4txoFXjksdLJFHJsUNDos39VMNVdHIp5D0IyUPdGO4n+hcAdkp3uXzUlMxaIfr9 fIc2H63FNXi0yLmOSAS6BnmpokTz3Hzt1vMKGoyXzAbJT9WTZaUPQx+TciPfOWoElgay ve/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275896; x=1739880696; 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=kAdYjo7w1XuCwrHZHSlpYdtLm3u9gqqV2MfDowlzC6o=; b=MMbcSaSwPm3Q+UcuJvXKhnyI4keTvlbGXgkPNnfylAUXTVjDjTHMY2dxDE/Z9h769D zkxsVSdRv9JsMKB1SzxlriGFSk1OjaOQH7nk5R7TR38QdRXD3jG3QloyvUga5qYV1nyT 5oj3HWG2gjF+e86oLlIa0uOUkMnJQwJ1VuOxrgvXw26VXdAkA6exkpKlmjWpWCUbX42E QqjYR9dN8l260dsyKMqo4yUzIFpF/h38X4GCDDAIfUVQvS7btKBAPbVwr/Thm9zFmCJZ HGhCujAkWK4o6xiYm6pcxn+d2lTEVWieFbKFRMnu9NB7eD1bMyeRBUsY8qrPoUUy2r+S uqYA== X-Forwarded-Encrypted: i=1; AJvYcCXErTgYHOEiFjS8TTDf27xL0tYcE6S4qP8R+Bv8aPH2IdizYj5g/5LPSD7LbbesuY3aq+mGOq1w8Q==@kvack.org X-Gm-Message-State: AOJu0YzssAsT+pzw4aZgkLyKnbrzV112GsMQkl78x033uxUIC1M+1J9T Gwy5DRfZPU1d0/YUWikvuOW2slzV/C0xaCkK5sIWiWZQNCpGHhaYC2Ycmv2qhwa++SW4ifH8XA= = X-Google-Smtp-Source: AGHT+IGhAIxPnSIYxIYDciFwkjwU21RN+iHch2esUCoX8117xYYfDRohfxX77fPgyaVseOuJnCqxQyk9YA== X-Received: from wmpz19.prod.google.com ([2002:a05:600c:a13:b0:439:468e:a94b]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1da7:b0:439:34e2:455f with SMTP id 5b1f17b1804b1-43934e24665mr117723345e9.12.1739275896121; Tue, 11 Feb 2025 04:11:36 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:19 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-4-tabba@google.com> Subject: [PATCH v3 03/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Stat-Signature: 7aw9c3wjdhh1h48bw1yfi5zout6uxkma X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 7C52710000F X-Rspam-User: X-HE-Tag: 1739275897-392855 X-HE-Meta: U2FsdGVkX1+mvht6+AbcAaqqLnoLmC/5KZ5F1GIAoauyqPxzcqoWj7BRlSn7qfQK5FzA3FCttiPE75fo7Gesy/9X8aKWQWJLjB2KSj8dsmNXjZdmNhhSmTk5OHsHqEYxzEmeJyGCsbdYB/SlFGHxdNMgDNdkp52k5fmzTqyk9rFk+apmrAEfkPxwREZ2AYCDNy0kdMmuSr+8WXCh8IceqIB40yycuZMNC4fUSR7CeFlYLsTo4DGx8A3f4INk/tELtTT07qmNSt+xCX5rXEnFUy40AskcVlSnx4ifbVZYR/0z6KRpZW6JlwIwJXZiTLxUjmiMrnUZmyXXToEMKKvBR8PMNKqaoSLlqnf0CJy0N3EzbKk/OZZRw9AT1TjMPgdWdgzkccjEtxyUptHpUfMDaqFYzo17gS6VeU+MRV3+vSR4rIKIYDwIko1uX3SLsUn4wrHNTvfINQ5Ug/k1PAXU4EtKFV/6p7esDIC5OIdHMF8ffNdY2fwt12GWv3SDEpcvZo8uQWDUnQiVY9Qn2BOtRPN8w6QefLFN8BnE5LfSyRXE8RYTb58bFBE5VTGn17EyVDrrAhlxFOB40Soja7fMiaGuDo/w+e91kDzTLghcVE1lvSaI2fddDIEO88bJcT7yEGgnKU0TLCo10FXR/PxrBCsOienVMk/8645z1mXoJ28wZ895mDjcRc25Xh6QhRxa8oe99sAM7w+wtNeiNyEUUNGnCaojvetpG0drjKuOrseoHbP/1wdejUjiJSr6pyXyl+Bp54BuK0mrwnxBLGi/g0T0IvgwtVpPXckvYQGe9SS4tqspzzDR7jDoJYXr/eT2moSVaCTljDNHa6zc1IrS0d1bvWIGl1qMyNgX3ODRtIW0mkLiPFmP6fvT6UL5gbhBDv7mVMRZaXsRner+IEYebYlJrNVq68iO1EUjDHBalqsYNaScKyX3GCHixrUrh1dNw6zBN3kUSwm7oC+A+fZ mkXkpYP0 GUEiWlV0PIYg8aBmJtEf1Cg0JEHF+dWsgCDJkOYwNOtWpLej96q281iT949+VUDRzxo3U2XY1JYqXF+cHuAaUK4N1XZocAd0GYo4yuV8Db8ZR6laxIaz7g+QWOPkJ8dVJxOk3a5jFm9VFFwmsg0M+VDpImtaZNntVcATv+TyynhmEyJSGCgzWqO6+RGMzP+NYwJBflTA8OH2ND2NuRmLzSkqTOgVOZhRlBqg6EchK/8SpZtFK/BhnRGJwoabpwd30VKIffn3routeKR3PkWJEQN13iv6ipkJpEhAL2IPaDG14jgv5RZLQ8iWyhtW4al9h3n6Kz52csRgsgXeBTVDdYLOfksK7ekjP3+Fkm5X/3Dr3MGDMEBCNxX8SySy1b7OUdUBXtNxuLN4ruZIZ+z4d+y61qGXEcQsbY0SYRqXZeSBeAbRPdTmzgV3uzBX3/FkWXdgfvGjojAhIlsG895rOvqKAd12w2xhVdHKjDb1B89eny9x2XgnBDBOzApp8s6bic6hlnfKaxZ4UiaRerFyRMj2u8x35cwjOwPHPxndD8uWCHma7JjY1y1wz7ktZbmooyswpC90DWJ4ocBcnT9pBnqAzldMxoN5yzqOxzZxCvMBN3mz+EbtUn81Oxf7RQtHPQvJnq33WifTe14M= 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 (shared memory). To that end, this patch adds the ability to check whether the VM type has that support, and only allows mapping its memory if that's the case. Additionally, this behavior is gated with a new configuration option, CONFIG_KVM_GMEM_SHARED_MEM. Signed-off-by: Fuad Tabba --- This patch series will allow shared memory support for software VMs in x86. It will also introduce a similar VM type for arm64 and allow shared memory support for that. In the future, pKVM will also support shared memory. --- include/linux/kvm_host.h | 11 +++++ virt/kvm/Kconfig | 4 ++ virt/kvm/guest_memfd.c | 93 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 8b5f28f6efff..438aa3df3175 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/virt/kvm/Kconfig b/virt/kvm/Kconfig index 54e959e7d68f..4e759e8020c5 100644 --- a/virt/kvm/Kconfig +++ b/virt/kvm/Kconfig @@ -124,3 +124,7 @@ 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 + bool diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index c6f6792bec2a..85467a3ef8ea 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -317,9 +317,102 @@ void kvm_gmem_handle_folio_put(struct folio *folio) { WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); } + +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)) { + ret = VM_FAULT_SIGBUS; + 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, From patchwork Tue Feb 11 12:11:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969535 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 40880C021A4 for ; Tue, 11 Feb 2025 12:11:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E95A0280006; Tue, 11 Feb 2025 07:11:41 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E2951280004; Tue, 11 Feb 2025 07:11:41 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C98D8280006; Tue, 11 Feb 2025 07:11:41 -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 A0C46280004 for ; Tue, 11 Feb 2025 07:11:41 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 5A516B215C for ; Tue, 11 Feb 2025 12:11:41 +0000 (UTC) X-FDA: 83107549602.28.C7E02E0 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf26.hostedemail.com (Postfix) with ESMTP id 87EEE140010 for ; Tue, 11 Feb 2025 12:11:39 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=P3sLAOx9; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf26.hostedemail.com: domain of 3ej6rZwUKCOccJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3ej6rZwUKCOccJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275899; a=rsa-sha256; cv=none; b=5niwc2uBwGoEWKqrIWPLwiOLf/IzunaXGIgU4ywHYo0LmSkbO50/o+4Y6Elx6A9vC6zxia +gUr8vBWV32dG7RKvhEBAsgIKYlmNF+MW2JJ7EEUXFs4hEm+uE5PCerQiTO+XBIdG2j3fr UPNp+dFIysKLkfVIi43VXdv0Xd7oyAs= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=P3sLAOx9; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf26.hostedemail.com: domain of 3ej6rZwUKCOccJKKJPXXPUN.LXVURWdg-VVTeJLT.XaP@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3ej6rZwUKCOccJKKJPXXPUN.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=1739275899; 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=VoOoWnCPGl4HcCb1I6zbkoc8AjEeP+ezJ3rNmGf66Z0=; b=nhYG2G+XaS2z+D/p8rfAPKkSSDeXoCU5/CWMaP/DF1fWnpaQbiVACrit8/avdZUYVjCbLq Z8Gsx00E3KpahjqDMCBp0bs+hv6mupkZzpDeHSvuF7fdS/59tgO7MDIVIhSQM6M1b7pXaJ NIc5XhMzU7TyCoSgIgzy3h0s/u1e42A= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4394b2c19ccso11115515e9.1 for ; Tue, 11 Feb 2025 04:11:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275898; x=1739880698; 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=VoOoWnCPGl4HcCb1I6zbkoc8AjEeP+ezJ3rNmGf66Z0=; b=P3sLAOx9YPS6lJA5Qb6OQRLF+DEuvlM9/5fsLwMQUQKBm4o9mluOziv1f3hOGyv0Sf 9R+tgRK7gxhKOSQosPN2IOfY3Z9p4slTK02uO/LtqpXMUVMGB+0v+PwRV2Bk/G15iQqk m/zMe4B/N1lkVgQyY6aNGuOhJ97dCysAFTJEcM5+zbbLwrJXOPY0+56fUnR2REWWQf7v n2SEtwh8T4NqQ+WMvz7kyVmC/gtD5V3chr2lRfe5q1vPFIeap7/a+bPeodOjt6mu4IDq QvH/ZlGRAI6NbkOQC1c1c/gM8QifTUTKJfLLdeFOKq0zU+10WTlql5muCCFTOWrbVbxB dy4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275898; x=1739880698; 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=VoOoWnCPGl4HcCb1I6zbkoc8AjEeP+ezJ3rNmGf66Z0=; b=BayREGQUYyBQOp9ti3sLPv+ucjHY2UUL9qpC6WW1pbVoy+GKX+uv29wOXJurIQ96if 04n5v3yFxPAzHwF1Yw+t8+2mNTH00zHQSmPZXTJCmY219PYrJ+1P2ojUOjQztRaZE/Ne 8slkrCt5IaoDsMAhVv6m5v4ZIJqq4YZFJQ2s3E5AfdWtIABO+KChbmPKZZMcDXswfnYo jNGhWeIhtrOgf4vOkRAMm97t2+Oet0mCIvvjL0C64dcDUxSVWnKzK/b9RuLhgTpwyOyZ 9vGX16D71OF1InGKYH13gAwjstKLBiFoMGFekdYTcUfKTqj9clGkC4RuNtKOxlT/jWrh 6K4A== X-Forwarded-Encrypted: i=1; AJvYcCWNeb/rjjEcE2bQdRWlhbHLkmWs3PCC82CTJw94LAnjjOW0Lr4q/fmfd2jp+9Mpbwt3TsY8Qb0rzw==@kvack.org X-Gm-Message-State: AOJu0YwgDm5xzRW+eTtFcPGT97fqagMVV5HJEWMSKk0bJjf3DmTmvIN7 11wm5wU+tZKBu2v3KmwDWZp2dN8fkvrK4c8PuzZVN+mMBZa7XIeyANrfmZUrmkDaKSCW0qZaRg= = X-Google-Smtp-Source: AGHT+IH0eOMmKp8sDSfZvGefzukx2BbOVxp2ECFy0DQe4p4PevxPpr9NYmFYN4kr9FPJEdUBhdy96NX0RQ== X-Received: from wmbfm6.prod.google.com ([2002:a05:600c:c06:b0:439:40af:60e9]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c03:b0:439:4df5:5d41 with SMTP id 5b1f17b1804b1-4394df55f1emr27500045e9.11.1739275898177; Tue, 11 Feb 2025 04:11:38 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:20 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-5-tabba@google.com> Subject: [PATCH v3 04/11] KVM: guest_memfd: Add KVM capability to check if guest_memfd is shared 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 87EEE140010 X-Stat-Signature: kocoffa1y5pru31do8qmta6k88tawjwx X-Rspam-User: X-HE-Tag: 1739275899-546965 X-HE-Meta: U2FsdGVkX18wvIHJaMxI/TrFl2a9Ou7XKelGAcfC69ckfBFWWOO9X8O9JykickB+laNWmgsEYKHlzQOhZM9D990QFgG6t5hMuM+BAHlgaEx8QYjv/WE+tHfqLBlH04i1cyDCOx4MAnMVbZgQkmWGroafcrOvboH6/kPSRmOBl/kt5LF8nIBmKhpP71QH8UCEjhRVA6jzhs4wO4db0igs+zKC7o8433MFB68MSC39v0i/+OkZk4rHr3AbAFaiiuVtxopU2JIb/xqER1stBigWYKtsU7MJ6wVQzptsPfnXfisc24m9NxJ6+50GkD7BZGeTjmxcZF08oqtPLWmDcvBJh4eYnxl6emLHNEsjMS+r/wyUl4CL/y+hfllbs5SLcqj6zdJSWZFHflYUWsjNMtQz5UPlMT3je9Zumtt3SpAPeVJH6tR5FBFmPm00MAMNqcgLaR5PXVFxSqqJaS+N7Rkmp70UDBxY92gWDC29JgfzawBckBlUw3TSVU/XJ4IEFuXKEkEdzHxRWERPS4stFcY7yTs7w4cObEXddPxtwN0jvxb9pPan7ompFNDNyteH8i2ztMC3ovk1ca9/zyGGKk/DRxRk9DI9Hn86iDqjxZBrscNI7XkZ2Lm71eJG9mMTZ8RcSi/Z699ELfuYyVhngG/3NRte5dLkjhYP7bhGSsAzsylY0WOf+4xIzJIQN3Wwt/xiV7oLg7LXBvL5xrSW8II86Zcli9Kb5VDc3PAxdRO4MW8KjD7Q2khjOGPWCv3xkbgs1cXXhaOTlCv7tWnnUyeSUS0lcCd+Izcshbih6/TMbUgFdr2KZxm/itytIT+JPePQKaqEDcO4Fb8VWoPXLZUDY7q0hEI82Y6Jiso2VbbNN+4rHe+WFLN/2+hwj4Dv5FJK8/HLKd9Ya0FDTy+oCMZ9XRx+nfCXymV/+7lxy4QKT53JG4PvmT+nKpr/3mvl3zVlNCQPyPn1myOpS47OWQt 1cWYEQBR 5tks2PCsLV4ZtaFssNe6wjancHEPsWq2RAoBMCd9lTLkDXwxQ5UQfDSILfAKViAllst2KbC9Igs45cuEF1hh97t2kxPl5FKrMd+bj+U+rehI1cvQnGRHqe8tgvtf7Z/gzvDHWCWmBnLSTwOU7BnuWJhj3Z9B4KsY7mjCkBNLrEbW3eM6I6bc4q3+UdFZIw/Biuwu81LUGYPzkj3/nAI7bNrZ49l4+ZlGMp8LECWhe6M4nwZpLIqxEfJOTD+W1OJNyVCyMcJgjoF0+0sStR/rNKFoe5dDrecDG7h8vrJfNJK6cfyi49MNDjE3LInyBQHQefAg5skKCp6C+F6Vh1liReQVHXBBjJqTon24mkDlDHjzERi3cpzsukE/N233n2EuoouIKXM3GnsHBB8qzp24nKFcacte1pECv9H31aZrFAE8bUZMV5LMpOXyYmtENM5AHz4T6Z/98kdE65gw4uIESpetzYvvBWkkNy5X+jAS59ecx/xF0i9zgyQmXe3f5AnyE1uBL7wgNVxNtRXpyItuaz6cI7rCqNhXDuorWWDQRwD0kDX1v3ne8XB63o+ENXf7Kr4fQiiPBE51ImVwPLzFdRnPBL0dYsjH/fQi6ApDZvIuy2eZdv1YyNmH7KGv09w05yqE6oS4n66tjTDqmPsh5Znf1qw== 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 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. Signed-off-by: Fuad Tabba --- include/uapi/linux/kvm.h | 1 + virt/kvm/kvm_main.c | 4 ++++ 2 files changed, 5 insertions(+) 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/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 Tue Feb 11 12:11:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969536 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 CA4F8C021A2 for ; Tue, 11 Feb 2025 12:11:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 67F84280007; Tue, 11 Feb 2025 07:11:44 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6083E280004; Tue, 11 Feb 2025 07:11:44 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3C251280007; Tue, 11 Feb 2025 07:11:44 -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 1547F280004 for ; Tue, 11 Feb 2025 07:11:44 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C5BC7A1627 for ; Tue, 11 Feb 2025 12:11:43 +0000 (UTC) X-FDA: 83107549686.29.B0B0F8C Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf25.hostedemail.com (Postfix) with ESMTP id C9572A0019 for ; Tue, 11 Feb 2025 12:11:41 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=GguRqOKL; spf=pass (imf25.hostedemail.com: domain of 3fD6rZwUKCOkeLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3fD6rZwUKCOkeLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@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=1739275901; 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=q4c2azch4XGSzLhm4hVjhhxsYncTOG8CAgSFUNg+Wf8=; b=7zfkasRwBeI4+SCAuUB5oea6Bg7L2YLvEsvEOPaNVa9DSCQA2PT8DmVSELFiflb8JQNDBv W31vwhFlfGCFPU3Ay52hiusXEx+LLZgK7+fApULasaOQXecqhIUHutm+liw2A+ZNHGuNt+ ehq3eiCK8lOU43RqGRzlzxC18vP+Xys= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=GguRqOKL; spf=pass (imf25.hostedemail.com: domain of 3fD6rZwUKCOkeLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3fD6rZwUKCOkeLMMLRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275901; a=rsa-sha256; cv=none; b=GjqL3eWtJECLjdKeI3+OGWaq5s03yKmMeDUZhmYf2eFuGSjlvDAA/EVMG0LFsms5iUVoum j4Thk4ndfYQKw4oZnAy1W4ZZjTCw2e9S3awD6j2LmvMFTqtVKHuI1mrTCcsioyEf22LA5E yVbXugYQ38dXMsBWq5i5+Icqot7SXvo= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-38dcc9653a7so1695098f8f.0 for ; Tue, 11 Feb 2025 04:11:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275900; x=1739880700; 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=q4c2azch4XGSzLhm4hVjhhxsYncTOG8CAgSFUNg+Wf8=; b=GguRqOKLv8hUvv+6piau9eGjiXe2071FuAWbCD/drwsQaPvGKA+/2vW46s7lxjSuca RQOB/RVYLqXrJHfl/PGwizqpJwhev3vYKCRivOJS3gdTTT4HN1uuD0DiZkCmpMK3wu/H 64XIM+hsYH8Savqi5ZCJNh7+W2yXQBY5b006YOpcP06ark9NhCu3gjhxWuNzVMHZoICn iP34ZlV1DojjhmjWGucMIGwaghT1CV+561qNh091xqaOIrSITCjydZTt8GmFzi0DN3X/ fMlq1+vFFkGkqxUOb/sgc38kdkrAFDxugI0y4Uy5HLDYYgp7m2P9Hli+18+jqlnQVCm0 pPiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275900; x=1739880700; 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=q4c2azch4XGSzLhm4hVjhhxsYncTOG8CAgSFUNg+Wf8=; b=e+SFO9U2ufZJbHs+kbUHKkS76K0oMJBwYLbLDJtvhkPog8Qee3hCnRu9SDj1xiA6mg g8Bsf/1hT9HY/Jd7eYQndg06NAzrQf+WPPR0HNhAoMK8QfUmmo5xePmVmi4BH+5wm5X+ BMHZpXZj9HlUMN0d+ToSYNPCvTk288HXFpBeSgNfKWy3EEwngIqKvN0btNTb5cSU4+Bd 15brRb1iZUxi+dJQHcjJwLig+2LS34GvR4jnKCKJA3loPBMuqWGZB5PP16xXhohSqTUJ owO3SecaRER9bhM9YbFEywjERSQzqOPdzFvhupFroqJuQGS6GL8bLJKM1TvoAXRYvg9+ QCPQ== X-Forwarded-Encrypted: i=1; AJvYcCUXwL/KzJTiUh4yJ2UFKA+rn8aKdPhJrJSOSZr+4YHObCHE44R5F1QYd8aHlsifWJdtPJ9Qf9EOlA==@kvack.org X-Gm-Message-State: AOJu0YwCcwfKqcSNZ2zVvfN1kQ6foZ+dOkzO4B4NxPcIg23INV4o/fUa NRitqlnYOHX6WTFTp7YIzkvnN6p3bdrqVLpACnmVYwQpyJg9pEW4fSAg9tSuGz5o0x2YpqNkDA= = X-Google-Smtp-Source: AGHT+IEZVlgZ7l4TTAOh1SBqdQFPpEAEB3+x5+ryB71coKgbya9elk4Zr5rIWpnyM79ic86FoQOK0Ptk8A== X-Received: from wmbet8.prod.google.com ([2002:a05:600c:8188:b0:439:5539:d861]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:1448:b0:38a:88bc:aea4 with SMTP id ffacd0b85a97d-38dc9233a6dmr12990245f8f.30.1739275900187; Tue, 11 Feb 2025 04:11:40 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:21 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-6-tabba@google.com> Subject: [PATCH v3 05/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: C9572A0019 X-Stat-Signature: yxkt3m8m98fq4ojqne56xtqb8x6eh87a X-Rspamd-Server: rspam03 X-HE-Tag: 1739275901-267768 X-HE-Meta: U2FsdGVkX1/db/AkjNe5o81+90/L4xEVozlWybkvXlwIB4k1DZlkQkbcxF3LD7bpukI7qhSTTQ+BMHAMtzhkZAYvt/El3g74tf1Idwi5OYcQu/09rV9vWcjZm4f/Qsu0SFHb0N1uxsYZAZl94nKKdOSdVyVBb3SoflnHSJvtV17dgV3aXK8ara5VuRTt8XLfbO24THbeYogS7fzOnuT97lm8fPqWhm5hQVcoKnjTgWo+Z5uYiLIyuPczEDK2vjBatD/JC6FaFhAJyn4YZkVYATtyuriKSk1X1bgd62n+NztKsc3yTd0L28cXATv2HA74s3TBDa4xJgLdSzSkt4wbHHq7Xr3sKf+WjliEiUSjwBHygIY7htVBhmD+rQ1MYQvKOSA3IXet8dyRnaBK7wOsHVJpMNhUidQB15KBrWM9+8Xvs4UEc4XxA/1HU4kYAJMY7d0ELLD3OUyU+Aa+t7R1TnqQcbvUFRWtJObigzh5vkioEXOEjYctMckSlqhRmTofx1sU8QjyWjEGKrZNRheztxxOyY+oX7IijV+etbClB+ocZoVaB0n/kk1lNui3YQrAos1Rsu7Yt4+hgmF1NdzK2mRDOM2GWaOgwzDFo9H59uVvwvjEQKQg9J01wZzlkneB9njipGKjW1frsk/uvJ2WtumRJv4O0kKCqVfJaYFYD/Z3qtzCqiCgIZrh08zuwogwwLEAvEwRH31wzPsW+9ZgzHbS5LcXdYkgivIHEBnTiAicAd3wq98LThwkmyjh5amk+bEKqRB8XFZNXMEde+TgOMyrz9rWXUypndOW/eV53ufMyuBxpd7AY8OQ/hApcuktnfFKs7rJOGljqPLaZBkyDJGvjSHrJ6fwMpWYBqaIcrq1Bdv7h6Cet2xC1iQSGsxUYOEHlOTAHndtbTB03Dz4/9Lrpu2TJDXcfh+FYou/Kdq3e+JwyVD4ip85Jqw5m7lLhvLaduUqjLeMYvWnXJu /NMCyice ewfZoogf5tZt3oEr/vvEpozWXEw7i4KWeu0OEUSuJkCc2pFdKLaXbX8/0WfE6RI0CLUhydnEX91pMPdfYEih3/Euehpz6bS0mjUzWdoS4Hasr2uO1RXPsLLW9iEhh/IUII22KtyfgcuR5RwCHFZ1YMHzbZ7mlEeuh0skDYwal19q8vBrGVKXDaF0Ad7s1d2KtjVmIYr51ULTheK2oxO0yPDLA4qRLe586Y51uvNEWhZnhvSx1nyEQxMvB0fgFQtP7iEvx9ScZi7M2S7X0cYrnez/l38FwejhBqDuuPIrZe8TZrsCNxEZAdA93uR7NqLEPrwSJ4p+qyLJOPyGIENYK7oGT+o+rOKAymQJnKxBpCQdLG3Q2fIzPiWfksiewcs8Ul21am2Xg2Kzgm0JwbXA6Exq4ETLB6jADX1Rzn2j3fGWOENYnYhxpUlu+zXr9G1nHXYLewgL9vggM36JbpT3JAYl6S/7mA65XoaqHKxoYmpekWSGciiDPzh/HCCZwAn9EJS9GxuRGuTduKWX6U44vLA4zkA0qd3mvx/RBVQBSFU4GisJzR35WME581fgvTA1G6kl5x2ihDZWwSOceCURiOnmR6gDq+9Uo/MI1ndoKFW8S7Q+Cj0UxAOkWrUx8h9pbvfI5nvd+z8+I9N6YmPdEfyogfw== 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: 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 438aa3df3175..39fd6e35c723 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 Tue Feb 11 12:11:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969544 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 7DBD8C021A2 for ; Tue, 11 Feb 2025 12:12:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EE4B528000E; Tue, 11 Feb 2025 07:12:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E6E1728000C; Tue, 11 Feb 2025 07:12:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C729E28000E; Tue, 11 Feb 2025 07:12:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id AD70B28000C for ; Tue, 11 Feb 2025 07:12:54 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6DF65121930 for ; Tue, 11 Feb 2025 12:11:45 +0000 (UTC) X-FDA: 83107549770.28.08BF48F Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) by imf01.hostedemail.com (Postfix) with ESMTP id 7F01B4000C for ; Tue, 11 Feb 2025 12:11:43 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JrpIw0mf; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf01.hostedemail.com: domain of 3fj6rZwUKCOsgNOONTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3fj6rZwUKCOsgNOONTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275903; a=rsa-sha256; cv=none; b=E7k4uHFZ0+7L2LzAcJYWZjczOdOqDC/vMsUP4G1qMpwijNtwBy5N8Oum0JopV78w+aB0es /PU+ky7X7KO3CowBxGjHwvQm7BXqBR7CXxaJCkV2Wx7O4g2j2mtiiAoOGBshVAuAE54AQ0 bUt5dYVCu9W45xfvneP5J4x0cPYa80I= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JrpIw0mf; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf01.hostedemail.com: domain of 3fj6rZwUKCOsgNOONTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3fj6rZwUKCOsgNOONTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739275903; 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=KX7W4swHrFK90elybvizfO8dqWilJCD1C4Wf1fKXSTM=; b=U5KrwEr5GI2MYtXJ2JPjWVIv+LQK/Rc278Cx77L1oM56SJajDb1OreCBdUXmj3n2KtyJlD V596RQjxj8xwhA3kLIZNrh7C4jJ3pzNhG4F0tuV5xlqk99s4g2rvviz+BLB2nJl6SYosg9 WqEYkFZRglb2Tq6OR4x7W8AtZKtDmRU= Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-38de1668f18so864670f8f.0 for ; Tue, 11 Feb 2025 04:11:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275902; x=1739880702; 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=KX7W4swHrFK90elybvizfO8dqWilJCD1C4Wf1fKXSTM=; b=JrpIw0mfItKzXioOlqYGFQbwwgxNiv9klO7wjchUW4ENLtzXagKKW1hDdh1x3EzTKy 37zFTydMgOTIBALGygoK7cO5xXnTlGm4UKIF0LTfsvf27LCTP7D7MqceaYRasAXGEi6h aiQ+ODXbRFsU5LFYoAfc3WHICjVSPQRTBzjr2LVGXyd1Vqjw7dEnR0oE5jvzs4VPdy3w Av6p8xBC2u6pzpPosuKStjjoCQ5sYhZdW0IdvE2TpVqJ4gT/6JIoqY8giRyCHvxc+s1J FaojevKBqOrB0kge4h6HW5C3msS0FoY/ukbvp5CpN0grjTZk1nMxFf4WzByA3cSAPm7S r7dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275902; x=1739880702; 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=KX7W4swHrFK90elybvizfO8dqWilJCD1C4Wf1fKXSTM=; b=lqn5YZUxd1ulKcfnxNbHV12DN2A+QOQHOMJLolhbVbY4jRdLvoFIO3NmWp2dJaYLuJ e5e5Y0j++eIzg+iTcHcvK7m2A8KgzrtwYoL+dgK01PwQeSau/xvRgcQsYi4eVZHQ0qTo qqm6wJCMzSq3Thq0BOWjj7FgExkeV3mqAm8SK1EoRwWlDwItp8Nro7uAk2y7qwuEcpI0 Ye6hjVa4ttK/3arKNUj6zkFA9fxQUQYP/N5bgzc0tjfRmjKdpHYX4otx989Wtjx0f1EU 4lohXwCVR3WS3iTaA/j9Btpb6WG2n0Lcc0d/BIBuCB3o/ACU5ZWN7BVrOF1qmnFCJQOI 69fg== X-Forwarded-Encrypted: i=1; AJvYcCWMYWAH5isLDCAYsH4NNCf44B291DaKXK2CzBFkGv5GA+9LysZBu4FMarPnEKcRZ9kR6CT0zKVMLA==@kvack.org X-Gm-Message-State: AOJu0YxHzEYCnAtIAtNfkoI8569ROMmd+n17m2XVLVpsPSDLdioS7y9J Kw5umXjDocbagB51OrFS4TlRFcjW1KdQJNi3t+v7REqoJiqb0mh4c7vapAv7DpaYsuUSSOx5Xw= = X-Google-Smtp-Source: AGHT+IHXKJom7Ftu5yovrPwrI10XpRYiY2qBWkBSoqtXJLa6Rrj1843rKF5OjouXY03AyaMgB0W+/vXsEg== X-Received: from wmqe4.prod.google.com ([2002:a05:600c:4e44:b0:439:3284:878b]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:1887:b0:38d:e430:8ec7 with SMTP id ffacd0b85a97d-38de4309088mr3236903f8f.15.1739275902164; Tue, 11 Feb 2025 04:11:42 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:22 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-7-tabba@google.com> Subject: [PATCH v3 06/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 7F01B4000C X-Rspamd-Server: rspam12 X-Stat-Signature: azbc3ybsdgnoa9396n4imeuwgb9tptte X-HE-Tag: 1739275903-893648 X-HE-Meta: U2FsdGVkX18HvmF5DIuxQmKSzwSlBAk7BTHBg98MfVHsnDZK3iugxmFoDtSo/X5a1AADhYySvlI0QJRxktZyRQoK3kozZJApAEhUIFfKW35iQdieKttovXzvVKyjnpLpZOu7kA32/GVGKxj4m3VOI2ovReUG6cG9dVHCreX8qA3AmW6Q0iZhxgAyuVj+eFaaim4GaGERNwQk3E1wAfA3zaUtqsvKz6sLHuGvPH+ez6gVi2Wlwhf2HrKQSAmg3Y2/gticx875AUqIK9qs7kqVLPX5qid1jSlSFeesXEuZRUOdvIT0DfX4oT+YN1ypDpOSzYcAJ85W3WKF4gay/nBMg90etPQgBEhD1CzZkeD0c5oyog4wgl5RgH5bSgUjhjQL/UzGD2zfvGTX8g4yz4HUPkVxnAP/nWb2VxOUcswjyGWXytYRfOXgUCtSGCQumrnTT9oeMxusNfzc5rQajWyhz7oWvZqiYEVVHW1/7XsPrdMK44d59h+gV6sIjtDTSrFtBt9Jh5QYdeKWxx+auB4Zr/NDc4IA5zN9wOSHjczEvErvLqg+Zq6jE9rMGfjnRSiAlVLFwXhCNkOTHJBorCPxESCbh5LWCtYiUy+Z71RfTYXFnV1qjPvWAaZKDQmne815721OJnq8R+W4+fOcK9WiKR4Urm5FhuJ489WyeJyqnor4yV0EfbVBCroSXWi77UGq4n7A09SAefJVPByEHOGueEsUUYAByKPjKUjvlfQ0Dgr684t7rYJ25V02RNUkTqFMjOgKsviU/uEj6NgQSpO0m12+KHqFXLLhSN5NkGseU+KrdnAzlSSb9vVlh/y9lFIct6Cbcnq79L/u0czrx4ayA6NRNZfnwWK3lv1zYKyPUcVtvPNR6oftsO7C/yS7NhZ0Z2YE6gZ2febsp4ve8QdUz2SUrjax8lgHpe8Hw28IMpmmeOgs7YvuuJm5K4CL/Qo3c9S4LT9YEE4TizaZmjK WAqs2ewB OMqRtGHGKBlbWffsB+Ae6d68kMltvMTC5Fn3o9RENAnWQyi/E1rII6rvVztM0uMuIWNP22yD77PIJFEGqc7yUy0Tl6iJAM/9ubnP4Hwr7S7Bvo0+k5qLYKdBF+yueUhXYlzVY7dgQBvBw8hjuGvppcyuYtjbYpoufKYlCUS2Qn5rh88AGHoV3zK7M1TsEkcCC/bVTltiQTSOCLMIIz3Oeny6nGs6O80OfRWw4NHcgkWIsPH5PiSeZfYgGYUphhNN9gC6rBcXkpypCi/tUe7baMfqJkbLm3AKcgR2AswAl9Pto5YgFmFCZxwvMTV7llPo4eWhx+zJpMSKmCt6hvEdLy64E8nAzR1xnAb7GcQgEeDJoExq4fkRFZvyu91AMSYCo0EQzLVAXh24kWuZofmjFyBLtjMTlpKZK6EvBOR/79jc1TzaZ6ZfbR9xgjDw0DAteoVZE79pEVC2gwZWPvu4YnzzP01xXCVDNud2KrjZsm9djCAF7ZcDxF8ogAOk9Gyn/tCqXipy/d27Qm+diEOJaI16xHY1Cg1gf72LJpd6H7mT0AwWuk0uPzI/zCsPg7oFJB1OSB7llx7iFyUf+WDoEXXbGNQ2E411F4ztlGFSAapUbf5a13ohj2HMDuXp5vNN4ag2RhzOJlMoY+9n38wPWjrFpxA== 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 b15cde0a9b5c..1fb6cacbbeef 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -2244,8 +2244,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 Tue Feb 11 12:11:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969538 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 AE39EC0219B for ; Tue, 11 Feb 2025 12:11:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1C55C280008; Tue, 11 Feb 2025 07:11:48 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 14DBD280004; Tue, 11 Feb 2025 07:11:48 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE273280008; Tue, 11 Feb 2025 07:11:47 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id C19C1280004 for ; Tue, 11 Feb 2025 07:11:47 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 73B6081601 for ; Tue, 11 Feb 2025 12:11:47 +0000 (UTC) X-FDA: 83107549854.11.AE683B1 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf17.hostedemail.com (Postfix) with ESMTP id A1FE040010 for ; Tue, 11 Feb 2025 12:11:45 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="Ut4Qk7/G"; spf=pass (imf17.hostedemail.com: domain of 3gD6rZwUKCO0iPQQPVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3gD6rZwUKCO0iPQQPVddVaT.RdbaXcjm-bbZkPRZ.dgV@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=1739275905; 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=KGlWsAVkyKnhySbr83igZIXZOroWdqgSNXlU94DUNkk=; b=OvBiHGma1/P9CZ72ljWd7Dbs7BGTK5/RPvCWPej5HUGhD4SwiZuluDSqoaarvxocHURE8o mazCEC5UAxg8IZ1TVArdBAuescOLqKt7UIbIChKW8g1wyLaAplatGJ0KJaEnG6To0wWPFQ K6aBYRMwYEZsJ/1oyLrRLKhX2kyeBRg= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="Ut4Qk7/G"; spf=pass (imf17.hostedemail.com: domain of 3gD6rZwUKCO0iPQQPVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3gD6rZwUKCO0iPQQPVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275905; a=rsa-sha256; cv=none; b=PD1hSSv/POeJbk8qgBKYHYLFJn3C+wsec0X6x3TN6ne6dTELF6sq+MaUy/Qs7YyAUxMMlv uIgE3dQ2OPWmUx98h6eqCon8aTW6Mbzv9C6qlp+EBiF7+X8XiaJIS/ta1COHMQd3euHqne lWa1gyuJ2gnel9KNYz6P2oGQrYoyvXw= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4393e873962so12533715e9.3 for ; Tue, 11 Feb 2025 04:11:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275904; x=1739880704; 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=KGlWsAVkyKnhySbr83igZIXZOroWdqgSNXlU94DUNkk=; b=Ut4Qk7/GCW2wN7ujlaBLahztT/HfgUWYNLb3aO2TiFm/wWX+y+3+wEV9/82Vkrjy7S 5vrgTEmGXAJG+O5XPzZSgz4RLvXkKkqNwFAo7e289Ukdjkb0abKQyctmCOTubd4cp6Vn q8bMj4/DPxR9T4lwtM8KA9wQesn6pXskZt4VzG+QR9Dk0Vn0AW1L902Rf7QMHkOURYqg Sycb2KVJh9aFpZ33aS9DfW29gu+Zo+N1DMCcaxH02o1IXAqOqrOnT/2/YlR09i4frxrT 4eHJneDf0n6qTaEfgvMQpF+RgopMg4Knc2shA1llAfBTfBgJeEnkXD3RPfM/F0nu+YiJ IhtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275904; x=1739880704; 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=KGlWsAVkyKnhySbr83igZIXZOroWdqgSNXlU94DUNkk=; b=Nm3EX2rutscYmlB34lEtKcgMlqZ1r3hjcWZvIsvgXwUyNdG9jpOTVboJx98C9GQ5/Z swnCSBUt7tjt5CWWwVzrD5OnwYnHbqryUN9mTQYVtclDBgb3iB0SAHSIyC+kQETi1jxQ KiKbY3+F9Gek50keOosa/vQP/ebLJJM2QBPEqUNH68ryBW6bIno8TquMbZfDjWGpXBzE bH+P8XIIK+r9wIHVcG3X2Bbll+dOpKND8F8Q67IM2gOMyu298RjclSvP0yYqMscftzpQ zYAT52iYZJDfJIBOi6P7JAiYPo3TRMJeEy3dr5DTwo8qmyi6t5pAuKkuxjt16wl0SxTh rrOA== X-Forwarded-Encrypted: i=1; AJvYcCXUN17qBczZ7yavTmQTp0pxwmDkqyFFoiu0wu9rsjQbUWbfyOi0OrujV9k1xOnXeWSfpksfe1L0ww==@kvack.org X-Gm-Message-State: AOJu0YznMRSK7s5JNF7gc2SUUlzTURy1qfnTlyrxVtFxpmQqVxcVEAPZ 0i62UeEqQBPPTzk2CQ7kHRNwvoHc16vpRHQYlaBK1rvoKdMtWF+ZRM5JNYYsRH+z2KSjZ49nMQ= = X-Google-Smtp-Source: AGHT+IECBWxW5BmjsYJdVFsglQzvNG0pX6h42Ln2RnS0ynPClK45T5nCrnmXnpL5zjCvLKTXEj1dNopf1g== X-Received: from wmqd4.prod.google.com ([2002:a05:600c:34c4:b0:439:4c13:57e5]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:354c:b0:439:4376:cc0 with SMTP id 5b1f17b1804b1-43943761119mr58255965e9.25.1739275904320; Tue, 11 Feb 2025 04:11:44 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:23 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-8-tabba@google.com> Subject: [PATCH v3 07/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: A1FE040010 X-Stat-Signature: tkkzisuzqkhb76tm58fmos55nzdfxfg5 X-HE-Tag: 1739275905-838147 X-HE-Meta: U2FsdGVkX19rGPjGzfvUsXKkjLsB+swXDSvkpoZaq0VWz9tnP1h+1pJUjLyTTDrSMFYFPaMN9ZlTPvRp3Lo28/gn3dVE7w9JZVTVZi8xsU8pZOINzT13yPAxmjaws2ZMqzuUEwbCKwB42IRwIpu0XB7nXg5aJzgCpLYBLkZ3p3noPoejmvPD2fL238fr9DLMmbKU3rx09kW9pGcogPnmuSBg3DDMu7KKC0VloGfDl36vOwKg1dD0w9LP2y7sfV4UYIRu9IGIcMKY2h6cAA9tf8vhZgNIrgdKDOq7JuokPEnmn9yl4AabIfMn6XThjQU++DPdJsF0UGC0/IpYs56XARWqLTEwCC7pdjN5LXVcsLgo9WxjEefLJzB+JZba55DBs46e4TJMmIbn27tx3Na2htmceubH4lDsaF1vEQkn+fykD3rMEMPcNsJouNkfDXNO7yRn0+pbOOFrHVU50VLjJYE66wwqXoUHrq+LLxpAN2lU25Bwy2ECfWS15KXy0L1bVC9mG/jdlG0K3ymYedQmFuJLJyfTvxdkw7A7H3ZXCnrvYj7/6P2cB7IVPP6vRrrWDhfGH/DtV0eoqNzwJzYjYUgDXCAQpYRWdJ3EInr2rNdWwQiyIjn9cITHl0TUaqSYqxKyiIMTXIZD/LppKVMKCXxV3EuZ0LYF1aZz86Tbc2ajI4hQRREvq7qTi42E/YWUcWKyKpLexpC40IfDmmZluwoniFloiOrCq+1PzIvE93BLLuJvjVUJI0hHsjVpIN3RCBHCLrZHfbL8aeT0plE9OZosU9HV/1zgnAmXRD9QBoXcBHtqjnpih92tqw+OGYjjlvirJwRL2fiGa4VrYUahmAt26mvtqtycj6hJrBiytG0ErZ+nlgr/ofJZKjhAgZkCexdre21qM7JjjgyDsYlURSkkMtz5sgtKfQZ8r+MZ770OD+yYIhxgrWPY1UGOYEojICPd40Gi4+1U0WyQ88V eUM+m4SU FmqAqLE+r8jmJx775yDL09RwURQJS0DmJKZphL7CYwQYSYv3tR3suaQI62Su94HD8RVeDyZnpRHTGJvXR3IRkUQT5u8+E/XERsFEwGifDudeZkvmWHhNvNnH7O+MXHNfcjqamX1Xyl7fjAFNg948Sqfbq9wlcnpakOrnVUr6+/qI5oGx775wOZCIzE6A5ASONjQ/1wzQT5zjJAPjdRvYwzuRL6n7eco6+QD1JpvJaxdeaMjTqPg0VPJR21/x55iMVNr3xawvGyKSCxGg3zxNy/ioO4aTR45DB4I/qmGC9Lq/jn2gzM6K+dypyIa7m7vc8LoKg9XCbKiHgt1KKaDTNkA0cIGIcn0b5VU4CRnSv3aq6PAgG236mkrxEvnw3zLxclnugjHFCFv+nkNCDPBcIUnJORMaB0/WM3srwTEmbqMv1PVrCkpO+NuSHFBMXCyQeRnzq2+bOmOJbQCKPDbK/nR+ng/UhjiIF54E9lprvFmRrXRKgIwuElNcm9TqtKhZPO4RYa694avA64VpHMtFFU2Ynmwh2C13GrrzD110jcff/ejaZSqwPPKSRaeKWkgPkrdkrOa74G/3Rn/MFqP9EC4Dr+CT3TWcXdSnLWVKkkeiyaWO6555VbfpOV0R+SQCp16U862YaWTqg3wA= 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, add a check to ensure that the assumption that logging_active is guaranteed to never be true for VM_PFNMAP memslot is true. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 1f55b0c7b11d..b6c0acb2311c 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; @@ -1525,12 +1526,13 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, * logging_active is guaranteed to never be true for VM_PFNMAP * memslots. */ - if (logging_active || is_protected_kvm_enabled()) { - force_pte = true; + if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) + return -EFAULT; + + 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 Tue Feb 11 12:11:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969539 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 0E753C0219D for ; Tue, 11 Feb 2025 12:11:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6F74D280009; Tue, 11 Feb 2025 07:11:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6569D280004; Tue, 11 Feb 2025 07:11:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4A91D280009; Tue, 11 Feb 2025 07:11:50 -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 28CB2280004 for ; Tue, 11 Feb 2025 07:11:50 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DA9C81C93D2 for ; Tue, 11 Feb 2025 12:11:49 +0000 (UTC) X-FDA: 83107549938.02.6DD4275 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf08.hostedemail.com (Postfix) with ESMTP id 04B3C160007 for ; Tue, 11 Feb 2025 12:11:47 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FpAW7Ihd; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf08.hostedemail.com: domain of 3gj6rZwUKCO8kRSSRXffXcV.TfdcZelo-ddbmRTb.fiX@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3gj6rZwUKCO8kRSSRXffXcV.TfdcZelo-ddbmRTb.fiX@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275908; a=rsa-sha256; cv=none; b=XmoMeh/32pxHW6qxBa1sJ0smxKtin1uSM87mX6dbvoGVHPWRH8DkYEBOrpFDPs/HRWucdC 41mRE3UhsX9SR0yOm5TAAVeOUXNrfTfc7tVzxHqYiKcscObROTnBpKXqMd6JJ9MlOHbKTX ALlGKlKUWG5neUeioFu5QKZl3kv7S3k= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FpAW7Ihd; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf08.hostedemail.com: domain of 3gj6rZwUKCO8kRSSRXffXcV.TfdcZelo-ddbmRTb.fiX@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3gj6rZwUKCO8kRSSRXffXcV.TfdcZelo-ddbmRTb.fiX@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739275908; 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=aEy+uMDhoWpq4iTCT5JLvzuI0rE/4/GuORtNn1GWkCY=; b=j767zgP+9f+cLxjxlSyPN2mXhnMIiSyFw7prMCmD1VMN7FMFs5maJ4Jkx5mWUtRSR54sPY G40d9kDIYTpxidEmhlvMn3Z/4GEw+G5XZYUKmgPybQ9o/gZJIaNLfTZ8szE3yFqvJXfn7m z2JzcwoGhlRqIAvg8e/mCXfPRnG4+kU= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4393e873962so12534265e9.3 for ; Tue, 11 Feb 2025 04:11:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275906; x=1739880706; 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=aEy+uMDhoWpq4iTCT5JLvzuI0rE/4/GuORtNn1GWkCY=; b=FpAW7IhdTjEtpSJcmwmL0/CKA2wM94yttz4l1lXjYemkl05o91yDwvU7fETOSONzCx aLsaRwQEC9MsiJPCsl2Ya8aczakcvdZ2h20dQMXUuaHNAy7dU8kCkdh6r46RYe2UVu69 xZiX6OuF+by6CwEAKyihFzBVUXbGy/FdVK7PJXFMg3H693xPBBg0W7w6l1kMTSD+XXzN maUFO4nF2T6oPtdCtBkji77V0MGu4xDqN1GwjdaX25CWEiXAc4CQh1Xw4ZndyRrIna6p RlClb+R9i3Dk3nD4TGVjXF+lMXZ2US9B1YTnSOhYKJfRqUs38vh/1Y6gXOJQHfWp77c3 MWIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275906; x=1739880706; 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=aEy+uMDhoWpq4iTCT5JLvzuI0rE/4/GuORtNn1GWkCY=; b=eRXASPKQs5pHh5heb7oDAgk0nrtp/50fdnpqZgvyYVN6iOGuLDKbJeyCuEEpnWny6m rMmSBrsJAJgGKeqBCm5BJ1dxXvSKXNCbZQNoGllqKOo8etzeSkLKPNSS3tAsUX8+Q0yu ZD6/iQXMb1Lzvr+i84d6WSIjtB1PrtEilBWcMyd0Zr8aHVxinYEASwsJ6FEhx/V3F96u y9oxbRqs6rK/nB56livopAwd5Je7Nt/X3NZJNtHo6eepZnsscITXCY0rpSAlx+3nDsi3 I2zdyaI8yEMfmzfWhKk07IWijHPWGaIMq3Rn7/Z7sbhg6N/JQhXzTa9/MoP3NHyuOfn5 8EEg== X-Forwarded-Encrypted: i=1; AJvYcCUvj22daj3FrWVAsHm6iQi/kFyXP0YKC5QC2BNzED5etRNOHR3ntRBfFDkqfTsCN60WLa2zVakVkg==@kvack.org X-Gm-Message-State: AOJu0YwbvJ7VFu/bEnAAi3vfDXlvwozKXIutOHQ40V6e2diZLdZEdELI ZbYVLWU+qfnjzH+3pn2t1Mt/a/d4S4+MFvtSSx6lkAiVcsG/GaGkA5NcUBxu9tGW2Z1b72qQiA= = X-Google-Smtp-Source: AGHT+IFpMluwBrp1e1iVvzK5nRkJpIOD6K8YzM5QfPfRoI4YahF/GtcuCoo0tDbujX6eAm2iyJ7gmW+WFg== X-Received: from wmbhc12.prod.google.com ([2002:a05:600c:870c:b0:434:f2eb:aa72]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:59a9:0:b0:38d:db8b:f50a with SMTP id ffacd0b85a97d-38ddb8bf6efmr8898263f8f.24.1739275906632; Tue, 11 Feb 2025 04:11:46 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:24 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-9-tabba@google.com> Subject: [PATCH v3 08/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 04B3C160007 X-Stat-Signature: sn14y3yuw9348roz4tr7jnddqnpsoxyx X-Rspam-User: X-HE-Tag: 1739275907-300124 X-HE-Meta: U2FsdGVkX1/l1RNMSV7hkg8IeLz1MFYiY1WNBhO9Ym/RhklI5OkOKcqV6SZxbW6eU1WFjIzdGanlG8pZyDbegM1jbJa9YOtc5KLmTinrLlE/MfQtz29LcVoZ93j4yPPe0Re8Fp0ejJMX2WMWgFr+mDt9UO0f0oGfPTmvK3GF/rvv7ZY4gIzkGGm0vPJqPlrzGaYA66YZk/Dn2sUpcwpCLMq3U5zjMGI2/wKrO4mdIxU2PEiSFsx2wmXJFP9xf7T1V9HucOVUOR04VLJW7wyHde7BdpNA2i9x8ArU4wnDZm8BV8gSctUjAcJ4i2rcJwi/7Nba9vjuHIDYGEi/RH9T0x0QP5RorW8gH8s+BqxT1/uc3l/8AyjxA1h95wexFM6xMH/hO+dhy3TmQrXFcCTYKX9GbSF5/mB72oczRypwcNcEBitReiWGcUPTXnXaRpzUYfyMrvKevZ6tNk1pJkqy+BYoMyr2+wlZzzrOFZ/d+cP2wm2JQAPZjCutmiric5BhYy12W1ujJYeUgPpKVreXXZ4uHwWhWAsw8lJBiOPmTI1bkFIboGy5CbICN6sKDmsI2SLFgU7xAqx7H8loOarFXY3tT1MO8ERvNuT/WH7/yKocGQ1LiIg6aBP4wqSVStVCG1X0lXgIVfGdL7KSm+fL7wMGTPGuJG8dYLYjP5g4Wx3K8RC3jg2IUXOEf9l8woGDUq4g34ljaD5ORxZrYBhgOQFaNUA1T5xlIe1S7lLDQCQh4EWvShJAnOXM8Hv7Pdpq5SFtK4Lp83kZXXdnRe3V91OEi4MslUOitf8XQ0gWb//vgMe+7reJM+tb38uky1lVZwsI0V0qa28YpvPWTicGPtvWXMi4TdqoIZ84fyaZFj/SG7NA4ZQ1U/cMlUgzW6hzHlBpLxGTZTURYlzbBfP1BBhAasTQDRJUThCWEFk7GIf0Pye7MSj47kJ/LtrywQAXYExENY2AKNOHRC9/nw/ yGu7Heqi 6gh0zwP1WKF45kKSQhMBNFHsIweU0zbG9xB4yFYWjHusP/ScyIy/eOgGsz6L4rCh0mRRp70K0uqRkIwyMkvyzG9B7767BBJvXyXjK6tIGPf+9CWDpbB90wX66E+AjVhpS84mshjW0r8C/aMUhR2T0CWt6WYRJ4hz3fia9Gq5ulJcdYQ0rdQj7bBjOxeQcl8m3Iaf4iZk61k2GO3A2ni9lKTF6dYlq8KtSi4gz9xbxzY8SNXMuEuLh3s5+9Gchll512HKlZcfTsDM2rf3xk2JegppC3YRx03vN6rmbGXvBRgFqKh/cJd9S6ggf5pnhM4QmS+ZvYt0R1CD2Qinb5kZloJfAECdhjcVQS9QunWFjnmPSE7thZDY+ea5IkMIwv9jwaMbyEZPVuLIZZTNRh9Q9+FfBzNR5T9jQZyS2Lz3y87nFfOVYxYB65QfJXpCrTjXcEZuFnE5I3ZXX35N3UFF4lFS2Y6v00r5uED0OB4gADr+fkEcEx7yKAjLnz76UynyJYKDOYussigLoNipRov2bLwnWsv+H7TQO5SOQ95TnUZ66+L1OYBkguHZVwl3emWd80MSLGOHfi82iMhqkTbDiZpH5/AHXnu3m1zxvj0GOK6Qgo0N1WuByJwRGv3iTcCZ+6B3qq9G8wbT/2M/DqPb5UFPtJw== 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 | 84 ++++++++++++++++++++++++++-------------- include/linux/kvm_host.h | 5 +++ virt/kvm/kvm_main.c | 5 --- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index b6c0acb2311c..305060518766 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1454,6 +1454,33 @@ 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; + + if (WARN_ON_ONCE(write_fault && memslot_is_readonly(slot))) + return KVM_PFN_ERR_NOSLOT_MASK; + + ret = kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, page, NULL); + if (!ret) { + *writable = write_fault; + 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,25 +1488,26 @@ 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_private = kvm_mem_is_private(kvm, gfn); + bool force_pte = logging_active || is_private || 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; enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_HANDLE_FAULT | KVM_PGTABLE_WALK_SHARED; - if (fault_is_perm) + if (fault_is_perm && !is_private) fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu); write_fault = kvm_is_write_fault(vcpu); exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu); @@ -1510,24 +1538,30 @@ 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_private) { + 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; + } - /* - * logging_active is guaranteed to never be true for VM_PFNMAP - * memslots. - */ - if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) - return -EFAULT; + /* + * logging_active is guaranteed to never be true for VM_PFNMAP + * memslots. + */ + if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) + return -EFAULT; + + vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; + mte_allowed = kvm_vma_mte_allowed(vma); + } if (force_pte) vma_shift = PAGE_SHIFT; @@ -1597,18 +1631,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(). @@ -1616,8 +1645,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_private); 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 39fd6e35c723..415c6274aede 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 Tue Feb 11 12:11:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969540 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 533B3C021A5 for ; Tue, 11 Feb 2025 12:11:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4107F28000A; Tue, 11 Feb 2025 07:11:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 397FC280004; Tue, 11 Feb 2025 07:11:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1EAD728000A; Tue, 11 Feb 2025 07:11:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id F06F7280004 for ; Tue, 11 Feb 2025 07:11:52 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 013858162E for ; Tue, 11 Feb 2025 12:11:51 +0000 (UTC) X-FDA: 83107550064.24.E4763E7 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf09.hostedemail.com (Postfix) with ESMTP id 23AB8140011 for ; Tue, 11 Feb 2025 12:11:49 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iXk65GHb; spf=pass (imf09.hostedemail.com: domain of 3hD6rZwUKCPEmTUUTZhhZeX.Vhfebgnq-ffdoTVd.hkZ@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3hD6rZwUKCPEmTUUTZhhZeX.Vhfebgnq-ffdoTVd.hkZ@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=1739275910; 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=IJ2HgreXKQ9guyRW6q6qFyEzZtqTgMKMejRNrHWMuW4=; b=4NqZH3smcbjcwWuo0qaS/gjn2T+LM3VgF2cmVV9AJGSRcKxi/6eyr2IR899lWvgMIuMNQP PFtSFWqLoAM6Kbgi+r96/TLZFgk8ayYfY1EICbn6KQbfY+ytCe5eWlJWYRLA5sCVdlSnIv cut8mdAbLtMSdF35RQavd7IqutH1518= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275910; a=rsa-sha256; cv=none; b=ycq/LL7MZKGijd/8jyQRrOxsX5rdog/MnHA4pE0+Zeozc2hCee7MGQ2xpz6GNIWgyCkM7i 0bnsKvkhoUDxyxKw/svGfmk6dUE/RW+dFPCdwKxo9cy3+Zf2epwe5ze+RK0VN9PtyWoT5o gRKK7WNjmbYPiqWDc0uAAeVjsmguJO0= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iXk65GHb; spf=pass (imf09.hostedemail.com: domain of 3hD6rZwUKCPEmTUUTZhhZeX.Vhfebgnq-ffdoTVd.hkZ@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3hD6rZwUKCPEmTUUTZhhZeX.Vhfebgnq-ffdoTVd.hkZ@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-4395586f952so1991295e9.2 for ; Tue, 11 Feb 2025 04:11:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275909; x=1739880709; 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=IJ2HgreXKQ9guyRW6q6qFyEzZtqTgMKMejRNrHWMuW4=; b=iXk65GHbSbICzzOEbVyYeUgyjHvlOu3k7YxcPueag5d6PuNDJhcYvaKWd9hSGXBzqh Wo20kXBOoMT6NF2v1CebYr25wpYtTx1xFyB7/kf4fCgHllGY7csxXmfrXHGZoqxeqWTC MG7FDp9xwhOc8myyHejhjqZOfr1X9K29mqH6PFbl+cAoOksGPVchnUb6WZXcq5GOuAfo qfcy3JHXMdtG9xqIAfy5VC5gNc2Nz2YVE20s++trhEN+ZQLpVSHJk5MlM1eWAGIMJvsT m0WYqfl73W9FhPinWrl84C3Pj31/CzaFgXxubJxd5oegzoLeocjfjbqRBUaO7CnRoiUx O1lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275909; x=1739880709; 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=IJ2HgreXKQ9guyRW6q6qFyEzZtqTgMKMejRNrHWMuW4=; b=L8h1j7QJcXdCzIyh4vLY0FFGP9xFcIYAbiC3W9Yskg8Dd4ZpomYL3xI/DlZVlFyjpn RC8nkHwO96C2Aj+P/oc3k3CtAhT/oZW/SD5Szi/neO5WzOQWfQDtoE5xU1YeYha7YrFY /WSm7FohD+zAakGmn007KAFZZ07BdPDUmslqnSTJuENk+Bp85HJg8bn/rFFqwokaaIs8 Y1SQ1b3q2lBerthkAHm0idjl0iWSmrGYCvbfidoSpZTI4+tCEmW8wj2/69aw3kQx2mmP sacYeukKepnaK1UEDrFHc9Mhis0a/HPLFvG3d+qjrzO9cnJfTFa55vMKe4pG8RtGuNMS 4uvg== X-Forwarded-Encrypted: i=1; AJvYcCUoJDb8vJSYiaFZ6OVcmzVgh8LPGRvZZi/OidjLT40RDzHG4xsLvVofKNkLTCl8vs3h4OClwLdx0A==@kvack.org X-Gm-Message-State: AOJu0Yw2MCh2PM3P0F89BZhmBl+zz322xNeDINJRZAsjJZVw3YcgvP0C 5M+jBEecE4OBFiii2rVlFo359EyG1sFdk0TQ/UZbU2OSbYy3pIIunfazvGN9L2DBJJFE7q2oig= = X-Google-Smtp-Source: AGHT+IEj4XD0sGiUgxvZj8X1oAi0zbv38fYpf93jNGmxC+Jnpk8S/pLCTD5RS0c/7wEygEIr3cX4yUmedQ== X-Received: from wmbeq3.prod.google.com ([2002:a05:600c:8483:b0:436:1796:9989]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:a0a:b0:434:a525:7257 with SMTP id 5b1f17b1804b1-439249abea0mr120725365e9.21.1739275908711; Tue, 11 Feb 2025 04:11:48 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:25 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-10-tabba@google.com> Subject: [PATCH v3 09/11] KVM: arm64: Introduce KVM_VM_TYPE_ARM_SW_PROTECTED machine type 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 23AB8140011 X-Rspamd-Server: rspam07 X-Stat-Signature: toe98ksdw88fjuxzxqsjq6cdkahb4gtg X-HE-Tag: 1739275909-119498 X-HE-Meta: U2FsdGVkX1+Lb++PKZH4rDhcu6D+cBBx7jwDtMuAtTOjsLns4uTYlo6t+KSogq86thBRZLDNXGqj/P2L38oseUlnTOUSQfq1MfYTqgvvZUr4EKbXKEUFTd0g8m3jq11lPYnYQAPdmvN5GUrUOLsX0BNv4xYwPvF0YvI2FEoufu/h4UhowAEe6rc4UaIBs+JfGQaVSbuzxx0DIVHCsaI5RaYY4kVeVK3Cw/yiG/ARo6KYcJXxyI/mt5Not8W7oPEmRn0ptrz+mVEoNhuviiBHlCdVyL+x8DKvVyODzvzF+ADeyb9X4IF1v/gB1ilrHGz3t3Fme1S5Kqm9CM9mk94x6rEhUGWK74dwYV6/A+LVLwwKdXMyxWXJDjPgANK/bvzZ+fC1RQJOHvW4R5+OIN502+Tx4wEe8VOuUR9VmdoH8sKdkFLIsd4hRwFnsJhQEwNNTQMX5kB0mL8yFYshPWjn+DnjUdqWc9ERCe8YrhlADkUSfBOjXlxXFh/0HVDIHujrafj9SK1yAsweoEZ+IH93OyVSQYUmVETvaQnp/Nz3HV7Nj8SciQTHOaPslMGpDcvV3LwueQmHTJS/NFXcQD2bnK6y9W7UwV1yl5vTszWYQIJMwsbdqPqlnkUTX6UjxKzjt46wue91VT99W/DjwFwz+Yms4RCCSDDxCfaQmqwo2ycV7r7qvG2s3KBc2fvnTK+WF5aAQ4ahJ/bdWzLCSxWdMAm1nl+PgF7jA/s5UuPxX784iQ3vlLA0MhsP7GhKGg4tCt8VqFKaPjSFIV09Lof5cIdh6ey0hfUz0Cf6MEGDKzvXdwXCfzTAb5oNAKc4I17piDXMNEJrKg9FDYxgXT466wibI73w1/DdmLdT0lkyDfg3RivdKN5KWysykSberVHbxMfpPUCsEqy/XwNRi5TUIicadPMQz+IX+0RpDfFBXq6W0NkL6K+ICVQWE/5J6Da90fi2FR5EgZOthNFqUgt x/mEGXGN abol0QUv72IzZi5IsvKvuDxGPQwCIVHXU9FpsFVfKkJVYHVwFBDMX42A1vNjtYXFIv7BxZ0qU76iaIGohmIXs8tdHpOQotS8FyPUKPV9iCMebyvBEBU24903pVPRln0zqVRaZT8GRIhqlJjywXFNT9gdDnRAPn9rAXsxS8fcextWzwxUxzH6QSV8ZGECzoGPRnHUHx3lYgzckn8BRzQrm1v7K/cBcAoNUKXq5Dz1hgP/h3l+S6UtLQ5TmeyRO5Z+nICV4n1FczhhEa5oKcb7eHlvLf9kBEMrYDo+LWtVXdmKvovJgrs0LFkZ4Fk21e35fFE0wo6Wl/SjaGFF1gQN45jRvFBa32Q8HkdjX9KKwY9csdHhraf1PotnBGgAiiNUWWnHnL9HPCFyPLFpYA2DXwYyO4XtJx5+O3FW0k38/5s1+8fHLB0UKNLRBcYHjbM9x4QMMJAsCW+pPho2KaD/CujSR3Tqb+1EwIPRGwflGrZ7USWKlHq5EuvtRiHoIbzd5GxBXaWr8u2C7gUMg/34PDpHcFcBHlW8MXFoQeQucOzqnlOUSLwId0yWwEy9bGU0uk8im1shQ9Ve1ocmmajIkDqGZ9zPvViQct4DUV2+2QRuh41yywPO1/yCLrowpPUWNmMSL6XEjRdUvw0+QywKM6i67XQ== 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: Introduce a new virtual machine type, KVM_VM_TYPE_ARM_SW_PROTECTED, to serve as a development and testing vehicle for Confidential (CoCo) VMs, similar to the x86 KVM_X86_SW_PROTECTED_VM type. Initially, this is used to test guest_memfd without needing any underlying protection. Similar to the x86 type, this is currently only for development and testing. Do not use KVM_VM_TYPE_ARM_SW_PROTECTED for "real" VMs, and especially not in production. The behavior and effective ABI for software-protected VMs is unstable. Signed-off-by: Fuad Tabba --- Documentation/virt/kvm/api.rst | 5 +++++ arch/arm64/include/asm/kvm_host.h | 10 ++++++++++ arch/arm64/kvm/arm.c | 5 +++++ arch/arm64/kvm/mmu.c | 3 --- include/uapi/linux/kvm.h | 6 ++++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index 2b52eb77e29c..0fccee4feee7 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -214,6 +214,11 @@ exposed by the guest CPUs in ID_AA64MMFR0_EL1[PARange]. It only affects size of the address translated by the stage2 level (guest physical to host physical address translations). +KVM_VM_TYPE_ARM_SW_PROTECTED is currently only for development and testing of +confidential VMs without having underlying support. Do not use +KVM_VM_TYPE_ARM_SW_PROTECTED for "real" VMs, and especially not in production. +The behavior and effective ABI for software-protected VMs is unstable. + 4.3 KVM_GET_MSR_INDEX_LIST, KVM_GET_MSR_FEATURE_INDEX_LIST ---------------------------------------------------------- diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 7cfa024de4e3..a4276d56f54d 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -383,6 +383,8 @@ struct kvm_arch { * the associated pKVM instance in the hypervisor. */ struct kvm_protected_vm pkvm; + + unsigned long vm_type; }; struct kvm_vcpu_fault_info { @@ -1555,4 +1557,12 @@ 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)) +#define kvm_arch_has_private_mem(kvm) \ + (IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) && \ + ((kvm)->arch.vm_type & KVM_VM_TYPE_ARM_SW_PROTECTED)) + +#define kvm_arch_gmem_supports_shared_mem(kvm) \ + (IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) && \ + ((kvm)->arch.vm_type & KVM_VM_TYPE_ARM_SW_PROTECTED)) + #endif /* __ARM64_KVM_HOST_H__ */ diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 071a7d75be68..a2066db52ada 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -146,6 +146,9 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) { int ret; + if (type & ~KVM_VM_TYPE_MASK) + return -EINVAL; + mutex_init(&kvm->arch.config_lock); #ifdef CONFIG_LOCKDEP @@ -187,6 +190,8 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) bitmap_zero(kvm->arch.vcpu_features, KVM_VCPU_MAX_FEATURES); + kvm->arch.vm_type = type; + return 0; err_free_cpumask: diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 305060518766..b89649d31127 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -882,9 +882,6 @@ static int kvm_init_ipa_range(struct kvm_s2_mmu *mmu, unsigned long type) u64 mmfr0, mmfr1; u32 phys_shift; - if (type & ~KVM_VM_TYPE_ARM_IPA_SIZE_MASK) - return -EINVAL; - phys_shift = KVM_VM_TYPE_ARM_IPA_SIZE(type); if (is_protected_kvm_enabled()) { phys_shift = kvm_ipa_limit; diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 117937a895da..f155d3781e08 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -652,6 +652,12 @@ struct kvm_enable_cap { #define KVM_VM_TYPE_ARM_IPA_SIZE_MASK 0xffULL #define KVM_VM_TYPE_ARM_IPA_SIZE(x) \ ((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK) + +#define KVM_VM_TYPE_ARM_SW_PROTECTED (1UL << 9) + +#define KVM_VM_TYPE_MASK (KVM_VM_TYPE_ARM_IPA_SIZE_MASK | \ + KVM_VM_TYPE_ARM_SW_PROTECTED) + /* * ioctls for /dev/kvm fds: */ From patchwork Tue Feb 11 12:11:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969543 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 24E9EC021A1 for ; Tue, 11 Feb 2025 12:12:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A774928000D; Tue, 11 Feb 2025 07:12:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A00FF28000C; Tue, 11 Feb 2025 07:12:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A12C28000D; Tue, 11 Feb 2025 07:12:53 -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 678CE28000C for ; Tue, 11 Feb 2025 07:12:53 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6CA35121890 for ; Tue, 11 Feb 2025 12:11:54 +0000 (UTC) X-FDA: 83107550148.01.6315F13 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf11.hostedemail.com (Postfix) with ESMTP id 9937840006 for ; Tue, 11 Feb 2025 12:11:52 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=cWHxgGlN; spf=pass (imf11.hostedemail.com: domain of 3hz6rZwUKCPQpWXXWckkcha.Ykihejqt-iigrWYg.knc@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3hz6rZwUKCPQpWXXWckkcha.Ykihejqt-iigrWYg.knc@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=1739275912; 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=9SmIo8QGaSGW4O/nm3ipq/SJW3NddPOH9GGmfIatxcE=; b=7TPsfCprBUZsLRamx1eJP+XD1mHIcSytMFJjb6SGk3Sx6gx7QL//9iHKUg1EK5OMfsshsa /F+37dSNlfXnxWDoNwtEox4su8OzmSuUo/z7a0eWDbK3FAgA9qMEUIAU5pATHnutQ5rDsm /fD9IMhYzMmN8UcP0+/h+nS6HlcHQD0= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=cWHxgGlN; spf=pass (imf11.hostedemail.com: domain of 3hz6rZwUKCPQpWXXWckkcha.Ykihejqt-iigrWYg.knc@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3hz6rZwUKCPQpWXXWckkcha.Ykihejqt-iigrWYg.knc@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275912; a=rsa-sha256; cv=none; b=F6wNRkGoa27RLYE4sbPH4kbERMNyEQequKFHlzq0Xm690BC8J89ac3gRU/nHM89d9QTPXP RdamQUd2JsxkmCYDt+sKteQCfE8ktBfUR4oE7GcrZFaIvDpxqRlsIVmcAY7+T3SArUqy8e nvYEgjBEL2U3oNFBen8WOIsryxbBiaI= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-38dd0265d97so429f8f.0 for ; Tue, 11 Feb 2025 04:11:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275911; x=1739880711; 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=9SmIo8QGaSGW4O/nm3ipq/SJW3NddPOH9GGmfIatxcE=; b=cWHxgGlN/n1OqRGC1c6HsPiWQNV/SJ590DWqzLomY8rdEprrdZZcsQjeR+mBG6kBEP a0UQkeMgFDmQCL8MOMu8Y6dLzeKensffHqV/bdPSZuXHhkSZLrYNgHxmMsOWNZsTgAUE n8ZxJUJxkOa7d4HbsmN7RgVzlV7NA6fjoRsFiVehGuKmgFpRgwuItM0F/+EAIY/EOmDr Whnk9qqmDMFkrXQC9RJoLNnTV8SPjJOvEzKj3vfub8spKIogJoIJt4LN5SxnV1w1b0Lp VhRtesx1s2egQklPk3xLCe+JLmWWKuGdUQy6jVTiJ7/LC8prg9ehI10gM0vYrmKSONXc lnmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275911; x=1739880711; 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=9SmIo8QGaSGW4O/nm3ipq/SJW3NddPOH9GGmfIatxcE=; b=WfVspbZbm6mTG3TqYt0DQX7kYd3WlybWEwkS3yfgMjDOQFzSyEcn66OZBlKSs80piZ LT5ATroqOFnqSUrma3wfBnvSNVPbzE7rXhR9Qv3YypgK7DO0AiAOm3YjFy/EVr2nqYb7 BtW3D3cgFMI4/3RaWLoLftZ01Urgi/0YlhcZa4oARQpdRGPUXlcXqU9A7mV7GWqHOGE5 b6ifrecc212rFZPMLFJH/LhTcYJAujs/gnv6kuZ+Qnpz//Ctj9NuvP6borPEglwEgV0u Lr1X4kCMvnt4pgulSCfvCCar11bVqlWmrxNzOgWAGu7hoTFKnrMVE3kn9CtDdRs7zsfn +z7w== X-Forwarded-Encrypted: i=1; AJvYcCW4SbH69ACLa6MLMqf4IFVoPbqKoTonQrLjLRTo/1lQBzYhGbQGFhqZdgciu/ld9Fe06IX+4cYbtg==@kvack.org X-Gm-Message-State: AOJu0Yxefw9rbfjzEpo0wB4k9K9FcaUyFcC1ywVoJIg8oUsn32tzBnpJ c60tgg7VhQYl2RAudE5N3CF1cY7UxjQEvWFe6/cdiHS1BEf/aivtCtevI4cGvKCj6a7AZVCTLw= = X-Google-Smtp-Source: AGHT+IH0xuxWTGEs9x087sQRaUuSBVW+q25VqdZB2aOt6dDiT4Tp+EMY0I0pqw4sShmqWhjrTgxeK/obMw== X-Received: from wmbay40.prod.google.com ([2002:a05:600c:1e28:b0:439:3e30:957a]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:47c3:0:b0:38d:e166:8dc2 with SMTP id ffacd0b85a97d-38de1669178mr6366905f8f.16.1739275911124; Tue, 11 Feb 2025 04:11:51 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:26 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-11-tabba@google.com> Subject: [PATCH v3 10/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspamd-Queue-Id: 9937840006 X-Stat-Signature: 4u3bxuiucucf34kizejh5isp9o35zain X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1739275912-732463 X-HE-Meta: U2FsdGVkX18m+DV6M8MBsI+T8nw98igltiMGKK5hi16SPVnZnLpZC9dyXKTKn5lk+r06fBiKmtJAxEJPBseKViHt3gp547uxefjsJ4JrSUzJLoVj+rHM8zPN7AWTb4Fe/7U/+CWT3X8dt3JmbhCPfaEeNdmGEAs0rlLFxH66Jy/3WFlImEwoEmF0M8fcVI5uZR7BI8wyjNxmloGaLWryc+qoiq4vLJwk6kuLLlVEHovAUL5+ooKVgnhMY2dx1I3aXnFBPm/zoKKCbmkeZ2BihieCwzCQkXJhJlzIQXUdll2ojmThgF3E8a5SU4hbt2sKkAagPLrCL3ZM2wX3u/sjHinpmbAf1z22nDsh+CHLtQSxQw3sNfLRjw1Sl3mBD+bUXkrl8Be+C8Z827earvdQnyhSWkWNEzGT+dSjnHU0SY9FtWhoVz8wnq9uJO6z4WFRA0y62tY6iHwgb6MGxwm8zzRNWJX6rKJjeERIVOto0xf1sQyh1q6M0Z6uG/hWusoabrWJNByosAzp8i/hQjVoWQlVz+5VG8Gk59rbPVfeantQJUk/pYpsZxOjZ3WznbQFiDrqbE3rL0BwCYxyV2UoRyKA6QcXNNn80TkwOnufv/rfS8306zWmQz3AYYDDR0RovouqpNvuYW2iCl9RG0o7N7hXoFJNthRdv1Zgk//rnsC5CiJ5S07Lsu7b9e8811xjcCzhTYuy4iK2S1IO5n2Lgwn6g+ErOMzhAx3f1w1iNH7hvJgIKWNN87uEHfwArHM5LNSDp5k3dmSYeDzFB0bti2AtykzkcaZkY67nqSe23qTmOs3eyLywuL0AEbERVQQgJr8V381D2Y5PDqVjrToNiWtiQGVWDUWMWoEq4B7QSM8nrAf/nVnODbIiYr6ADQEpKYcvnY3WQjx0Nuuush4AVMDCQ+D38jgyD9Q+rUivGwwwnre66dq6vXskCXAWXOi59o+guVUu8Lr6jy6TgCu OfpBCNVA JUHVutv1WQRCjnBqAagpUj6rFg5zqqXJn+JPky1nQXCBQiLpZcWkA3HTNWEnl6mBUu2Lx0d0OGnWOr2gUxCdyYKox8QWJJkXAny5bSaK/WOoYndR2c82SyAmb7p9f7cHTL4dsvLxuz/WAw5NQHwH5xeipm3BxahtxXwClh585KUik56FJ0t6oCca9XiFBx4e/m5jn/ICNgX198XDKlBSYRjpGxOaJrl6cdbKKCtbnsiNr9MBm6ZcgGI9IDAUdMaU8YR5SFCv2TzN8NLJ5/NHaEEyiEJPYdh5Sk8+kVvJhYF8x2/avWVPiyfu6cRZb/tLCwOniQEYvkjECulBS8lmMhyqvTCWsAhZJWmiH9HZUcEaKkVcLshcPbOIkYJkjodFseOvsrE6POZatxHKjfK9g0aPhoXKV+oYBv6OeoyIHSWLb0IyANw3Yh1YKelXkHPVPE3ROlyxQXmeoH0H2D3SU8pvpguNbVsZjd1CjONMzcojXaMQmc2WddpGqZdAWO0tFTQor/rOc6u8Fe4gFeeA51SwLbqbA9cV9sD6V1E7MXfLZ8jcY1UXEqW7OAv9OCqZ7cuDEQpcPX9wsqheQbat0VBmWd9j3NSSJ7TPy5FAu6ePlYkfmN/LNqNraOEsdBjYS1rtgAmpkvjCTjWSOY5sjn9Q3XA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000418, 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, which would only apply to VMs with the type KVM_VM_TYPE_ARM_SW_PROTECTED. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/Kconfig | 1 + 1 file changed, 1 insertion(+) 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 Tue Feb 11 12:11:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13969541 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 72188C021A6 for ; Tue, 11 Feb 2025 12:11:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 65B6928000B; Tue, 11 Feb 2025 07:11:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E304280004; Tue, 11 Feb 2025 07:11:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E5C128000B; Tue, 11 Feb 2025 07:11:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 1C0CD280004 for ; Tue, 11 Feb 2025 07:11:57 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C6036A1558 for ; Tue, 11 Feb 2025 12:11:56 +0000 (UTC) X-FDA: 83107550232.19.253E5B7 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf22.hostedemail.com (Postfix) with ESMTP id F37DFC000A for ; Tue, 11 Feb 2025 12:11:54 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=PSj7ImIG; spf=pass (imf22.hostedemail.com: domain of 3iT6rZwUKCPYrYZZYemmejc.amkjglsv-kkitYai.mpe@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3iT6rZwUKCPYrYZZYemmejc.amkjglsv-kkitYai.mpe@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=1739275915; 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=0Z6E+H+CVdcl32MPqQH2IMjpdY1rfB5MHlrVNopXX+Y=; b=IFGSQGI8r2CRi9CWbzK9nBd5vpK7lB6D0teKObksTLjYICp/Nespeb/9hv7kUBK1CgIwuw 4KlvX0B6IBtkHWoMlxTUN9abZkdPrGt02Y8lFcnFoi9O9KvxYIfWqvPIEYmfj3IsmUbslq ar1m3jLz8ljdZ66j8ybzyQ9Km2v63GM= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=PSj7ImIG; spf=pass (imf22.hostedemail.com: domain of 3iT6rZwUKCPYrYZZYemmejc.amkjglsv-kkitYai.mpe@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3iT6rZwUKCPYrYZZYemmejc.amkjglsv-kkitYai.mpe@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739275915; a=rsa-sha256; cv=none; b=Uz6E+12KfOAN05vthZ0hACiioja1tSygmlOr917lcq6C6HS7UCFScMTrQBhuqiUU6k/zFq h7oW1VYDlkTF4KkEl7Srn0Yh4q0wVAdt3frsW/FRMjUl3FPEirCLdrGmI7e4wiQqQ54DJM x8cvUrc3ZAyC9CDecoKjLORR7TgiOSA= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4393e89e910so13395695e9.0 for ; Tue, 11 Feb 2025 04:11:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739275913; x=1739880713; 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=0Z6E+H+CVdcl32MPqQH2IMjpdY1rfB5MHlrVNopXX+Y=; b=PSj7ImIGblVYOsFR21Rcj+WQecA6LX3BsiuOX2GP/g6VeXsA3SCy8aUFc9Tob3EkSN dTB5Tt30THQrvPoOU7rOHyDSYncij7Bf0dj8VOUevwKnIgg7cPHYRFpIf73CRv0lfaOV m1UHhpk81T+nZ/uM8BPjsYONvm1unewx8LGXOjgsjnZTNrhaT7ho3tr+pCgwGWlnKqWh /CAJHiYv/qVtn8/u3uY3cz4Czl41wFT5DEg71qPmqMCO23YnIFCe8vW6t2JqzOWUgqsQ BkCk6etlA92jAUTDslmUVeyQCrBlN7AuR8zQZpwDpPK/ejkB/BiQ4+0B+NbhDkAj9t+n s+aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739275913; x=1739880713; 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=0Z6E+H+CVdcl32MPqQH2IMjpdY1rfB5MHlrVNopXX+Y=; b=xKbbgFJWFzS3H7pWvhluzjXLdQzxaQtp+2OuCHYDTzvk7VoqxVi63iTMJVFdKXejbI ug8p+AaIPcPcYpAwHt/WEbFbKYKSHFy1t0MPTGb6DxR0lOZclEoGGCuU4Op4IkeHipkw X/u9P0aEdDMBOWGigqRSSW8C1yKMdrxa6GjS3SwABCUF4UCW9mUhVPrGufi5hB7XxN4x vEiQIsoA9ARW+Z7SVKX4X6rUXdENn7EY4A5X+H4iieaxtgrRYkc2XVwkt0etUQXzOShb aU7LaxVR2UZT2WtxMrWzAEpwyjpa1N4PNxJplju2gcVJ5Eab+7Nqk/wxucWBO2EhsOsF WATg== X-Forwarded-Encrypted: i=1; AJvYcCXZMVb9kgubQ1FLteWONcF6Kjtqk6NtBDUsGP3XmRwd4o5vhegdvFP1OR/fBYoPJaJyTZqEm8Sdmw==@kvack.org X-Gm-Message-State: AOJu0YxhDiZkvBQ/ucL5VT4TvtRmsYvUfiMc/D2Drwcefm/TuixsBjq3 XDs5F/HGR4Co1wXWS5e0YBxVnVygNbDp/t1qOr5JW1pMV62zBsr5PfHSL7k66Dqrz3Gw36iGyw= = X-Google-Smtp-Source: AGHT+IFt5+7gpCuP4nql5X9TS6iRdHHoSwQcx2BpSBXHd9t1p6f34BIlOh4b2HrfUl+cmCslb38pfVfhKw== X-Received: from wmbea8.prod.google.com ([2002:a05:600c:6748:b0:439:42cb:132d]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c8c:b0:434:a468:4a57 with SMTP id 5b1f17b1804b1-439249ca925mr120732765e9.26.1739275913615; Tue, 11 Feb 2025 04:11:53 -0800 (PST) Date: Tue, 11 Feb 2025 12:11:27 +0000 In-Reply-To: <20250211121128.703390-1-tabba@google.com> Mime-Version: 1.0 References: <20250211121128.703390-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250211121128.703390-12-tabba@google.com> Subject: [PATCH v3 11/11] 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, yu.c.zhang@linux.intel.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, tabba@google.com X-Rspam-User: X-Stat-Signature: nf5oo1a74a39x85b93tdhgd16icfb974 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: F37DFC000A X-HE-Tag: 1739275914-430874 X-HE-Meta: U2FsdGVkX1+bdqavD9UVRGBzaSPpu7/9RKSf4pV2zUiq6JDg92lIVZrg3lYnuoaXJAoN6rSZ0xs8ZNkj32Nsenl93wuXtGNIpBU+6xTwEFBtndhHEtjZb8hZ5YV61cby+9rl/cWsZiEtCIfIDXPPN9cYy3XLYeANmtMObXeNTVAxIRrNzj3V3RFb6SEnx9CG8rGocKEV3UlJwV9p2xxA/kgEU/XjDHPXi0O+ps6nWCdNIbQXfEQTIErQSu4/BLLMu7mnJFXB88E46Iy1N21hUaR6F0VeY9sc5bxmd8sTqbyNNuE1DnJYq1btzYpkXBGBMyEPQ1hyzb82CeD70Yw3/6b10DoWvNajYvUQbiDy8i5QJ3shSDBa3+N0mMRpBNEhTK91fJZj8NyNH6VrCdqvpq1wY/SzUQ/HPsjGz0Kjfcjjw6DBDQUW3zTPbNy/z77/KId7HL7YODcfh5ZnUt8b1BHnAjVgqxayvpcMd/F1gETmYuqADmWw+sBwQ5CFaceu2SbAoDmPlvBuMQSTCV+Yzny5jeVzN01lmFGwKxYDY1c/HLq/xK07M+jZNNon35Ii25mxAhBZI/h3jchLA8fIiaUtBK/AFDOKWxeRJI8/ovv3BJEyYkCQMX72GfCkyrKwntLZqLXGCqHdp1tmvqrDWazQPA3JPL4ANxmWKtHyNUGiGQaraP1I1vngkTO6t+YpLd5TzeslvAiWzzSvO9Da69W8Bt9jhvG2QGckTsv1HFPSllhbsfrfFVBfqTHhlM0xIKPkNYr6QDAKyi321CwFa/8NaNDHeDLzJNuHisqkhyzjp19h2OzP+QP3lr316opmE9d0SlBhPKJUgmYu8QW9sgmHalexXtDUqSC1omMTy4sXZl6y9F+HiPKPHOSoIO2q8LxZQzf7syeSlGDA2FFU49a/vIILHWnyZhNRbBiVXyUFKkVNOl5ABk1snIifFUgfu5IFbVCFA1LQXDysrmz JsVti5AA CKTZJizt3dyDvN3dBrHFcuqQ733tedIXqSlFlQNtR49AuduA6lV7fr5LUOQJA7zUAJAxVDl1U+r0qVOh++GQM8Sq1binUFi7rCUbcpYvuKKiW6BvAJX/Do6g/Yr/lGGX1TxHYNizOKQFGgA24qVpLvRjOt0LD5Wow4xCHyF0Gjv/uoTRtnMJSUqEwFGngkVKsBi6o2YH7yXamxUEhj/o1q2U1vlcFynh4crPfAKsPjwrpe9IrItyCA4/bUt0BiR9AUktw22/ToYwI+0fzDScRFYQt7wokdDauzsAjH13pAvwZSlfaOLA3au9Z2e756IJzzbFFrewFyqY4X3KezjbXfL8hEZ/nAi1Y+eTLqCmga1hhar3hSa40d18IinM+PGUQhu0Z3+qLaF9YKMWCPfTO4ZudAwVbLZvPJ9RfgeknpivwIUNZeQrAoouuzypGD1o9zq0MeE4dzneKnMLDTe0dYWk5H3/nKwKBprRig6R5AKx7p7rz4sxSnyWzpGI6pBR8Bohsz3jhPTrKAGG35GU04ApCN/MtEicBedLkBbPh9v/GhEO5lC8SPBJA36TC07J9s1kj+LkZFTbvBFVs6CppSG1oJ6BhdimwH7ydLy5+Fyht6IsePTmnPad7b6exPtYXBn18C6ErqaC5BtTmc8P4cBplyQ== 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 +++++++++++++++++-- tools/testing/selftests/kvm/lib/kvm_util.c | 3 +- 3 files changed, 71 insertions(+), 8 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..f1e89f72b89f 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,30 @@ 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 +#ifdef __aarch64__ + return KVM_VM_TYPE_ARM_SW_PROTECTED; +#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 +237,26 @@ 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[]) +{ + test_vm_type(VM_TYPE_DEFAULT, false); + + if (kvm_has_cap(KVM_CAP_GMEM_SHARED_MEM)) + test_vm_type(get_shared_type(), true); + + return 0; } diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 33fefeb3ca44..17aed505746b 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -347,9 +347,8 @@ struct kvm_vm *____vm_create(struct vm_shape shape) } #ifdef __aarch64__ - TEST_ASSERT(!vm->type, "ARM doesn't support test-provided types"); if (vm->pa_bits != 40) - vm->type = KVM_VM_TYPE_ARM_IPA_SIZE(vm->pa_bits); + vm->type |= KVM_VM_TYPE_ARM_IPA_SIZE(vm->pa_bits); #endif vm_open(vm);