From patchwork Tue Mar 18 16:18:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 14021236 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 4F9ACC28B2F for ; Tue, 18 Mar 2025 16:18:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 58555280005; Tue, 18 Mar 2025 12:18:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5096D280001; Tue, 18 Mar 2025 12:18:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D154280005; Tue, 18 Mar 2025 12:18:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 21D52280001 for ; Tue, 18 Mar 2025 12:18:29 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 4E22F1CC877 for ; Tue, 18 Mar 2025 16:18:30 +0000 (UTC) X-FDA: 83235179580.30.A929C74 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf18.hostedemail.com (Postfix) with ESMTP id 6BAAB1C0011 for ; Tue, 18 Mar 2025 16:18:28 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=S+UTRn8z; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf18.hostedemail.com: domain of 30pzZZwUKCLcqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=30pzZZwUKCLcqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742314708; 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=RUG6NztbLFLzDS9xNltsNQX8q/i/r4KDCgmt5mBPitc=; b=llJoZD6FqJ0zunygiBgzBjzNbT+c4c3EGKdMJlT6P52xPWE/heCVUxcq7vAsMGx8Rt5nq/ pKfTIhTJaEcE7wJclPBQ2F7G6EI8cjW0ghR1QYVEmQYk2Gq+7PmwAAmA/6+1jxSAPj7UP+ BG+lwX2+bbNougUZLXE97UAnnsleGCE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314708; a=rsa-sha256; cv=none; b=j5FAKhHsl1CfppLqtb2a9bD1EzaYsOlX5TT1RPaK6g6FHTkd516oVz2mdaAbmMEe8XzSU1 H1Bktk2hzBEMkrk9Xk9TIgpMkgu/sGIMSfeqEAbYwhatufduDR0d41pJRLCjkteNzG1dbp iWlve7B2HUj/l4LpkkEulJF543Byty4= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=S+UTRn8z; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf18.hostedemail.com: domain of 30pzZZwUKCLcqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=30pzZZwUKCLcqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43943bd1409so23508075e9.3 for ; Tue, 18 Mar 2025 09:18:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314707; x=1742919507; 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=RUG6NztbLFLzDS9xNltsNQX8q/i/r4KDCgmt5mBPitc=; b=S+UTRn8z2ySn0iSmr6gwego8k+K4DefxNU5tGXmJobpTVga9tqJVJYWr6BrLsJzRKI JeJw9XPg7Ze7BYqxsQ+wqN5X2OM+ETiAjm57/sNiimAwZDilKNf38rslxzTqdSxZH8t2 utN3r8u8uBLfvgXiCWNtCduG1ZVtkcOWsaOOpB5V7Pg88aA9bOrUkv9M+gDBnRas3oks uejPskOaNYsLzLTEravdRvCeQcUFyLnceb+w71g2RIj5mO2qT1/ohkK9C7wTHvhjlKqG CjGtCbtNWiU1zBtp2MCN8WOJwFTuoWuHlRjMS4T2pEjufiqDhHRgTLvwCXy+gxlhZLis A7aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314707; x=1742919507; 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=RUG6NztbLFLzDS9xNltsNQX8q/i/r4KDCgmt5mBPitc=; b=JqxDZnaDQ/zIkmpY9F1mrU6GQ+L/Q5d8QVzyMY91J1EtLT5pDFQHhOpHG/6RWtu6r2 Zb9fiT1rnsXIec4VvP47mrko2yCEeUfM1esJ+tpPjpNnCweCL/Q/Z1qZ7emhMvVsuZ11 YLHABkNQC1WLrajLEN/P2t4nJs02KQee7gUkM+b7ALT4+dgdMhL6THK3firyOJyH4UFI Ha1mQFLIbAdikywEPIkiUn1qbh+7P7XNk5pTAFt6ffN1ohvhtB8hEx58CTXt+xyFaN/V i5r0nmG7HT4+ggjYs0e7JiJ/oYAuwcO9Isba+RG/Xo7UrCInlMg9MLOO0dhhEMxRyWo3 hm5A== X-Forwarded-Encrypted: i=1; AJvYcCXi8ufgOZmqxUj/1vIAeAdzseGBWb4o/jiGnpum7+M+ES9QT3QFAEWVELjIOXwAp2wUoKxEGrqFwQ==@kvack.org X-Gm-Message-State: AOJu0YzgWRCXR2OQz2Pyu4OPaTsfI4HBoBRXVnCa+DGwMVFuVBpuGQ0S E7Y6ibO3g6aoJyDg2K1GXe2AZeC1hl5DJKoMtpMQ46M9gtIGrOEY0qNkFhr1DxWjCddgu1aFqQ= = X-Google-Smtp-Source: AGHT+IGA4buFW8D/i7of1JJ/CaW7suQpBbUbSZuYhIOMvxS1NT2RYw+WVnJcFCNBlIIk3X2ZUVPHPmOwRw== X-Received: from wmgg28.prod.google.com ([2002:a05:600d:1c:b0:43c:fcbd:f2eb]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:468e:b0:43c:f81d:f with SMTP id 5b1f17b1804b1-43d3b986350mr25234125e9.8.1742314706944; Tue, 18 Mar 2025 09:18:26 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:15 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-2-tabba@google.com> Subject: [PATCH v7 1/9] mm: Consolidate freeing of typed folios on final folio_put() From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 6BAAB1C0011 X-Stat-Signature: umbkks7e498kb4z6enpyk9m83dqooty8 X-HE-Tag: 1742314708-466372 X-HE-Meta: U2FsdGVkX19c8tVcv/kzo2h54fslJhXimmtQgpRoJt40OcjMd8K+8pR9zdczdmdpf7c8xyvWpRP5xoc2+rlAOMPL9fHib/jC3z+F6ovPRAdknKg7Kn3u0Beg/4liSSRyIWDm8vJ9q21HVCrxwtF2GelRwkPY2mQGTVbTts1uSCzWZ0pHqj3yL1LoXXcyA3pdxu9xeAH+AQy9m9EkcVGoVRp43eW7ecHEE6MZTmnpCOU10oAmCikJGqKrzgpj1NDshUsqwR526hqwxp93jrwmuYFatgxTHmX8CEuqjBK/z+gZPK7oK1103/4dY5YWiYUPk5/Kt60qtCqCLdENYi2aiD4dgsaH5+2l3PTwsuS+krr6PabgBq2VXXT4hew3kKc2tAYUz5vCuj4UjIWYc0dSmEtIFbgk3dEtB8l67wXQYFGaTVBAgO906ba2hL3DACFUO3POBLy4tDOQqEQhD8S8zFYj6htoWh2X9SqI8/GXAZfPyZeb8djXqDybCPDhsZsQjOylN5/465XTp63gU4E1cA4b5Pg5je9JDqPwgmqWAJu1RdJqys9ydS7tmkyQqXV02hTJVFAisMg7O1fZAKF32cTtMVRkV5a9LcwR038rUeGtF+Ku+QZM7+mHwLLE2ouqcKIhpeXjFFdTlvH8a4+RkOImT7FOGBDKnm7TR7AYxpUeb08M/zlROzG9IpcHhqpiAFpLJTA+4h2hWgJmNvNaR41Pma4xBtJIqEAWUPEMVfDwR/R3PThdH4gdeEF+VXPsmPJiZR4jFM0ozJJl7pyrnrXss6+GpZQMJmZfQqh3qevbidq33Pa06RXhIedqAEmqbb2DiFZDfVPwu/85szmev3IQJZ3Ex2WYGhWSojrkqVLK8Gm3UpvwBuLMJgOlqxgf5GBeep/vAHVObJ5AzBakRu/8x5dBWjvSaZOsUHC+rFdUvIgLZ1xMhrH7jPdNDI/7ZJcrunzx+5oeL0MNv7c z73YVvss lHU6IxOz6biDxP6eLl0x9FDgbfk1DJY+RaCaoCmZYEm+A1RadT3Cb19sucHHzh6Ocy+hm/Bh/zthJSw3ABQMPXaFrHJeBGvPtM+X9SFrMqWt5jXBr92sjhvTKXdJMNBwIoX+rR5KcLxkfm0A74PJKjqpuEDqwN9nC/CFbNwnNC+ISyZkr7T7nGu+GRjpUzpqsHP7zob3PYN9bAQGCLUweffoQEmgwUWHqX334OEnOBFl7I/sXSk+42e7Y1wxySQY1/x5adiGUl3RtlAE/iBfss8d1qixEHgPksJ7WO4C2KYO+G8vhG/H0DBXrIh0EPYd0JqXvLXVgnjrWII5go25JDyiDrbGxQ5u4OBgw3DYy1qmjt/AV9rp/YzoHYer7owBmTHSzx/CShEPyR5GHdPGGC81vqrmADSsO5FiUoczAsbAri4FNRxOqif03mxHoOlaOl75Ck2jRV9uLoIjPyDI6oc0EcpXJQSkLh1dUbALIuljYrmhvW4fI0/VICzLe2adblQeb2aCxN06/gusGuxHk30p54ITj89MpI0Y7KR2wHBSR0UpjWVWuMXqQjY62WpPriCqCSZZqnm7o5lMePwh6MiyZJelXU73bOjMbFXKr9Ek8jlar8xaM0fslOpcIDZGKeWdQsD4xiPYsNpXftc5nnVPdvnCEXORw4GRUN9NrLVZB1N0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Some folio types, such as hugetlb, handle freeing their own folios. Moreover, guest_memfd will require being notified once a folio's reference count reaches 0 to facilitate shared to private folio conversion, without the folio actually being freed at that point. As a first step towards that, this patch consolidates freeing folios that have a type. The first user is hugetlb folios. Later in this patch series, guest_memfd will become the second user of this. Suggested-by: David Hildenbrand Acked-by: Vlastimil Babka Acked-by: David Hildenbrand Signed-off-by: Fuad Tabba --- include/linux/page-flags.h | 15 +++++++++++++++ mm/swap.c | 23 ++++++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 36d283552f80..6dc2494bd002 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -953,6 +953,21 @@ static inline bool page_has_type(const struct page *page) return page_mapcount_is_type(data_race(page->page_type)); } +static inline int page_get_type(const struct page *page) +{ + return page->page_type >> 24; +} + +static inline bool folio_has_type(const struct folio *folio) +{ + return page_has_type(&folio->page); +} + +static inline int folio_get_type(const struct folio *folio) +{ + return page_get_type(&folio->page); +} + #define FOLIO_TYPE_OPS(lname, fname) \ static __always_inline bool folio_test_##fname(const struct folio *folio) \ { \ diff --git a/mm/swap.c b/mm/swap.c index fc8281ef4241..47bc1bb919cc 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -94,6 +94,19 @@ static void page_cache_release(struct folio *folio) unlock_page_lruvec_irqrestore(lruvec, flags); } +static void free_typed_folio(struct folio *folio) +{ + switch (folio_get_type(folio)) { +#ifdef CONFIG_HUGETLBFS + case PGTY_hugetlb: + free_huge_folio(folio); + return; +#endif + default: + WARN_ON_ONCE(1); + } +} + void __folio_put(struct folio *folio) { if (unlikely(folio_is_zone_device(folio))) { @@ -101,8 +114,8 @@ void __folio_put(struct folio *folio) return; } - if (folio_test_hugetlb(folio)) { - free_huge_folio(folio); + if (unlikely(folio_has_type(folio))) { + free_typed_folio(folio); return; } @@ -966,13 +979,13 @@ void folios_put_refs(struct folio_batch *folios, unsigned int *refs) if (!folio_ref_sub_and_test(folio, nr_refs)) continue; - /* hugetlb has its own memcg */ - if (folio_test_hugetlb(folio)) { + if (unlikely(folio_has_type(folio))) { + /* typed folios have their own memcg, if any */ if (lruvec) { unlock_page_lruvec_irqrestore(lruvec, flags); lruvec = NULL; } - free_huge_folio(folio); + free_typed_folio(folio); continue; } folio_unqueue_deferred_split(folio); From patchwork Tue Mar 18 16:18:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 14021235 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 7AD76C282EC for ; Tue, 18 Mar 2025 16:18:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 419C2280006; Tue, 18 Mar 2025 12:18:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 337DC280001; Tue, 18 Mar 2025 12:18:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 17C51280006; Tue, 18 Mar 2025 12:18:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id E6AA0280001 for ; Tue, 18 Mar 2025 12:18:30 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 1980958785 for ; Tue, 18 Mar 2025 16:18:32 +0000 (UTC) X-FDA: 83235179664.28.781D0F8 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf28.hostedemail.com (Postfix) with ESMTP id 38747C0022 for ; Tue, 18 Mar 2025 16:18:29 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=aqMu4tyZ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of 31JzZZwUKCLksZaaZfnnfkd.bnlkhmtw-lljuZbj.nqf@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=31JzZZwUKCLksZaaZfnnfkd.bnlkhmtw-lljuZbj.nqf@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314710; a=rsa-sha256; cv=none; b=1yZh3XGQ+ulTaUoDR26FHV10GSC91Xa+62jHMRzZmGxqEW5wdsRVqSRpEqvM2yqnoWIaqN z3Tq8kEgaxvs65Yva5Z/V015HYXffY0K0lYkcwKhv67Gqia4Z/1xr0w0qad8GjjzT7tqcT Oe1TNcVQJhcA1Vkq+u1OwJ9J2wytBfo= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=aqMu4tyZ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of 31JzZZwUKCLksZaaZfnnfkd.bnlkhmtw-lljuZbj.nqf@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=31JzZZwUKCLksZaaZfnnfkd.bnlkhmtw-lljuZbj.nqf@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742314710; 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=f04fIvPqKRtI5t7f5B+Wihfsf/K5ZsIQslP/ug4gI5c=; b=6LD93CuKwWXPyhaX/Hy4oo48G+qccT1ZZDasY8PWgjRzt3+8i/3G0AOLNnSuPWnnct9fVf DOSP9axYAZVYKrPaVleCbM79qa2zFHCrNiwYcmbL4LiTikVi8547NL3WTLXZximb5aWIkU hs4QStJkizw7T0XuRNcybMIMXoYza0o= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-39134c762ebso2555813f8f.0 for ; Tue, 18 Mar 2025 09:18:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314709; x=1742919509; 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=f04fIvPqKRtI5t7f5B+Wihfsf/K5ZsIQslP/ug4gI5c=; b=aqMu4tyZaaHGlVcJV7NLKHM9wibHfA4l+nd8Fw5UZhGGJHGKWLfNqVKKVZYIiP8wiJ z6XkeoOrknXV0M1+kqm9pz/cDS2mjydl5/dVapvobXKgX92U8/lyzb/iv1Ts2D1KlTBM NcBLbnS2yGz3lSNBfSxGF2OzXBQNToAe+Z4jxeu++VJ7iXJngMOO//vcmZqOoVklDduu Io7T0o/dfXvo7yRLDoLtTS9j5PYJAOsrRisB9s82ZDRisTSUj4jMj6mTP9pdQ0FGvaov PQZi70TaeoNiJyok8Y3bhyWBkCyO7bkSEu73ZM5UabUkJTtvT0iQ5Lm/qqNz1RgYl1vx Syiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314709; x=1742919509; 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=f04fIvPqKRtI5t7f5B+Wihfsf/K5ZsIQslP/ug4gI5c=; b=Gh/u1i6qkW/QsuWYh7LtkqipBuHAClQe0rCra+3a07298TY8atQgl5Mj2Kd7mrMzXb /5D7expak3h8bVIOuH9uEU8MlIU+hNFzwKwwERfFTh1hwc/2y1pBHwHvANqZZD/MIYQR 0m0WWaR6eKWUXTgn7k/spXn55rsrQKW72nmc6mzBtX2+b4+ag9zb8pjZL0nl91oXDMYu /mcIphDkrl2CxlIcb+udgLQ6XNOdzikfpggdwBNglx5VI5406d9qNSu0OReJHir1YLjl ZyhOgKsc/Zl+ix0PBEOXiOdvMIBW7FR5+ci/xKeQhhazl1UZCHeEbpp5aLMIXTmoxBKI WiXQ== X-Forwarded-Encrypted: i=1; AJvYcCU039udujK1DqDMS3GAH2AuYXqOPDSJZlM+HajXOI9ctqmTb3W4vYMjenyeHBRdY83IU9z/CiYetA==@kvack.org X-Gm-Message-State: AOJu0Yz7hPqzp57s3dQXWSKOkpG4yVI1bIwLo7NiyRS+NU14I9IP6DOP VPmqlDzbXgC3BKqByn7qEkfgBybV9u6XNugT4MoR3iwyLIhMV4KKx/p/3RmTiFEJX+2So5yJQw= = X-Google-Smtp-Source: AGHT+IHKjyvE9aXNEsQehi7vFGlwHXvPcmdq406eUxRhHnas0MMzqCwbpt157B52I+uti71hU+p9WZ7i0w== X-Received: from wmgg6.prod.google.com ([2002:a05:600d:6:b0:43c:fc61:959c]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:6d81:0:b0:397:8ef9:9952 with SMTP id ffacd0b85a97d-3996b499a00mr4539610f8f.38.1742314708814; Tue, 18 Mar 2025 09:18:28 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:16 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-3-tabba@google.com> Subject: [PATCH v7 2/9] KVM: guest_memfd: Handle final folio_put() of guest_memfd pages From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 38747C0022 X-Stat-Signature: fqim5u3jd1egi9wygwp99xo39z4n4jmh X-Rspamd-Server: rspam06 X-HE-Tag: 1742314709-399961 X-HE-Meta: U2FsdGVkX18y+tJVufYLGawsnJEPkA107Qggo7/db6iqau/M//5moq0e7J29IWjDcv387vM2CJPsS4nL8b8JRheavHzE409OMuzeMLA+5gjOKciy7AqhZuUvVvTHk1B09lgyUpImSXNZk6xuOmCebfFbY44RgY1as3BSa/1HAwt53wJMJEgkyDVEuVpirGamKV9oM6QxDdQfUiPi82MpyNedhbHimvdHPHncEr9ObjwGKswGZ1l2ZSNzXDSssngsNBmUvLe1HveZEmzpyTc7XB8ZBL6xhN8h/4EDpVcE1yOV/f1hDRdZAc+R9oROm7UiV4gAoCkSOY6ZElvuv8t4x20rH50dzngt8yRC5QDqm1H9Cz0cdcYfLl7fIuwFl+YT3bCe7GMf7MnhHbWvUKNwJrp6qLrNbyhV8rrP1gJW8StKytfMvNk8mWpqdkCrGBplhHM7TC/r+k1EaB5uXlEx+nsXY0Cg4zbE2IvOvL/GwA+ekopUSfFwRL7qU3KgUQ0GDG0eTTUqR8YyFdnTezAdIqlwxpqGcRUietvRjiaPVcyIwPjBk/GVPerEJlhIsQ2M7jqjnio0AJXdpFuMIxNOxJ9uedkGGWXKjSr+rRSKh+vFjSxj5OclPOjdPgaJZ4D9JwujY5BMaF0n5pV+WnScUXjUMzvwhYRvLPhqWz9B6BEkDFEVYDCR2NuqLn1yFcsa6UvTwoqQ7iBwKvUgLm4+riiC5pAgXCwnt/bo15eyOF+RWzE/RJuOpL5l0T3jEw/9rLRT/3Lc1IiL8Hs6aiDZpLN1JAQR+qWhYDn6QlvUN6CgdmYKgV/IRrNRLKypoqZgAq38Ng9UO0mNfrizFiH0ilmEuWJJFxVTmKahuB4p7/shDEKdXW84J/E1RMF/Xx+2gcTgowvXk37zYUvhogEL24PJ2ngG8iS6gix9PUYVwQpVvTFAMSCdS8TR9+OeYbCk+dKFoRuB/UWTj+hLjHX F1QFuppV FBNt9O4kWUxNIK6S+hVdrVbk39tvIAh43rBaOuB+2Mym6Qst7ffdDQej3xaLkm5nEwg432EYgmP1Ig5BtAxjkFQnfTN6DDR95av6z27p+q2jJ2OdN/2wq5XBukByQfrqG/QG1hFkHM1zR7AXxLjOosKctJB3xxWie5+wSZwXy+je8h4YIVmt+3j9w16TK+J9zvHCMF3MCpjStuFB0xQVX86HeV10DYwZ6KEpmvw8JzTPLx6mzeBJb1cdHItwVd6KId2sTTyfwpXoNR+VwiKLXBhA4P3gtUA2uMabUFYIh8I5oaLfC86yWmfFnZOdCxVaWolFotyxnMxqZRtH/0Dbgzasq9kWLJ3+Yy/pqUGH2il3sQIpocNpovHMaq9uKrHnxUXfs+tdWu3hUX45B+prr4wwNZM03ig6ov5q4yuszg/uRKCkRBFzycGiLNPHxMA7dFG9Qb9dCBB1/fYFDgK6sIdIWwA9hsZOK/sz7PYbiIW7PnYggfB9VCGzxXGVob2Jzjtfrdk40CJNdHDoF8ht80GwVNrHX/GVyhPvw3ty8UQq8YNZS1PEIDpNSj/cnreWkoQrIVutEBhigFXa/570itqO1H3eJ4qHVzj6xRirCC0XOv5UflnVHL1LZBbEkwtkGtRS7G8v+aNb2ahdV3uxtTztwCtB0TIEEpcYL4tKIaptINGo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Before transitioning a guest_memfd folio to unshared, thereby disallowing access by the host and allowing the hypervisor to transition its view of the guest page as private, we need to be sure that the host doesn't have any references to the folio. This patch introduces a new type for guest_memfd folios, which isn't activated in this series but is here as a placeholder and to facilitate the code in the subsequent patch series. This will be used in the future to register a callback that informs the guest_memfd subsystem when the last reference is dropped, therefore knowing that the host doesn't have any remaining references. This patch also introduces the configuration option, KVM_GMEM_SHARED_MEM, which toggles support for mapping guest_memfd shared memory at the host. Signed-off-by: Fuad Tabba Acked-by: Vlastimil Babka Acked-by: David Hildenbrand --- include/linux/kvm_host.h | 4 ++++ include/linux/page-flags.h | 16 ++++++++++++++++ mm/debug.c | 1 + mm/swap.c | 29 +++++++++++++++++++++++++++++ virt/kvm/Kconfig | 4 ++++ virt/kvm/guest_memfd.c | 8 ++++++++ 6 files changed, 62 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f34f4cfaa513..3ad0719bfc4f 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2571,4 +2571,8 @@ 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); +#endif + #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6dc2494bd002..daeee9a38e4c 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -933,6 +933,7 @@ enum pagetype { PGTY_slab = 0xf5, PGTY_zsmalloc = 0xf6, PGTY_unaccepted = 0xf7, + PGTY_guestmem = 0xf8, PGTY_mapcount_underflow = 0xff }; @@ -1082,6 +1083,21 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) FOLIO_TEST_FLAG_FALSE(hugetlb) #endif +/* + * guestmem folios are used to back VM memory as managed by guest_memfd. Once + * the last reference is put, instead of freeing these folios back to the page + * allocator, they are returned to guest_memfd. + * + * For now, guestmem will only be set on these folios as long as they cannot be + * mapped to user space ("private state"), with the plan of always setting that + * type once typed folios can be mapped to user space cleanly. + */ +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +FOLIO_TYPE_OPS(guestmem, guestmem) +#else +FOLIO_TEST_FLAG_FALSE(guestmem) +#endif + PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc) /* diff --git a/mm/debug.c b/mm/debug.c index 8d2acf432385..08bc42c6cba8 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -56,6 +56,7 @@ static const char *page_type_names[] = { DEF_PAGETYPE_NAME(table), DEF_PAGETYPE_NAME(buddy), DEF_PAGETYPE_NAME(unaccepted), + DEF_PAGETYPE_NAME(guestmem), }; static const char *page_type_name(unsigned int page_type) diff --git a/mm/swap.c b/mm/swap.c index 47bc1bb919cc..d8fda3948684 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 @@ -94,6 +98,26 @@ static void page_cache_release(struct folio *folio) unlock_page_lruvec_irqrestore(lruvec, flags); } +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +static void gmem_folio_put(struct folio *folio) +{ + /* + * Perform the callback only as long as the KVM module is still loaded. + * As long as the folio mapping is set, the folio is associated with a + * guest_memfd inode. + */ + if (folio->mapping) + kvm_gmem_handle_folio_put(folio); + + /* + * If there are no references to the folio left, it's not associated + * with a guest_memfd inode anymore. + */ + if (folio_ref_count(folio) == 0) + __folio_put(folio); +} +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + static void free_typed_folio(struct folio *folio) { switch (folio_get_type(folio)) { @@ -101,6 +125,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: + gmem_folio_put(folio); + return; #endif default: WARN_ON_ONCE(1); 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 b2aa6bf24d3a..5fc414becae5 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -13,6 +13,14 @@ struct kvm_gmem { struct list_head entry; }; +#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."); +} +EXPORT_SYMBOL_GPL(kvm_gmem_handle_folio_put); +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + /** * folio_file_pfn - like folio_file_page, but return a pfn. * @folio: The folio which contains this index. From patchwork Tue Mar 18 16:18: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: 14021238 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 3A635C28B28 for ; Tue, 18 Mar 2025 16:18:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4ACA1280007; Tue, 18 Mar 2025 12:18:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4531A280001; Tue, 18 Mar 2025 12:18:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A5BC280007; Tue, 18 Mar 2025 12:18:33 -0400 (EDT) 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 01BB6280001 for ; Tue, 18 Mar 2025 12:18:32 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 3542BC13FE for ; Tue, 18 Mar 2025 16:18:34 +0000 (UTC) X-FDA: 83235179748.23.C977A8A Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf14.hostedemail.com (Postfix) with ESMTP id 54E10100005 for ; Tue, 18 Mar 2025 16:18:32 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=hpe8ghjv; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 315zZZwUKCLwvcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=315zZZwUKCLwvcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314712; a=rsa-sha256; cv=none; b=XHHVtgaidB2o1rxAqpr9wDrGdLuwa9K6MktoinexPjC6yFSTtuTt38dJMbinPknRpLY//r eLBYSgdjFc2Ut4dwZCxp8aCpvNJd+hg6brBVPZxLuWhg1yOBtDv6E7+I9WokdCFhiXD+D5 g9wm5bodKd2Kvt+g9paDtarsBnze9R0= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=hpe8ghjv; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 315zZZwUKCLwvcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=315zZZwUKCLwvcddciqqing.eqonkpwz-oomxcem.qti@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742314712; 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=YYOa1UU9h8jSjVAqsxgFkmmHWtUaYIzvfBIu4SI+BUA=; b=I37E2b802Ue52tbqt7DYygSQdL8Q7A1mPrf2MkjpM1zyVFhMBzbFHTojQHqUEA0OebiS4B oGZXJt9oNdBVR7Smxk2jn2fwyfJPvuZ/3kTdxXdBTpYDog3iNGmiSXXEp2h+2TTmJCifN0 WHHHKDbUdoch121nFJzBN9XYr0ooTMM= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cf446681cso20270045e9.1 for ; Tue, 18 Mar 2025 09:18:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314711; x=1742919511; 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=YYOa1UU9h8jSjVAqsxgFkmmHWtUaYIzvfBIu4SI+BUA=; b=hpe8ghjv0YSouzW8c8Tq4iiT0vyALcX2KfRt4cLtII4Kn18jWg2BGyrxvHNrc4vsax KoKlvqBaqUe5m8W4K4SKb0VP/9Q0qeHdIvV+u2ek41WLrqrjPMzLvAFMpS1Ef1OwXJIg zccZsInUf2NkMUjrvyP07+zzHA0YhnO3wgsNHWMUKgdUlOF4XLIPoPSFTp5GSG74CDVe A4Of3zu+HvId5cX9yoqOz9jkGqqQ2Tj+jYF6xQJriZvPbBM/Ruwjlv3LP4dYKvUz8eM+ deAiK71ttShwUjYRR/wMwfDbzo56FXdGHnpHHeAc6Dhu+TkxFnPy7iw34NRSeb8RZpJp PVTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314711; x=1742919511; 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=YYOa1UU9h8jSjVAqsxgFkmmHWtUaYIzvfBIu4SI+BUA=; b=Wnlt0SOlv1B36ihKkw2ZcNw04Kx/jnXn4HwIWffyodOzeClQnmwXkgMegWTCTOd9lV y+ME0xTx4OHfEsHyA5TIvR+/gmgeFpfTJ90vDllnFFYoaYupSZzheRC1FTAR5TayJ8by I1knn/9GEoFkb+zH0xJAugXENf0HLGXP703rHCCGrd6BO30DGL7foNparwN2EmbnHECd c8t5Ml1EVGc+lKV0WqEbjHL0ApcJJvPkP8jywboYYVHREDCmHM6SXRQMDePdPYS47CXg qk7QKbs2eIvu+cEOhY2kNUY0ulyKwV4q0TfxTkxnIea4mV6bz48eMcdJtYlnhs8JbQok Kw2w== X-Forwarded-Encrypted: i=1; AJvYcCVgdbuSQUWvVEy8IZ1MF1U+TQ2SQ9JVSjFLKx1HYPrMFBcVlgXr6mLcqyHfO19eAaz8nh48ditRuw==@kvack.org X-Gm-Message-State: AOJu0Ywfj9nL+uWHPDRGbiZ5QoBwqft3UTl6X9UNxpgs1xv3VSiSqUXh NFgwX1b+nSD7SKz5FlPHDOvXD3TdxabAk83wgzeOTDeHHHAbPsWMl5HUH6YmC/61fp7EpYigwQ= = X-Google-Smtp-Source: AGHT+IFh22cazuiaWoz765xAULeQoPlqrTQHDrVGOZCNL+4GObvqtUFGjre6fKpJHGgToLQW9OVbs++0/Q== X-Received: from wmbz3.prod.google.com ([2002:a05:600c:c083:b0:43d:2038:224c]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:21d1:b0:43d:8ea:8d7a with SMTP id 5b1f17b1804b1-43d3e14ff6fmr19346915e9.28.1742314711005; Tue, 18 Mar 2025 09:18:31 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:17 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-4-tabba@google.com> Subject: [PATCH v7 3/9] KVM: guest_memfd: Allow host to map guest_memfd() pages From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 54E10100005 X-Stat-Signature: 96gswyjdppcei7cpy9nphyjuuukofkeo X-Rspamd-Server: rspam06 X-HE-Tag: 1742314712-145855 X-HE-Meta: U2FsdGVkX1/27vWA8wzLQ6W1a+4hd9puNIIpAJYBST9LL9uc64bmKvKUq175jbbRBMPENNtXw5GwKTQ/8XG9zNWCFapyq/9E7aHU24+RLQKwCeUS59VSIEXY9iJhFs1ZyMwH7RDtlPAr5AUOdyy5fXotoOT2jlJl4M6wLwiXfWY3t44u68Mjj8cI4SlbBKpY1UV/OCCO7xt/EezOFo5taraoiuDlv/0h2+mh4oOyZM/SER9fYsIoW6eaZW33Kd2QvYGGNCZ2jpldyU2a0B7lAOPTMrz3YZcD31qxe4eyNtLO1Bq8FS7gWF0vM2oruqExjLlW320oH9cXSADuJoP32z6uTdOD7kQ3wbTapLn4qMWsoBy3hQevSdbU1UQc6OzLRHEy5MxyFaSjoaJIog3RfT7Bso82skJvXINRbnggOs2gA+FFcwDmSbMaAkb/9l0UnJyxjltgBOm+NjPsaG+d3FSYU8MzjKr1ZhuUJwjfwi3IxDqDY4dCYxiFmULBkfN1SFpYkeE367DYXw+k0Ak0VDoauRKVg7JgENWNdXvi8oMh/i8HvtcakrTxIplt7z1bBsVbb7nNFHptBk7+23YQcoggGRnrzn+0tOnZell7tAyTTAzUQQFgNqayd69x8CnRqRxg2a339TyX/E+ZMfVeetMwDiN/PweXCu3xLu3K+1SWMQ5MYXc71xt93WKutIVBkihyH3+lSH78MPG3GrV78q54owhS+VGTtMXd5cuAOzpW3gIMqdTTOYjLGymjSKB5KseQes/RNAPVoe14GNTRfl3QCt0ZGsPb1lDhpTpu1WkXcSCIf689ayKmdkY3iO+pHBew8U7hBybDcTFyoYLq9rjikORrvU8i1q3YzFYXpjxZdLzZ/XN58UXwLyQOwcBiQT5nnqAZT/X+YL4E/bSNPphxr5Fzdqd/p3FdhTfHvR1l03z8zj14FS0xIKIYNny+jS37SF0hZLoqMmhUgZC VN9ayY03 VOPKKJ4B8Z1OiFwblqk1QMTA0C2ub6OXDHgjiEfnR/RHr2M6RWaDDibBty9PntW4m3TTd05ZWKouICgS07zpz5f1Idd5/nLmuAmyx6mg2+S7QIwLDi8VBtKah7vLbRAl+xZlVQWaXGCXN8XnR0QT57NIJvWqVTYbFmpguGsGMxzYvoUSEvfL5cE9/52Kt/mmp0dP31HqaHQhM/SMTtQ3F6Ml/W+O+tnqTdV5Xuvy2yAqg1ZHViYFCfgMFEXmdbx5C0rbhXIgaFvmFfNFqBU8O3PDJbck/trex30EgnFh45wQR8qTlG/jP1oTEZl+pOR4uyakVZo9eOugnEQ4e0oJcm7q0Ti1l297jY7X+bczXtjA50hWyWKcDZALodcU2b/CvWYkpcTWakmckoH/XFxN5HRaQr5GvHdAqcvLvg0T9Fr3YGBMQMUVGkLVWULJ6hDFP8V4uEU+nPNGu94hT9mKlv4SCEgsWVPtt4oozFb4pET607DIv7vv2JyP94aAhhfPGtMHoaP5v0w5xHkMTrq70uSDIuwbQSJiY2DhwsgF23DNo/6289FlGQc1o0pV1kOk412d6NUtQq7MZjklkt9imTF4goSN/5gl4pir9w0J+APnOJjrtKW+cfGtbGaIyZO1X4R1AEPOLMPvBRVerfOrcJVxQMg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add support for mmap() and fault() for guest_memfd backed memory in the host for VMs that support in-place conversion between shared and private. To that end, this patch adds the ability to check whether the VM type supports in-place conversion, and only allows mapping its memory if that's the case. Also add the KVM capability KVM_CAP_GMEM_SHARED_MEM, which indicates that the VM supports shared memory in guest_memfd, or that the host can create VMs that support shared memory. Supporting shared memory implies that memory can be mapped when shared with the host. This is controlled by the KVM_GMEM_SHARED_MEM configuration option. Signed-off-by: Fuad Tabba --- include/linux/kvm_host.h | 11 +++++ include/uapi/linux/kvm.h | 1 + virt/kvm/guest_memfd.c | 101 +++++++++++++++++++++++++++++++++++++++ virt/kvm/kvm_main.c | 4 ++ 4 files changed, 117 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3ad0719bfc4f..601bbcaa5e41 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_GMEM_SHARED_MEM) +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) +{ + return false; +} +#endif + #ifndef kvm_arch_has_readonly_mem static inline bool kvm_arch_has_readonly_mem(struct kvm *kvm) { diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 45e6d8fca9b9..117937a895da 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -929,6 +929,7 @@ struct kvm_enable_cap { #define KVM_CAP_PRE_FAULT_MEMORY 236 #define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237 #define KVM_CAP_X86_GUEST_MODE 238 +#define KVM_CAP_GMEM_SHARED_MEM 239 struct kvm_irq_routing_irqchip { __u32 irqchip; diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 5fc414becae5..fbf89e643add 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -320,7 +320,108 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +static bool kvm_gmem_offset_is_shared(struct file *file, pgoff_t index) +{ + struct kvm_gmem *gmem = file->private_data; + + + /* For now, VMs that support shared memory share all their memory. */ + return kvm_arch_gmem_supports_shared_mem(gmem->kvm); +} + +static vm_fault_t kvm_gmem_fault(struct vm_fault *vmf) +{ + struct inode *inode = file_inode(vmf->vma->vm_file); + struct folio *folio; + vm_fault_t ret = VM_FAULT_LOCKED; + + filemap_invalidate_lock_shared(inode->i_mapping); + + folio = kvm_gmem_get_folio(inode, vmf->pgoff); + if (IS_ERR(folio)) { + int err = PTR_ERR(folio); + + if (err == -EAGAIN) + ret = VM_FAULT_RETRY; + else + ret = vmf_error(err); + + goto out_filemap; + } + + if (folio_test_hwpoison(folio)) { + ret = VM_FAULT_HWPOISON; + goto out_folio; + } + + if (!kvm_gmem_offset_is_shared(vmf->vma->vm_file, vmf->pgoff)) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + /* + * Shared folios would not be marked as "guestmem" so far, and we only + * expect shared folios at this point. + */ + if (WARN_ON_ONCE(folio_test_guestmem(folio))) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + /* No support for huge pages. */ + if (WARN_ON_ONCE(folio_test_large(folio))) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + if (!folio_test_uptodate(folio)) { + clear_highpage(folio_page(folio, 0)); + kvm_gmem_mark_prepared(folio); + } + + vmf->page = folio_file_page(folio, vmf->pgoff); + +out_folio: + if (ret != VM_FAULT_LOCKED) { + folio_unlock(folio); + folio_put(folio); + } + +out_filemap: + filemap_invalidate_unlock_shared(inode->i_mapping); + + return ret; +} + +static const struct vm_operations_struct kvm_gmem_vm_ops = { + .fault = kvm_gmem_fault, +}; + +static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) +{ + struct kvm_gmem *gmem = file->private_data; + + if (!kvm_arch_gmem_supports_shared_mem(gmem->kvm)) + return -ENODEV; + + if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) != + (VM_SHARED | VM_MAYSHARE)) { + return -EINVAL; + } + + file_accessed(file); + vm_flags_set(vma, VM_DONTDUMP); + vma->vm_ops = &kvm_gmem_vm_ops; + + return 0; +} +#else +#define kvm_gmem_mmap NULL +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + static struct file_operations kvm_gmem_fops = { + .mmap = kvm_gmem_mmap, .open = generic_file_open, .release = kvm_gmem_release, .fallocate = kvm_gmem_fallocate, diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index ba0327e2d0d3..38f0f402ea46 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4830,6 +4830,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #ifdef CONFIG_KVM_PRIVATE_MEM case KVM_CAP_GUEST_MEMFD: return !kvm || kvm_arch_has_private_mem(kvm); +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case KVM_CAP_GMEM_SHARED_MEM: + return !kvm || kvm_arch_gmem_supports_shared_mem(kvm); #endif default: break; From patchwork Tue Mar 18 16:18: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: 14021237 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 1DBD4C282EC for ; Tue, 18 Mar 2025 16:18:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7A31F280008; Tue, 18 Mar 2025 12:18:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 750B0280001; Tue, 18 Mar 2025 12:18:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A5CC280008; Tue, 18 Mar 2025 12:18:35 -0400 (EDT) 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 33B0C280001 for ; Tue, 18 Mar 2025 12:18:35 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 2EFB5BA54F for ; Tue, 18 Mar 2025 16:18:36 +0000 (UTC) X-FDA: 83235179832.29.AD7BFA5 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf22.hostedemail.com (Postfix) with ESMTP id 55B5CC0013 for ; Tue, 18 Mar 2025 16:18:34 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=DjDsNcSf; spf=pass (imf22.hostedemail.com: domain of 32JzZZwUKCL0wdeedjrrjoh.frpolqx0-ppnydfn.ruj@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=32JzZZwUKCL0wdeedjrrjoh.frpolqx0-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=1742314714; 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=/EcAixsmdhk6bmV6ZGX7oCYFqnhwEUpezZCWTXKhO+8=; b=CCl/BqX4qIgDARxGzjI0lfZmPvT5AUFYaQjXRz/AF6pMPcjngRd9zji3C9sypvP9nVxoQ5 vtElIK0PQRQ84BSGEzFQrqbrRe5C/QK/jZUaUM4GScQtvywH9G4b1KSSEdkgwwJJBpnBW/ VtpPruAWMni7r2hAJjh9j8qsSsvf124= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314714; a=rsa-sha256; cv=none; b=sV/qpcz4qIAdCsBUmBIG5TPylL6lrG+jixHfMn4+zmSVYpuRnmeEQ87nbKwHqJykZfqs8z t+N90ubrAQFx1moZ66ziz21ETQE+RLab2fDp1ZIS7sIJoRogOjbFawnS9h0GuZTKNskX5F i6M1Vp7sGqy9bWLUcaqfTxvtv2k650k= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=DjDsNcSf; spf=pass (imf22.hostedemail.com: domain of 32JzZZwUKCL0wdeedjrrjoh.frpolqx0-ppnydfn.ruj@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=32JzZZwUKCL0wdeedjrrjoh.frpolqx0-ppnydfn.ruj@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43d0830c3f7so30340215e9.2 for ; Tue, 18 Mar 2025 09:18:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314713; x=1742919513; 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=/EcAixsmdhk6bmV6ZGX7oCYFqnhwEUpezZCWTXKhO+8=; b=DjDsNcSfgiL+vxRwc3e5N+/OdEiI49DvcoihlULLqTtv/iGLi0wm8vpc0Aj1f6PVoM 604een+TeD1hCjV7bycwmWGgp65fENc5eYuKAeCI5yRh5MbvWBeIxeKp/IzHKPCDpDB9 h3VvAAJdcLblry93XB3ohGlisjP7gNK/cVH3nmWW1jSBOTL9tMcjyJ9e4vHecHx7xNJY Eu6qCNpkzxUjt6K2xVq8hHLx0BckDijus9O2TEljWWIp2KWScsjadfxZIdm+gZ3+V5Tw IQNV+O4PSV1nqvHZ4NLjapGCneiEC6dtKZg2KimcsO2oFtpcSiW6wZ2a2CFzdNILxR1e GQ8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314713; x=1742919513; 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=/EcAixsmdhk6bmV6ZGX7oCYFqnhwEUpezZCWTXKhO+8=; b=sUTj5v48iua1l8AIA5fopdCjmO32RZ0rTAPIEFIknHX//f+f3awtpwnDf0MSSoa1BM OVWY4F9EPNNtUkVsttog7xHeJ6iBMwSPtyFWeAQBbMDLLrOlMk8xLXTugFGMND9l69cU 4LjolEkTH0sFJFZNLYvdgzDwfNkvkaxNKxascTtL6YNK37uAZdUxDKS9VVALHLzTj00w m3VckXRe15ydsCURbIh3kuFYlk3aTa+AMKmbLOaGXOmNYtUjQX3gPXBMNOAmBiUQmx5j DJQ20Nk53PPMM9w69GroMHny5ejSJ+fk3L73c/AuCA7MiyeBDZa4VOO9UIMg3jB8UqTi NYMQ== X-Forwarded-Encrypted: i=1; AJvYcCVyQb9eX9Zg+DrNbk/w4iD5enWbghfWVGOyo1tj2FpIAXvMrWiJ0zx/VWY+fl/wUhWBQywmhGffkA==@kvack.org X-Gm-Message-State: AOJu0Yw0jqOtfod2+ByzMCnP34rHzpAYBhMV4xcSlcJAuohkOu4eOfdx XRpMVZOyoxIryUBgqK0fjJCz8DFtAezEPJEV433632u5GNmkGJDlzaxAuXFQ3U/eIlcHHL+QLQ= = X-Google-Smtp-Source: AGHT+IFuB0YnKL6kUm38tBS/6LJDBkvMlWqrQgPpMVTZtzFsku07rNUNUVUMU/c13cdgLnKM1DZebVk/ow== X-Received: from wmcn5.prod.google.com ([2002:a05:600c:c0c5:b0:43c:f316:abd1]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:3d85:b0:43c:f6b0:e807 with SMTP id 5b1f17b1804b1-43d3ba30defmr34291435e9.31.1742314712952; Tue, 18 Mar 2025 09:18:32 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:18 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-5-tabba@google.com> Subject: [PATCH v7 4/9] KVM: guest_memfd: Handle in-place shared memory as guest_memfd backed memory From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 55B5CC0013 X-Stat-Signature: 71uax8i65ase47gbjw6tmi9ng84q4yki X-HE-Tag: 1742314714-101115 X-HE-Meta: U2FsdGVkX1+2/Q82WRmEKeR5yAQ8Yvja0WzxPer/uWtBOlAhJiDMl2dd+pXs4lMAfes4nYnBsWeq+6euL0JLLXKtupKivLUueoucgfIFZgHrKzDRKlEdQ/DdNgonZMNwMMW+gPN+URrrGoejytLaz9nVk2IqtWm88zla5HBjLiRCYZvUTI/L9br+P9EtKv73g/v2tHem+m1mFZ/3yw6pA/zANAJTDAYZgmF8K2HLxPDKmqAWJbL9xWEc8Fe50VJ5G3BXp0Z3Rv7ew4MA9cNoNWZF5oJ1ZcyU+a3LwsoaFb+otChx/O8fLWnXG9gm7cFyL0vv0Ob8OUa+M24lCQkRev0HjJ/6nfVfH57EGoHRvmGQU8F5xSQPtKBUvW6SGUPiPVT6xlnZ/jYjJ9iOUPI6vwSEwCMeTD9JhkqIdgKgp7cQivOKY4RtmPwq72XwUtbvLw0j9tyWBJS/T+65HJiPaVMU06Y8irSk3vDAsz5RTsmmfTeAAFXI8ymGnzr7T/1UJrSRcnqxUTTzixXgGmZtdI8Y63z/UDWS9plZK+VBmLBjlLC4KfLppRFGpbZIlLoXpZtUgk6FNYVRXDBxRLkgmF86DzHxDtmgI+me1aHi4l4eFtv6GzNS4laSFuYQeJ/8RIoEQZXeqroeHE/9hexmoYmCEe2sfdenU1UqLG0H9qeEhDabE3IFiPVGjQQ/SXmMLdz8pBFz1aWh+klui3XfSii877Z6H/YwIV4UgGamzTET1p8f8n+tUa3gh9B84BUsfSuCfgCgulAOa2br8LJT37kCb9QZuN6UzK2XMnl4pYEZliQdQG0gs9Gd3RtaiV2Xyy7Dh7ir6qNebtOW+1eCVSG/zzpmh0bCC+9s3KzzwsYdfbghqEJXJNGzdS6R29UWR5rzogTp4Zj2Eu8U8kq6qa/Rys/gZrK6masWc0XnsbK5QvBZoX132AcCOLcOE7hTD8qO62A57jdVz+Falzj LqlEShPP X9kuwunIQrTgnBui1TCCqUFAV0XnYwMrN3khKU1Sbe/j3wvCGiMYNrHYl4MPSYOgl16LVyJerZ6e2XcZAZnkjH2BA8wCtQ9pz3fVR0mKNEhAcx16kWWT3EYca5P7Ch6eALcLfeTKYPs/gB43cakCfh73thmT7uY5YQovdqQnaF5zDylfMqIpkMCXZZ1SO/gwobyoPWd1Vjt+2AkAqiDfWrePirBHYZGiRBGnBOm/NI0QflsQoNYjzr2fWswQONaxy2lEdUs0ldcaT1DtkOnNe5p8Ow4x16v5PwuOld9J2kyhQV9Z+ptwubvQsYYRuxxw/4O4onmjfWfpl+ENjjRkSFqz0rJK7zU5G6AidnJRiN02MMBmyKJaget5lB8fcVZRa47JckVj4Q5xf+mhPiVCydL63+jeEn5SYBVrnfAJIemvws2DUuG7ZqvLeWbtnt8GT5u2rv1UrXpCWNhWhb46yv4sIa/UHsf7qtzkQe+SxquOpCZoz5hinG2FjOQY92VAdGtLp8O5/BxPVmdl2+dQ8giYzjDzB/QMKGv6BFshpTYrTae9SV+PXTOwx8G6teWUGiBQg0EM7F0C1gYWNuwNj/L4WtbpEDfcxjssauLlyl2XpiO8I4zVIwaK4i/TMIdm9SNY+TOHPnwEkrLtYL4+TlDpxDg== 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 601bbcaa5e41..3d5595a71a2a 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 Mar 18 16:18: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: 14021239 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 AA8ADC35FF3 for ; Tue, 18 Mar 2025 16:18:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3EC1028000A; Tue, 18 Mar 2025 12:18:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 39D23280009; Tue, 18 Mar 2025 12:18:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1C96E28000A; Tue, 18 Mar 2025 12:18:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id F1B8A280009 for ; Tue, 18 Mar 2025 12:18:36 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 39AA714140D for ; Tue, 18 Mar 2025 16:18:38 +0000 (UTC) X-FDA: 83235179916.20.1FB01EC Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf23.hostedemail.com (Postfix) with ESMTP id 5E4F014001E for ; Tue, 18 Mar 2025 16:18:36 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iEWtf3HZ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of 32pzZZwUKCL8yfggflttlqj.htrqnsz2-rrp0fhp.twl@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=32pzZZwUKCL8yfggflttlqj.htrqnsz2-rrp0fhp.twl@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314716; a=rsa-sha256; cv=none; b=gUjLC96ThjsVX55Kfpu3Xwt8D//ysMp6gE8FIDxYegyu2QCuIH7TYQbo5ClF6v0tZdLVN+ akof/lBwKrJtW0qHWtwBOMSnTgWVkjM0VORckD2+i+/s90SiJ/7P8CYagMQXRU9hDzFYiK /oxvHI6RlxLM4DgrjuHq5HScesV5k1s= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iEWtf3HZ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of 32pzZZwUKCL8yfggflttlqj.htrqnsz2-rrp0fhp.twl@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=32pzZZwUKCL8yfggflttlqj.htrqnsz2-rrp0fhp.twl@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742314716; 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=4fZ+plV8ov9Z8BdTSvHhlcpnsxWp2MsGy/DzmNzLSwM=; b=uxm25yT7IZWrdBjrYDuE03DjdNfk/KAEVHqGo7/B61IRnFgdTlAiUtROy1MljfQcDHkJ/l yBoau+tCrmb65DYWxkqtLyp2sJe5ur8AEFMoUgDUzdDjAI/3qoUVie2Z5lbf0/Zf4pM1v7 9LKecv7n1gSIaw5B7ASsGTzYRl2rkDY= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43943bd1409so23509105e9.3 for ; Tue, 18 Mar 2025 09:18:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314715; x=1742919515; 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=4fZ+plV8ov9Z8BdTSvHhlcpnsxWp2MsGy/DzmNzLSwM=; b=iEWtf3HZF7z8CGuyBDKhNVoqhttSHO3GdCPD2TaPKHBu7FnBaQwhyaQlQmqJ/0BteV 9hj2AMZIumGFq69zXS+yy68PdELsxnFFcKtfNj7HOLYZ3QxviKv73hQjBFhGb7P1Ho+D 2uA9JeqUCshqrMEVosfw49xhTNwFHL5wW8ryLE02SjWBY+zE6Zn1VHSMUxq921vnFOAX WxjoQEIC8dtqudrDm+0a5kVSC3iNr0LtaW/i0P9XHuAEIfza3n4meFqfxV7oQHFczj8O eT9BDFGx8bpOmB9Jx6/14uua18SRahNKw/aMp0odZUsNLZtxpoxn9ihm+tzwLq8gKJ9W c91Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314715; x=1742919515; 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=4fZ+plV8ov9Z8BdTSvHhlcpnsxWp2MsGy/DzmNzLSwM=; b=N2PS+/xYlyFxHAUYmGXxealJ0ye7Z6cvrL6y9W553s0DQb7VdwgYG0aR/G7Ec3eZfV P3ZfmwILZlC69rfsSk8zL42hpY/6tkUALfig5JECWqqHHza96wLo01pT5wb/uWYk4MSl HMhQ1SxMAh31PE1yzpNIFpslQTn41TIG1cQKwwOwjT6QhPOrvTrb8NWfLQayijFnUwhl 4u+Tw/iuSH1pfh+cTu2b9GduJwOdC7mMd6wVGda/ON/0X+Y04GKVB0D7ANdMEAno6YGf qdXaMVZyVtv/a1W3hT8eVqCDjC4syg9eCBFRoTUbTsvZax7k7gUYRF7ME/qQFLpe3RNk pndw== X-Forwarded-Encrypted: i=1; AJvYcCXu2wl8Q9Gll7RsF9gMK8WCFpKnMfHtvUXgCL1QKgYqXusURouGzKx8LXpY45XX86DnS6mZAw4OXA==@kvack.org X-Gm-Message-State: AOJu0YxpPHelFroK98/2AHyN1T3W4Zk5tS2ZgyaVVn6ZtDeDuo3XtxNz rZoCJ5XN165aPITA+cRChHMTquDexU0PwvgBxyqvMMq07naoE/+C0wVMIdt36T08AlGFPBhnKQ= = X-Google-Smtp-Source: AGHT+IE5r6NZGIAwIlUsfF8t936pPzkXscDur3evGfQYik55htUq2uf1gHv3wGk0726Sq8CrcfH6U2o3QA== X-Received: from wmbgx13.prod.google.com ([2002:a05:600c:858d:b0:43d:8f:dd29]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1e0e:b0:43d:45a:8fbb with SMTP id 5b1f17b1804b1-43d3b9d46bdmr25410005e9.22.1742314714991; Tue, 18 Mar 2025 09:18:34 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:19 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-6-tabba@google.com> Subject: [PATCH v7 5/9] KVM: x86: Mark KVM_X86_SW_PROTECTED_VM as supporting guest_memfd shared memory From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspamd-Server: rspam07 X-Rspam-User: X-Stat-Signature: yqjwz68587gnd87bkos3xdrhj41j95y6 X-Rspamd-Queue-Id: 5E4F014001E X-HE-Tag: 1742314716-362522 X-HE-Meta: U2FsdGVkX18ZfMKichIvIpzzx4ib9FWT78/ucCT5N9WjgcQSco39ceBl70fvicgvwF14gwDB5vDrrg+emimZKU0VgnFfLROeYnP5JDO168K61hNLgsthN+wBOltzyDQhibj/8dOJOA1jUl9maTRx5haMN3AZkOOInQ/w6uy9CZw/vXYZPuVEmrWi2po67xN03DVdCYifIbGW8DeOXfK0Yo8lIojdTyV6tXPr2uZ18yQVjrTbqPhAm9KN/39/EKgkNDbBJD55yIuCgdKjw/cFhyFC39/ah9G723GTQCzhMJsd9y1cuKcWerECu545tgwIRAn7b+0/CAXsPDtxlgG6hz/ukaKBzbae0EtG9889fYkCX8/XCZeaR4QWxiGrxR3EFFoLYaKgMgTWn/cQiUkRZMSqA7xoE+fjxESlc9tvQVHKrt8a3yoyQV4w4j0O9/NCLNcoNeL0HfjT63jWIr8XopwJ13nwYkSAK8pXUrtHG2/F+z5GNQbqemgnLSFdriJMz8nYfUIuhZTLoap5fETLzST8d/KHYsx0KsZ2Y7rqLqNqCvgm4VGoojzlX3Sdgfs7IAN/5GpWgR/0kdNnCKr9aA469CEr3pygV4TtyINE0YkAmOteNfweT2fPF32CjXfCieDs5ytyyJb6AbsUV8YmQn4F5QDHe/ye7ZBUUNt5PW/amKNqnxoEeUGhnReANQXf4n0dTI7q88w2r2ihknZGOObV3/5M667Ix8oumeVZGZnKsw5e84S9bmxumhKSx6NrGbF/Cv4sXDI83NTqoyCjKo38L2e+RlB5Kb3jq3rd0pxOHX6aC10JKac2wm7n7Y+IiUIloYSdKH+BudgMANlh0NOxX7YOdeR1m14DkNAmo9PT/dH/pmZ/capaxinOw/hrty+auOnqcZXEI35pE0IjPLxxyUcthp9FAero8YFlDCvLSevVpX/bb7k+SArAQcCWLIu54LbPn2uxjHOUhUq 93D4OWl8 r+uDPztZqFxxhVdr6fDHjuZUPUYhDZRy1Vs+GjMbQBQ27TkvCDLicTa1sj5Aq0NnBhs+LcJIzdhOL6fddpzsiih+UeurQq0C5Tnp7TXlHmTWjs6B4fFPccnS/uc+Y3ofYua48wsJv8ENDDz8fbmzz9voHRzrML1facv+9NY0Cz7K5J3H6nnOnAR58r/LhyJNrhXw8oue1+1iFt3cT9/+Hq2epV/gffmwHlQ1jv+55dub1GY3NUForMzvPr/ipeUp904hYq3xMwQwD4FoKNGa1Ejfb6aA8UTJvpYSr0dtoVYMqk7WDF7sGekzNOl2WW9i2rl2v8JLmaCmfaIbLIJCz1DGSdroPTvd9glBPd1p3L9oi3nBeb7oXXBOr1V0ELYLq534kTnGKloEDvZe9xSQWycwk0+Mv6Qh3v/8f+dIBy0WRgGZBQpacKzvrWXH98J5TMEmZ9ihaNdA9h7NeVcc52HzK2+hF7GiWE7SG87N6WJyyTfliuYeaxFWyAHAEipRNLzKltyjxb35oeFzJna81lmi41jActCSrdr1pzlumrfn2b3JC9hvy5Zi4crRvt/JfVxQzpRwTq/TzliRkbxpXBvxDCpwYjzr/55edFsFo35viL0KPjppPYcWbdAMJ1yW5caWkzlX6Ndl1zDErE20+5MLEfA== 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 32ae3aa50c7e..b874e54a5ee4 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -2246,8 +2246,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 Mar 18 16:18: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: 14021240 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 781CEC282EC for ; Tue, 18 Mar 2025 16:18:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 53D2528000C; Tue, 18 Mar 2025 12:18:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4EBCA28000B; Tue, 18 Mar 2025 12:18:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3412F28000C; Tue, 18 Mar 2025 12:18:39 -0400 (EDT) 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 15A6228000B for ; Tue, 18 Mar 2025 12:18:39 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3450A81448 for ; Tue, 18 Mar 2025 16:18:40 +0000 (UTC) X-FDA: 83235180000.05.BC8A8D4 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf23.hostedemail.com (Postfix) with ESMTP id 5587E140011 for ; Tue, 18 Mar 2025 16:18:38 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tME9BSMZ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of 33JzZZwUKCME0hiihnvvnsl.jvtspu14-ttr2hjr.vyn@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=33JzZZwUKCME0hiihnvvnsl.jvtspu14-ttr2hjr.vyn@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314718; a=rsa-sha256; cv=none; b=Y/PjkUA79+KDYkYuCRdrFrnQTOmsqUUrpcC8SdfvvVxtsnUtslCqWsMTrU46AatG26YOOu 7LjABsTnQ4OBwyo83PgAGJ6Ebj/eMZzgDVN/ttets3j4ccUpCtb9NtMG5NXWRpRLHO1VJS 9x6TSBJn+8wuCHJgVniC5797xItg4vI= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tME9BSMZ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of 33JzZZwUKCME0hiihnvvnsl.jvtspu14-ttr2hjr.vyn@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=33JzZZwUKCME0hiihnvvnsl.jvtspu14-ttr2hjr.vyn@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742314718; 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=DD7dn7Ly/beG6AZrtqzXuPgQ+MQFh8NjMZMFS4hSOZA=; b=TwB4zUNrFbh/NKUKermcA3RE5pPDefLlqZ8xTJI4EHZ/tEoXdSq3fgbQsz6TvfIxu8vOQ4 LSlFzPPK0JrEXlWLT5AMfV9XZWcyGNJYkYuL3MknS+Y9dmQliKHh+WcgSPVGHP8gGaioDU ywjKJPYgTP8rzN9/URfgroIqzjCKwdA= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cf3168b87so19547165e9.2 for ; Tue, 18 Mar 2025 09:18:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314717; x=1742919517; 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=DD7dn7Ly/beG6AZrtqzXuPgQ+MQFh8NjMZMFS4hSOZA=; b=tME9BSMZTsIMysaF3lGEN1CAwQNSRa0/poD82NexlDc4BQF4jkYO0bjU192x/uTYrW S/ubCO0L+Y567fYoCs2+96mk7cx20peAQgGEH+PKcebSCSMb9mnXvVNCoKC62jLt6e9s 3wTYYPp7yPJjqYEvbRkagqlLgzeV9Er0bm/GwDN8aJoa4t1EEGqBjnda4ZrIqpa29adE NSaAypbdAJrIiKwyyZaVdA5rp0CXDbx8ye4adj7x4qN/cD0TVDLcHy6fyVLgKa4fXFK+ iVc/sfPl04xJ+1jHwyxYGsgFIGGbR9InLZb7pDc7dxxdqlcBTNR0FCX1Cu5WBYWX5uRu fWgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314717; x=1742919517; 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=DD7dn7Ly/beG6AZrtqzXuPgQ+MQFh8NjMZMFS4hSOZA=; b=e2aYrk+Tb/PYhXzRenE3+kKENlAWpgf77g3335lBHzletE5wKjHcLj3VR5SkL3O1/X jMl7mfFXfCIPJABlprflTlYaIPx1M3pWakegMGQz6vc+rs3RC8z/mH4UXWEYjRCYdxZf r4ONBIG79FWGU+5fB1O+QTSBZ7B1tdvh/LAZavoFE2gGSYGJ/TuVuUQZ/TD9fNxTdXYV FVsDE/BOEUlXB0DJvF03FEaD2JXjjEPkp0gXQaxuHPioayz9R8LmXVS0HcqGF1mL/ADZ b6YZZFln0zRVe585LVeYKB2by2x/7QYCWkN3r2R/ntw8oMx9xZ31pTDeik1ec3gjUj/M JIKg== X-Forwarded-Encrypted: i=1; AJvYcCWXnRpjXH1YnITsTv0n5yl1Wsey3XY4GsdpbN2om+42OCOVO1u1ooP1BWTTlNgHNSAgeKRhh6HbFA==@kvack.org X-Gm-Message-State: AOJu0Yzy7h3bclCHPWMOqGBysx2w8BcOCFDe8jRnW0eh5tCKluP0gz1F H13LO2hCivXXikXiSeLvIDbgtT2PCJ1+T2fhhTsAFEecd6WR1SXAxIvOkyzO7g15exl2y3kPgw= = X-Google-Smtp-Source: AGHT+IE7EIJMDoVEqpxWR587eRp2r8+Ir2MgzNO4zB8DTw78LEPUQteJjG5XQUYQcTjpzPemxYUdDq36BA== X-Received: from wmcn4.prod.google.com ([2002:a05:600c:c0c4:b0:43c:fae1:8125]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:310e:b0:43c:e478:889 with SMTP id 5b1f17b1804b1-43d3b7c9e1bmr28562425e9.0.1742314716949; Tue, 18 Mar 2025 09:18:36 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:20 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-7-tabba@google.com> Subject: [PATCH v7 6/9] KVM: arm64: Refactor user_mem_abort() calculation of force_pte From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 5587E140011 X-Rspamd-Server: rspam05 X-Stat-Signature: qea8grbcpocgbs6rmuranu8sy97eytth X-HE-Tag: 1742314718-944074 X-HE-Meta: U2FsdGVkX1/5uOnl85JARoh5hyw70H8Or3BYmErGfigcTlbExIMxtTg7eVW8O0/KksKnHK0wORu2E1hfm3FA6dzv203G8ZduGENDQMFDELKhKVXg4FNoupvIOIT7C/dOvOt7uz6UZr3ODYbnpk8cOw9Bi8QcngL2MMJMrM7RrjwXICMXgqe9jbU6y28cQ66OyV4GATtI56fI3O2wC3QoBUThK8khrebTugf6Q2CCJKIsKnyRVdPlW74myFOPDJ0O1dgAJGSDSNvINsvd3jLlOWlXG2KKU+ue8h4C0iMwKoUISKLH+DWrIu9t7rZfzigCFgiO+uUAK/1gNAYhsf7Xig+BIPoBZfcq/J6Nj1z5a32NuVB4airnxT097XEkNDuRULG1JUq0Qhc81AwlPdUpWTCs+YXrothvHxlDwUyfoUmoHOYYv2zw64TxrRLMYQcZBSMywj8MIebBx+S1UyeaQyjFxuEsJCJr8EvlKGXmLEYGePT1TqVWctP/7TXXnBunYaluAy7Uhtbf7sMvASbDl3GLk5NrsjO8ty7CK8weam3JS8g4ny+rD6GumSX9o0sOYYhaloutgVQdlSgy6R3ds3BXhb8r1iMXlS0e0qImFKUiV7vakGj4NK0YLEYPsjfSkUclxh0COAOfpIlj+vre6LIJ2N9HG2QJ39b6B7Y/+QTkNA6M6YXv3AW1s6QLi5JrGPrje1EMxRWuZEAxN5JPkUxFyL+90sePLm1LqUqY4gTSDmslbg7UE+zOIDVpHujZBcxAWih0kRMnIMQTCSagvQ6IqfE5ljWg8gSoQrQ0fRv0IHvUuDKdTsWKhw8zNhwoDGfb6sw4z+9nDvzA9pCG1q89aC66LmG946CkK7L6jj0lnYRGwYGTdsYtefzRRYYQagA2bW2+cXpNZ/dc1ZozRuFkQERixHC5y/kHXbAYT057Pe60hTxxc6LocOGrxktXZiOkjkx86RQ9X3cu5qt fsI9oN6F C7gAUh/hvmu2Kz/XmPgnxAa42V6HJi6X7tZpqCMqgtUERSaF00RNLSJTaX/2JZJLbPZVddgU9Gqje/zM/Zu3W5wTEoagfstl9hllVpYsa/PXOhQx5b0AVRvpfDPtG8QCuJDLFvDWs+VOsFUKN8KfNLScDAGCJxcS2EY+/HFjKvzuOW/lCL8zpXvVeV8iGvy+ybqt43g65nhn7XkUfbeG2h06WUZJX55pVYsyU+XStZEUixGfbau8sDGzaULpoPw3ljO1vUDVT3L040v4ril+1TS9WlG9vJUbUanuZa2f+PLg8DK1Pa0YVGRCrFtE/oJ/9dD422ApYR9LRobKfrO7mwSaOSr8d2bRDTOj9q/EO6Cxv6gV0zbh7KCBvv7nmeaiZ0Ysotue7ufs/Tnky7Ynf855n9F5vpkhdf0Iv/VRT3JcwiJo/5RyCuQGHNvHjX2hdKr9abCi+mZGBDbKUCjQ66AZ2DR0kIbCrmLLGVZl0OdZgEAFWzPSjEiWXZmkAYwlSJk0Fx8MNZsr8zItzoTlTNCGbVwRzzIeb7ktdmelfAVs/AlngluSM/Vcd35EAiVnR7HJOQLllglB3hkIvHaiw0urpNPt06blCx7UQ/rnEa85u2SlPIdD26k6vfGFfwZrt9ReYP30ptQhpZb0x+aInrVmXOQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: To simplify the code and to make the assumptions clearer, refactor user_mem_abort() by immediately setting force_pte to true if the conditions are met. Also, remove the comment about logging_active being guaranteed to never be true for VM_PFNMAP memslots, since it's not technically correct right now. No functional change intended. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 1f55b0c7b11d..887ffa1f5b14 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1460,7 +1460,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, bool fault_is_perm) { int ret = 0; - bool write_fault, writable, force_pte = false; + bool write_fault, writable; bool exec_fault, mte_allowed; bool device = false, vfio_allow_any_uc = false; unsigned long mmu_seq; @@ -1472,6 +1472,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, gfn_t gfn; kvm_pfn_t pfn; bool logging_active = memslot_is_logging(memslot); + bool force_pte = logging_active || is_protected_kvm_enabled(); long vma_pagesize, fault_granule; enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt; @@ -1521,16 +1522,10 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return -EFAULT; } - /* - * logging_active is guaranteed to never be true for VM_PFNMAP - * memslots. - */ - if (logging_active || is_protected_kvm_enabled()) { - force_pte = true; + if (force_pte) vma_shift = PAGE_SHIFT; - } else { + else vma_shift = get_vma_page_shift(vma, hva); - } switch (vma_shift) { #ifndef __PAGETABLE_PMD_FOLDED From patchwork Tue Mar 18 16:18: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: 14021242 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 1CDE2C282EC for ; Tue, 18 Mar 2025 16:18:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 189C328000D; Tue, 18 Mar 2025 12:18:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 13A6B28000B; Tue, 18 Mar 2025 12:18:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EAA6F28000D; Tue, 18 Mar 2025 12:18:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CAAF028000B for ; Tue, 18 Mar 2025 12:18:40 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 1CA6D14141A for ; Tue, 18 Mar 2025 16:18:42 +0000 (UTC) X-FDA: 83235180084.06.639B532 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf11.hostedemail.com (Postfix) with ESMTP id 6ACA24001F for ; Tue, 18 Mar 2025 16:18:40 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=CGcZXjgp; spf=pass (imf11.hostedemail.com: domain of 335zZZwUKCMQ3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=335zZZwUKCMQ3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@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=1742314720; 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=JkKRvohaR/R6uYAMTdXb2czEM6XwK4bQo507HmHpTIg=; b=VF8S0GBqUwneCyULxm8gMtphOxLdKXa11bo8JVcUdNZxnpc73HcfjKRtufD+3m0evORIlp oiABV92SjVc10JQB7qu5ykBvjC7bToHs+6nCXDS/h2EvIte46G2gXG9DMBPFY8+WtMsB5r e0OvSHgrl5JZGwqmib/wxzAazWOPKRE= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=CGcZXjgp; spf=pass (imf11.hostedemail.com: domain of 335zZZwUKCMQ3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=335zZZwUKCMQ3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314720; a=rsa-sha256; cv=none; b=6FksiCBZTQBv6hwKR+QqJKbqbuAJliM6xCcztE9irCW9OC5O0emrOzAlhmEQ4RnzGN0a96 UYQjfRRn28YZExamlFOZ1Q8+/MKJKEfpQwyRvqtnA31xDXuLNOYn36L+d3PllM8GVtvApp F6RameA8V3f+VoFNLvSqWRqNhnBvfV0= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cf172ffe1so30678895e9.3 for ; Tue, 18 Mar 2025 09:18:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314719; x=1742919519; 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=JkKRvohaR/R6uYAMTdXb2czEM6XwK4bQo507HmHpTIg=; b=CGcZXjgp2+P+AVaU1OJHEfttZGwixcsK11kM7QVN6ZbwKjrFjk6xSnjiygpMLeIr/k 1bRlLrsis5VrHaBDZ/74BveFDMARLFesXrhO9plxTGk3LM4efg77cjViw9i7P9N0xo+k HF45GgDvGA29g3tBkR6NJthw+2DhoQqflnjjfesjdlPGUHo8YT2hhm/JWS8aMs9xqkXt 5rm0kW2JMr1HpvDlJ62ZnikxCMJDeB7rPRWSkGy2dLV12XA51zBLrlZx8pfaijgLsFuv jZTrcVLOz/xvEK2MfT65sYtfL5UUdhCOWgfLYebac3DMLG3mkal0NCr+tzInOLBUllBK jpsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314719; x=1742919519; 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=JkKRvohaR/R6uYAMTdXb2czEM6XwK4bQo507HmHpTIg=; b=RHRrzCz8Sgbe+usye5mA/6qzgTWZdugBLkY5wiUxkeD5bJo4Cm9mA7BGBtxAHvVx5P WPuj0jE5kgSPtq/UMyAbpNeSZDSptH1MLU8N5urRDHSle/2A9g6nKn4CpeaiJuo2SCbD 7L7W9EBvT/kmUzVX6orJaPeo+kZn+HTbiUYe361+kng3VuCKsqStoHePxay/r/PYGv+8 Ago9b1lFVsoFLj2DMHt+751e80itbs1c24PQsG+DrDFeKKeRE1fO2LH43UKiUUXVfxtu bi6j0w9Svkn9PPjrZB4PKApdIip2F+Jn+o7uqkKYMVcgqGurNLQ5wH2zdRBVYfocAFcv IOFQ== X-Forwarded-Encrypted: i=1; AJvYcCWSiPDPWDj5TIxDhzNwOYsY8Q4566hGMCw9x5sN8rUuTX6oICSPPKjmWHxFg2BnBIumGh3uNVYr0A==@kvack.org X-Gm-Message-State: AOJu0YwIsmmd0AWACagguAipPHV+9Mac4XAgNd/AfrIXCEiEGsEtDTXD 3lUF/RInQ//RWPEN27IDBJ3M9ghutBDRJXJxqnk3Dlo/tIUfMIOf9f3YxQBlzmWV1iYlHSHAMw= = X-Google-Smtp-Source: AGHT+IHYroJwqJU3DOFD6+1icl1H3re3zIaW22AGeBYXA+tL6iWDUUjy9KrUK9oxHqw8vDAQL5StNoyn7w== X-Received: from wmbbe15.prod.google.com ([2002:a05:600c:1e8f:b0:43d:1d5:26e6]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:354a:b0:43c:f969:13c0 with SMTP id 5b1f17b1804b1-43d3ba284edmr36280275e9.29.1742314719101; Tue, 18 Mar 2025 09:18:39 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:21 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-8-tabba@google.com> Subject: [PATCH v7 7/9] KVM: arm64: Handle guest_memfd()-backed guest page faults From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Stat-Signature: hn8w3f3andbfusouq3qnboth4kk7odiw X-Rspamd-Queue-Id: 6ACA24001F X-Rspam-User: X-Rspamd-Server: rspam09 X-HE-Tag: 1742314720-781257 X-HE-Meta: U2FsdGVkX18jh2+1bjJzjVdL3qNQcWFT6uGrV6YXrgZW9Jv9Lb8VvjJdMcQI8DrW44ihRMDWnQnXPv+Tcz/BKV3uJggsDQh8HeVA1xP5bEuE9ffhaY63a0jEu31r/sB3k/vwbtbhpM2pRl4bGRO+ydObJWt/EvdIp3U0oG2Fik+I1965lgrP0eoRV9tqaPSt3rGx8m5atx5m9YbUrWmdWGgBD2D9Z8zwau0msvFRm0loFWpDInHIaKYvHISuXcwdaNljUBRmzTGqiDVghxWUV0ZUwQfaWDSPomotxroKbt+QA2er1RI8+LdPNfONpEQ+TN0M9h/OZPSKyR97CfDxc/BUPqzCWz0v7UMRNJP7CA1fMDpf0KMAQgQKDkMDfxPiJ2Igem5VopRAqh2KAoFE+U87r7OImG1wq0OzMTop0leCBbbWVAzAHcybBvmIaPB3emYX5C4FuqQBI1OLnLJjAU6ak/3pdCDrJIH4mAQ3l6TYWdQyMN9sXZ5BGrfWNF9tlQSsLoSVZZKlnhElNWo7G0PlkqDQa3+9NMqTVOpYC4mtbn7cogvviMkTr976TYtTwf75Xbcg7UKDAPocL2nMTV2Jermv57qA0exmeFDnXDd+8fOPuBLz0W6skG20mMfgHbCMy9m/grVATSYihxzHSb5IKsoLqxxNr5fwZYqeL+9lcOlHdRaOFJDBW/ML9o82d/4aj0EgspWfb3vEgJjArkru3nPIG6i0MRHTPW5Epe/Fbb8dQS9THNWa686H6oN8/PbRS5+1pyGcfJoPRvQysbfZe8ujBiLTSQo5XVA+InRjvu/11BMXf8msxGTwMvlU09tIx/nVpbj6wApHte1fXxSsatwwkQojUud1q2czWcujVnPGKPjdSXcccNhs0XsOaLa7hlR1EnRqBHCFWbqstiYfmZfGdRfC6Ts54d9aFPd+ry9xKzpczBT5rfUShCS1uBtGJbyVk5cgBy+PSbX cwdypKWG ErtWoW3tZlHk9UgmbSDeZAHFTbWCVTvS9jZJvPLfaXXxcVhlcxJDysC/QlHknDrSNQlIZE6WNUeaHoB3MQKIADoN4aFI5ZBleaKZou66pibXNb4PHhddzKfz4TdDHQjZuQGs/jHj4CT0UIOK4R7QwiT+06QIGzS0TBNiyu+Ai76ESsX5WpcQKsNTZ9UWO7K06YcosmsDEX5gOGyeNETgAMedgwJwaZq7WXShh2bkowWWYM54KfVfo1YsBjolFs6zJJSp3+RI3NydDvBE+ocjOx0i9wCfqUoNpdmXuLDLE1lP4mZ1YYdevEg+2TYtgmu++g1siFZ+fNjipElTGHKOJnTHjQMJ8nvzvrjQtPNtIhieootE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add arm64 support for handling guest page faults on guest_memfd backed memslots. For now, the fault granule is restricted to PAGE_SIZE. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 65 +++++++++++++++++++++++++++------------- include/linux/kvm_host.h | 5 ++++ virt/kvm/kvm_main.c | 5 ---- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 887ffa1f5b14..adb0681fc1c6 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1454,6 +1454,30 @@ static bool kvm_vma_mte_allowed(struct vm_area_struct *vma) return vma->vm_flags & VM_MTE_ALLOWED; } +static kvm_pfn_t faultin_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn, bool write_fault, bool *writable, + struct page **page, bool is_private) +{ + kvm_pfn_t pfn; + int ret; + + if (!is_private) + return __kvm_faultin_pfn(slot, gfn, write_fault ? FOLL_WRITE : 0, writable, page); + + *writable = false; + + ret = kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, page, NULL); + if (!ret) { + *writable = !memslot_is_readonly(slot); + return pfn; + } + + if (ret == -EHWPOISON) + return KVM_PFN_ERR_HWPOISON; + + return KVM_PFN_ERR_NOSLOT_MASK; +} + static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, struct kvm_s2_trans *nested, struct kvm_memory_slot *memslot, unsigned long hva, @@ -1461,19 +1485,20 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, { int ret = 0; bool write_fault, writable; - bool exec_fault, mte_allowed; + bool exec_fault, mte_allowed = false; bool device = false, vfio_allow_any_uc = false; unsigned long mmu_seq; phys_addr_t ipa = fault_ipa; struct kvm *kvm = vcpu->kvm; - struct vm_area_struct *vma; + struct vm_area_struct *vma = NULL; short vma_shift; void *memcache; - gfn_t gfn; + gfn_t gfn = ipa >> PAGE_SHIFT; kvm_pfn_t pfn; bool logging_active = memslot_is_logging(memslot); - bool force_pte = logging_active || is_protected_kvm_enabled(); - long vma_pagesize, fault_granule; + bool is_gmem = kvm_mem_is_private(kvm, gfn); + bool force_pte = logging_active || is_gmem || is_protected_kvm_enabled(); + long vma_pagesize, fault_granule = PAGE_SIZE; enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt; struct page *page; @@ -1510,16 +1535,22 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return ret; } + mmap_read_lock(current->mm); + /* * Let's check if we will get back a huge page backed by hugetlbfs, or * get block mapping for device MMIO region. */ - mmap_read_lock(current->mm); - vma = vma_lookup(current->mm, hva); - if (unlikely(!vma)) { - kvm_err("Failed to find VMA for hva 0x%lx\n", hva); - mmap_read_unlock(current->mm); - return -EFAULT; + if (!is_gmem) { + vma = vma_lookup(current->mm, hva); + if (unlikely(!vma)) { + kvm_err("Failed to find VMA for hva 0x%lx\n", hva); + mmap_read_unlock(current->mm); + return -EFAULT; + } + + vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; + mte_allowed = kvm_vma_mte_allowed(vma); } if (force_pte) @@ -1590,18 +1621,13 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, ipa &= ~(vma_pagesize - 1); } - gfn = ipa >> PAGE_SHIFT; - mte_allowed = kvm_vma_mte_allowed(vma); - - vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; - /* Don't use the VMA after the unlock -- it may have vanished */ vma = NULL; /* * Read mmu_invalidate_seq so that KVM can detect if the results of - * vma_lookup() or __kvm_faultin_pfn() become stale prior to - * acquiring kvm->mmu_lock. + * vma_lookup() or faultin_pfn() become stale prior to acquiring + * kvm->mmu_lock. * * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs * with the smp_wmb() in kvm_mmu_invalidate_end(). @@ -1609,8 +1635,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, mmu_seq = vcpu->kvm->mmu_invalidate_seq; mmap_read_unlock(current->mm); - pfn = __kvm_faultin_pfn(memslot, gfn, write_fault ? FOLL_WRITE : 0, - &writable, &page); + pfn = faultin_pfn(kvm, memslot, gfn, write_fault, &writable, &page, is_gmem); if (pfn == KVM_PFN_ERR_HWPOISON) { kvm_send_hwpoison_signal(hva, vma_shift); return 0; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3d5595a71a2a..ec3bedc18eab 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 Mar 18 16:18: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: 14021241 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 025DFC28B2F for ; Tue, 18 Mar 2025 16:18:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 809E328000E; Tue, 18 Mar 2025 12:18:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 78EE128000B; Tue, 18 Mar 2025 12:18:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5E3F728000E; Tue, 18 Mar 2025 12:18:43 -0400 (EDT) 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 3484828000B for ; Tue, 18 Mar 2025 12:18:43 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 486ABBA527 for ; Tue, 18 Mar 2025 16:18:44 +0000 (UTC) X-FDA: 83235180168.13.C645501 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf26.hostedemail.com (Postfix) with ESMTP id 664FE14000C for ; Tue, 18 Mar 2025 16:18:42 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=z5sSpqAU; spf=pass (imf26.hostedemail.com: domain of 34ZzZZwUKCMY5mnnms00sxq.o0yxuz69-yyw7mow.03s@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=34ZzZZwUKCMY5mnnms00sxq.o0yxuz69-yyw7mow.03s@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=1742314722; 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=UnXOtT0FQ4/1eHnhIJ4TPfV0aGXMBiS31afCbN7dx5I=; b=veh7G9xNJusa7i5o3gGLD6gulA23NxEuMNrjVC6dHpuDfAbxYQBtLACeCyzx3/aA76JgyK Ogn4S5cv6iTQePzs17+QnfjfCEn/9S4n4brjZv1EUzrz8ux9+bpR2t2f6RE/DYHek6IKT5 egd/fOuig5slp39QGS+/31RuxgIpUr0= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=z5sSpqAU; spf=pass (imf26.hostedemail.com: domain of 34ZzZZwUKCMY5mnnms00sxq.o0yxuz69-yyw7mow.03s@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=34ZzZZwUKCMY5mnnms00sxq.o0yxuz69-yyw7mow.03s@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314722; a=rsa-sha256; cv=none; b=cRUOxbOjd29khF/mZYKro0AM0T4oTAUgZPVID8JNKiew9ntbZp4fs0CGyfZ/vceKIE/Xmj vPTbMdQn1xPed/ooPY3700BX7Ssja8hYhM7chd4yFzZMKXrMtQVJGZRb0ROGLchG+P7lTJ N7eFr1Xqd9oTURcYPN0tjW6Xp78vVgA= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43cf3168b87so19547575e9.2 for ; Tue, 18 Mar 2025 09:18:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314721; x=1742919521; 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=UnXOtT0FQ4/1eHnhIJ4TPfV0aGXMBiS31afCbN7dx5I=; b=z5sSpqAUgJuem2zUfoki+1raZNceWOpHyhAl7CdHnmRc+1iyB73RuGZ5XAumHKbEPl dPmcGKWihLt24oVGdC2i3nE9skLSElBZF7TUBwMG0fqZA+v3rwqPhkFCqv+ZxyDOQre7 WatKdVXVZ/eDXcWEg6+eDBeSNxAX5xXcnZyMN26LCLmVWQwpvG83hYsktCLzmqWVwa2Z /KkndZsEJm61/p07/mVJnue+nIUo4UY9Mcrse45SDc1uufFoPMm6KH4ynh6uO0OF6ECG lnV7AegcQ16WcByHVBp/WztEyQqVAITaRpy+oiRPVp7A+mgz/ArCjQTfJ6VqljNfZHxC jOow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314721; x=1742919521; 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=UnXOtT0FQ4/1eHnhIJ4TPfV0aGXMBiS31afCbN7dx5I=; b=CQ4u4H6YmOyn09kS5PwX+kuQ9ADg+sJjRb6CIJyVvjEpuvZPRLR8158EW7ATfcWspr LXkZijcTBisFnfOMHDqQ0ydOS8zud7ZrcOCLaUXi4I+Vponatv/PZH3JgLeRCl7a/Tss t6MJxmOmUkWeZaF1VMATWtt8JJt4dGs6aHyxCLxIDDWBpAW1mWq6uHdeqduE+6I2xX+G 8pzoIYZQgKa2p0Y7E0GLaYPhlBlChRTJISaogSD6npWx0vzVe9EZvvHycslvP+TORXAZ QAnt3gaH5qpV0NA1hr+f+WR9X1EwxcWqnkEZfoShp+8fAt79x16azLuk7TDYxiXEE0qZ GoSA== X-Forwarded-Encrypted: i=1; AJvYcCVj/Fjkk+nvFPEGaZ77+rO+3b14Ahwj9g4+CE3dH2yVrbbYFTngBwbEX0CweKo5wRMemAGUxHv6jg==@kvack.org X-Gm-Message-State: AOJu0YzBak1s/dStgxplDnrUcD3EFv5rUYnvMtO/USvlBLyo1C/AvxJU JfvxLa4T5oaGQPjvLhz7CgguIG2MLhxxh1bnTtELENH9Cd1L0I1Wu4ROPPOjLX24hDLdMst88Q= = X-Google-Smtp-Source: AGHT+IF9uTFjzpmaEzCIpQhbB++4V0kLzKxiQ3A1PdNJXhx/vKrnJQ5sz5qzaE8mmmXqSH2KhxB8aRlH6w== X-Received: from wmsp26.prod.google.com ([2002:a05:600c:1d9a:b0:43c:fcfd:1ce5]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:310e:b0:43c:e478:889 with SMTP id 5b1f17b1804b1-43d3b7c9e1bmr28564975e9.0.1742314721054; Tue, 18 Mar 2025 09:18:41 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:22 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-9-tabba@google.com> Subject: [PATCH v7 8/9] KVM: arm64: Enable mapping guest_memfd in arm64 From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 664FE14000C X-Stat-Signature: pcud87rf6tnreih4panct5ezk3rqyoy1 X-HE-Tag: 1742314722-493124 X-HE-Meta: U2FsdGVkX1/mo5NXHqOpmTfQWro4BJBpwcPAOlFN6rol2tVxFHtZ8F9FMK3GQl1vaWbS4lsRr93t/Jh5OMrqWY6l1lrbk2hxjYkmeRGwkJubE4tewJBZzdw+AmxCHVvv+DKzmj4ewAHJHKGfS3r4eD3a0nhUYI4JL3bOlYqm4d7Kcs1oCoMGTS+gyncpoJgMRWzAOdhmrx774gK0ifJ8Kv4gytZIxpI+QHrll3x1FeGIZj7cgKk55JexSnsgSNZVS8xzQHZ7czsLz9v8R+XK1lkCNSBhbNhRrGYtiPhgXN7t/ZHjv7tIiA3s2b6e9sP64OWmggV+7dBFyXeQRH9qkvsBUlMslvuEFf/dnFEULDPTHUiesp2zWw/PiruK3yydiRe8gomxYy2yWw1LN7VivP7pAjDHm/eV4ZiHKgp36uxsOplqKoySGPV03nF9ToqUz09s/DYBpcfObVAcEOd8GdI63YAQkKkyIAJ3BmClsT+hieO1VgPn7ipRhkwyTNsxdJTa8w3qFPuu6gZRlQRRBlQz6xXJCTml5Ex9CzgG4lKiQHJ1trYD4V+N64Rb62IhXY301BVwZQ/RDZK5ujPLyhwYSTFLs7H1opVwU1Zwwiev3XjZ/fmVVrdjMB0zS3927uE6R+50w8Pegf5Rzc+7D7jb/U0cCD+XdJLrAFg6dr92O7G8Z58akWYyM1MEQ2+w6axLRsDlfn6TQMRNUq4Fwm17JmUS6ldqTejNkMJPyN0cZiz/ry5Dpt7fC6HcoLPwTCkI2PYEqXg0RpK5kF19eW07MKB3S7m3668dF9uCfNeddJ8HxLGcv3NXcX7Up8VZCrKL/OoIQSJkzESSEedakuR2CYXpYR8XPViN3c7H7L1nQmDABKq/QznuxmsKKi/FhVjs4aMtw7fwiK5WiDhXNYuAsoGe3T9FyX41cH+fA4k+sv3F5QAfpyn5WRIFYB+lCK5esPl2iOVsSXLWfz4 Jv4EXJD9 wc+DWSNSGq9lw0VT/2kCmyso/ezLgIunObD1uBoby4uwri/JWve+5Di6N3mPo5yVxH8MCeS7+iT6KRUWXzJmysjS1XJQHHQIixA8+HpfZr5ZP2Ko5tEMTp/0CnDqJr39alt/zyeuhQflEOjfvM/HMevgFiQswK00J3zemv2QXDfWcMTBC4GvVHqZV2PIJpeQP61486qiauEBzj3D9FAmZCaAigPKTJDl1qJLLIip8C3LRtqhlIx/D9tDGWKyuO/4j3t3rIpNufZiXsOnU5ILdtulKE11jprXXnQGFT9bx061PyICDuOLJQCxQs76gwXKrDrpreUYQkqUCoYiVNsZeoHs4uM6SUPItITtHWcHVaUML4C6zRaooDHTxbf1bqI2v2xURL0giwm42poG3dXSRtnjbLA4G8Czo/JcTEsgoRfqQJwG3Wfq0DJi56ovI8SfisFIT76ci32OvPVbp7TMOB1LJR62meM4blx/ew0bclcYhTQiuUndCb48cR+y69Kp5DwVnkWmoPj4I3BJl5rMBcQs8zieUeZtOW3q7PxQKoa7wTn9Sdn2dBmPKsLVNP6zA6ZqZ4oKcwftpG1nlxQYMGj306NnlAIfJ0J3QiZVb6e4PJBM6T8bmh2Oh5PnhiStY+plquf75xSK9OedM9FMYZLodpi/E+bO7ddUrtLsAJL7Vn42JUKWWmcLMFzpzmA3mqa11 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Enable mapping guest_memfd in arm64. For now, it applies to all VMs in arm64 that use guest_memfd. In the future, new VM types can restrict this via kvm_arch_gmem_supports_shared_mem(). Signed-off-by: Fuad Tabba --- arch/arm64/include/asm/kvm_host.h | 12 ++++++++++++ arch/arm64/kvm/Kconfig | 1 + 2 files changed, 13 insertions(+) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index d919557af5e5..4440b2334a05 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -1543,4 +1543,16 @@ 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)) +#ifdef CONFIG_KVM_PRIVATE_MEM +static inline bool kvm_arch_has_private_mem(struct kvm *kvm) +{ + return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM); +} + +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) +{ + return IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM); +} +#endif /* CONFIG_KVM_PRIVATE_MEM */ + #endif /* __ARM64_KVM_HOST_H__ */ diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index ead632ad01b4..4830d8805bed 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -38,6 +38,7 @@ menuconfig KVM select HAVE_KVM_VCPU_RUN_PID_CHANGE select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS + select KVM_GMEM_SHARED_MEM help Support hosting virtualized guest machines. From patchwork Tue Mar 18 16:18: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: 14021243 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 818E1C35FF3 for ; Tue, 18 Mar 2025 16:18:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 737D628000F; Tue, 18 Mar 2025 12:18:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E93B28000B; Tue, 18 Mar 2025 12:18:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5125928000F; Tue, 18 Mar 2025 12:18:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 2E19F28000B for ; Tue, 18 Mar 2025 12:18:45 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 6C655C141C for ; Tue, 18 Mar 2025 16:18:46 +0000 (UTC) X-FDA: 83235180252.19.4D756E4 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf30.hostedemail.com (Postfix) with ESMTP id 6688D8001E for ; Tue, 18 Mar 2025 16:18:44 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="J4+C/Dmh"; spf=pass (imf30.hostedemail.com: domain of 345zZZwUKCMg7oppou22uzs.q20zw18B-00y9oqy.25u@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=345zZZwUKCMg7oppou22uzs.q20zw18B-00y9oqy.25u@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=1742314724; 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=YWV37Fu+tJoPMYhPX//LQY4FHmLdXa7vPP9UtI4St3c=; b=xS8tL6uWizjRPqs4JX07N8ccLQJcYd3vcPrcgf+8v38V8AUtOPCT8k2MlizkaCWcwu3947 pTWd/UMNlWrVfdvLN5uBksPkhycPHUs3IxysUvGuLf7u5K8eW3WXzxDc3KUzBi8K+agGFa 9vfUl+hga2Bp2w8KeYB6DAZywlI8xTs= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="J4+C/Dmh"; spf=pass (imf30.hostedemail.com: domain of 345zZZwUKCMg7oppou22uzs.q20zw18B-00y9oqy.25u@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=345zZZwUKCMg7oppou22uzs.q20zw18B-00y9oqy.25u@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742314724; a=rsa-sha256; cv=none; b=d1/UdRBXBNYKJP3Gf6HJUXoicM/p8T6Q9bxZAceaMXcKuFsOwu+jysMvB5mwZ3oNf0g2KX mXWeTTrkokaGlkHtF5gfp+R9wgcbKkWBJC6/cJ7D8QzBEZYDQqmHjUuVs/IfTSr3nlgS/W MsBn06JnuznxI+zSoBk4Z3GV20kDIh4= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cf172ffe1so30679415e9.3 for ; Tue, 18 Mar 2025 09:18:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742314723; x=1742919523; 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=YWV37Fu+tJoPMYhPX//LQY4FHmLdXa7vPP9UtI4St3c=; b=J4+C/DmhJ/UtVqtI4FkurSbzENr1mtXu6rA5/pqy6vKn1ZemgcdU1tK6hgTlnH+6lD UDsOU3cRDm7JDyVoRufUVApgRmwORhByiZ/kGb4r3PDxrSsmg0H8RqzKMIXTvr3UDk53 T8gQQHa3p4ne2VO9gL/mREXQxyG9xcu0IkhT4QW6EOtQqGqBQ3q2Q/+lZF+2EGvCkFRG FAayrTvmtJuSA71NY/4BtkUaABd7clJoOhLw/sXbrLocci+oAeyAbYXt14/RXue0JkLF k5kD9fSIS/WgViJz/fHvuUvfwp5LZ20HE7FZaCrtGmhR93u8y5KYMiBQ+pli/0SCF/BR zU6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742314723; x=1742919523; 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=YWV37Fu+tJoPMYhPX//LQY4FHmLdXa7vPP9UtI4St3c=; b=FrwFnCWKPbBNJhPTop0HW5fCdlcLphyuZMC5E/bVQ8YnMLRlRwjUi7RW8kACzYgT3n icBW7y7BKPbNqFwpl9cPg1fQxhALfpgA7NvLutD44iHHNg2l73y83EJ8EQsDEhSJA1Dv CUCyP0VV/yQcjyBb+sA9dedi6dmJzzm34m2MZuSMzacl+tdegthKF1STveywkxqi2YV3 f1jWbUxElQJkvgt803m2PSsdZzGg/FJC4WD2FWUqv3chk6zQJdIfWaax5KVU6pEUgBMg TB05Vn0IKcFNrWDk8OQ+/ZmYKt40rb/lfXSOU+bdBlj3bnYuMzT4ot+fCkNash8YcV4t /yaQ== X-Forwarded-Encrypted: i=1; AJvYcCVepeezrpke6V+J1w+zaSE8VnYjV9Bn3BOY8x0NWyz1tThCHsDQAzc0pfJv4amRAmP3YFaP5SG2/w==@kvack.org X-Gm-Message-State: AOJu0YxnN5J573wcJkYE62PhaKN+UxZH8wM4tcWrph6Wchj4ZlJQuINw i8o1EzvVFWchNS76rv1KW+h0nrO84oYfIVcEpkihSKRwfLjBpA44wX/Y81o9BKNVQ1AG0zegUQ= = X-Google-Smtp-Source: AGHT+IGRTYPnfa8CqiXnFH9ZNBBgKbN/7IfwN+GVa+iyNbSKldeysOLwqVRPA45JgaTBntykYDM/9tDKvA== X-Received: from wmbez8.prod.google.com ([2002:a05:600c:83c8:b0:43c:fce2:1db2]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1909:b0:439:9a40:aa0b with SMTP id 5b1f17b1804b1-43d40ec6496mr3290515e9.25.1742314723020; Tue, 18 Mar 2025 09:18:43 -0700 (PDT) Date: Tue, 18 Mar 2025 16:18:23 +0000 In-Reply-To: <20250318161823.4005529-1-tabba@google.com> Mime-Version: 1.0 References: <20250318161823.4005529-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250318161823.4005529-10-tabba@google.com> Subject: [PATCH v7 9/9] KVM: guest_memfd: selftests: guest_memfd mmap() test when mapping is allowed From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 6688D8001E X-Rspamd-Server: rspam08 X-Stat-Signature: aueodiothbe8ywx3ojrgbaiwfq7wxczg X-HE-Tag: 1742314724-206540 X-HE-Meta: U2FsdGVkX1/+a/HUfSsc5P4FquexXTts635o8qV/FVQ4jMB8W4zzUCi+8SjPiPE7M3KQIxKOYr1ePYGGXTRznm9nQiY+e86KS5urGSKevkxELFKWeDHJjY1CpPG/g1PlqHcEMvNKhYLbysDyQT2gmeZOFZF3mfx1Uh7Pew/GbgXCvpCyY0PQH9dUjacsDitr7SlmgzD327D86UDj8ogr58w5bZzyFZaJAAl9mIvcZwQEzbJ+WCj17gl6VS82rUR20wgonJJeMj8jisUKJZhxTBssvlJlbTf4dKq3zKuhyNAEzuWiJH/IL6nD/AJtOduKsI9r14Dq4+KQPtDfbHTC+ZdbUaaTM6USXmRqZrRjtFZWfNBmNGoKP5KGiqzNuH5bxI3Hwy882k6DiVpMkECMMrARPJGy6AzemhDNz2xxYVld6fmer5XNbqm/Q7Mj/VwMeVpQMbu9zgEjJchKGEPC2ncyoGDAAwwt8iOnuSS79FUI2rNlPgVeBCXC46YN+z+DwEesdsVGq9yBE507AxYBk0PyRQ5iqzw+f7jqC3YOEK+CjV6x2suJ50FMIk+SojZyzQmBUv20bExxAg5PU368lIwFB/cMtvd50I4NKDF+FVWj0lO2PeaBC3iHEZof8oc2v9vGokqGgijzfiqbJPouvXcEIlddRjUxdGud+X+W5UOfujbJG0F3+wx6IDPSTw/lfF7S52a16D458+5R9g5YY6U20rPCS9VKyFdBizAS34nDCYqpqfZSBHGekLKBuONg/QQDxLHrBp4uPEyIWWr2xehY5yTM0x87HYPQKaIhJ9QGmYNl0TC+RIwlHS+e3pu47dUkxoiPX+liuCHMot45JlFZrivcXAewDG9U+9M1Wmv4QU0iZ500ksQMQH1Sz8yVerHS1ghf7OUoBUHbYc2LMmk4ZZ+X5T37yx2l/w5buu1jY+Y2iFNopdGzgAwYTrWI5DgJE0Ry4zOv2RAXwgg A1j6vQb6 2H3viDpG7hkIVafVpWWljJmDaq55wyancu9u1mRTXffsq1EZl6k0BnoEYWRQ3u/iX1+OPLRyG2oSV1RA8crRFtH+d/b3MYcjZYVmT7twVaCZJBeML42Rqy/WSDVUu4tQoO1bnt9dXlpZr37ogd023e3zb6AYLnxEMs8QDEUlpgl1k/MRgMpqFbyp71kXVY1Ofr2zcaz4Bzx8G9grsUXSBpVJgvlgDK23ufuW8vm5UTjcaygozObdfQbN3ww2PV9cr/JaKUdJQqCbA1JMrQZ7mXtgXO07STn7koUUZD37FdC3UIcjYY2r7Oci3Oz7NTUCxeC9LKEJgoK97t/XMiXeeI8YBnnQMWNqFysDe11ObCup7weJwbEJVpsGU2cdqDg+MDFOYFfaJv7FglszyOWT8d0PnjbNqu9AqkD7pRlqpHkWIo5IIEn8w93UoFlQBXiQhMNZ+fBPnLA06DPglSznt6B8JOy3QacYIpKBHuYzPtfpiqq94RCpAtLw6r75h12oepG9U+0uEQjSpaGyNnjRQM3ARpFHcoxtRasgPE7GUrae/eea09lK3Hv0CCgYNGn0h+CFc9fnxxZm9oHcPZJSyPPiqHAAFsPwO9aZ6mJZoHIklqEgKikBmdvIkT/ouv/Ftm9Hc0h0HKqZbWLwlQ7smbXxCzI2MzGWTxJZZQuNAZQ7bOlG69h5yIuqHS83HqDhp9+fF 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 arm64. Signed-off-by: Fuad Tabba --- tools/testing/selftests/kvm/Makefile.kvm | 1 + .../testing/selftests/kvm/guest_memfd_test.c | 75 +++++++++++++++++-- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm index 4277b983cace..c9a3f30e28dd 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -160,6 +160,7 @@ TEST_GEN_PROGS_arm64 += coalesced_io_test TEST_GEN_PROGS_arm64 += demand_paging_test TEST_GEN_PROGS_arm64 += dirty_log_test TEST_GEN_PROGS_arm64 += dirty_log_perf_test +TEST_GEN_PROGS_arm64 += guest_memfd_test TEST_GEN_PROGS_arm64 += guest_print_test TEST_GEN_PROGS_arm64 += get-reg-list TEST_GEN_PROGS_arm64 += kvm_create_max_vcpus diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index ce687f8d248f..38c501e49e0e 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -34,12 +34,48 @@ static void test_file_read_write(int fd) "pwrite on a guest_mem fd should fail"); } -static void test_mmap(int fd, size_t page_size) +static void test_mmap_allowed(int fd, size_t total_size) { + size_t page_size = getpagesize(); + const char val = 0xaa; + char *mem; + int ret; + int i; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmaping() guest memory should pass."); + + memset(mem, val, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, + page_size); + TEST_ASSERT(!ret, "fallocate the first page should succeed"); + + for (i = 0; i < page_size; i++) + TEST_ASSERT_EQ(mem[i], 0x00); + for (; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + memset(mem, val, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + ret = munmap(mem, total_size); + TEST_ASSERT(!ret, "munmap should succeed"); +} + +static void test_mmap_denied(int fd, size_t total_size) +{ + size_t page_size = getpagesize(); char *mem; mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); TEST_ASSERT_EQ(mem, MAP_FAILED); + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT_EQ(mem, MAP_FAILED); } static void test_file_size(int fd, size_t page_size, size_t total_size) @@ -170,19 +206,27 @@ static void test_create_guest_memfd_multiple(struct kvm_vm *vm) close(fd1); } -int main(int argc, char *argv[]) +unsigned long get_shared_type(void) { - size_t page_size; +#ifdef __x86_64__ + return KVM_X86_SW_PROTECTED_VM; +#endif + return 0; +} + +void test_vm_type(unsigned long type, bool is_shared) +{ + struct kvm_vm *vm; size_t total_size; + size_t page_size; int fd; - struct kvm_vm *vm; TEST_REQUIRE(kvm_has_cap(KVM_CAP_GUEST_MEMFD)); page_size = getpagesize(); total_size = page_size * 4; - vm = vm_create_barebones(); + vm = vm_create_barebones_type(type); test_create_guest_memfd_invalid(vm); test_create_guest_memfd_multiple(vm); @@ -190,10 +234,29 @@ int main(int argc, char *argv[]) fd = vm_create_guest_memfd(vm, total_size, 0); test_file_read_write(fd); - test_mmap(fd, page_size); + + if (is_shared) + test_mmap_allowed(fd, total_size); + else + test_mmap_denied(fd, total_size); + test_file_size(fd, page_size, total_size); test_fallocate(fd, page_size, total_size); test_invalid_punch_hole(fd, page_size, total_size); close(fd); + kvm_vm_release(vm); +} + +int main(int argc, char *argv[]) +{ +#ifndef __aarch64__ + /* For now, arm64 only supports shared guest memory. */ + test_vm_type(VM_TYPE_DEFAULT, false); +#endif + + if (kvm_has_cap(KVM_CAP_GMEM_SHARED_MEM)) + test_vm_type(get_shared_type(), true); + + return 0; }