From patchwork Wed Mar 12 17:58:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 14013727 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 E8A11C2BA1B for ; Wed, 12 Mar 2025 17:58:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8376B280003; Wed, 12 Mar 2025 13:58:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7BE6B280001; Wed, 12 Mar 2025 13:58:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 639A6280003; Wed, 12 Mar 2025 13:58:30 -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 43FD3280001 for ; Wed, 12 Mar 2025 13:58:30 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id BE5681414ED for ; Wed, 12 Mar 2025 17:58:30 +0000 (UTC) X-FDA: 83213658780.29.690BDC5 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf07.hostedemail.com (Postfix) with ESMTP id E795F4000A for ; Wed, 12 Mar 2025 17:58:28 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=OXNtIV61; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf07.hostedemail.com: domain of 3Q8vRZwUKCGYXEFFEKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3Q8vRZwUKCGYXEFFEKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802309; a=rsa-sha256; cv=none; b=uVfd+nB1rc6R4Kl5zRvm7Qz8VkmAjwCfIjJRF/n0hxP4rkUnt7IKHu8+iwXEYUd7D+Xa+5 KqIsL82L8g+p5/fOvlJsb6sPx4S5MQC++UokDtJbe4dJ7+ezg7vgQnKqm+FGmd/m99E4N9 YCGiw8djwYCz6WgB/iVmZ8oAPMLQqvc= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=OXNtIV61; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf07.hostedemail.com: domain of 3Q8vRZwUKCGYXEFFEKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3Q8vRZwUKCGYXEFFEKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741802309; 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=a0XpxYSrLEkx+yIzSfmPSimPPvYP4gD4dCRRx7Mg8GE=; b=BfCfarisf9bCGQoDFyoBulaA9tVahGvvJdkdzEAUmLtIDx+BBchpjJ7/8Rm9Brgo/CgEYQ E9lzPGCNl++pyERGtU/rMROpuy+rS3dtKcWbfq+wf8E/HrlwTmxOo5B/8abnhifg3APgqZ s0sVGUdJAfYvKZlVVJUlC2gcUWeZUik= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cf172ff63so445545e9.3 for ; Wed, 12 Mar 2025 10:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802307; x=1742407107; 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=a0XpxYSrLEkx+yIzSfmPSimPPvYP4gD4dCRRx7Mg8GE=; b=OXNtIV61/ihYDcObkAqzYZPttP6zpiIIve8hjOvXDfkFdRGYv9xP8+0LXpq9T0mv2h p4FIrSN6guWj3iPvAXPHu+zu9qssU2h78XNl/I6tAcFG3uG3oezucZSXW5nUDzZcpxHB ZRkq1O1sIPJTcjtLNL8Bm+sK8rWzQMp1Doxj1THIu1R0QDZCah1ABekiX7lKnmhhkKLg loZKTUJrKtqkAyWsCFDg0YLhfgrlezequv/uJ+LuUEzQXqARlBsuutsyF4i8CW3AYW/z f8Skak1zX+V8P0EJq4aGxzs9fg6BdshDPKfrQAMO4mNvZFHV1EEjwyp0JMzG8lGJEZAq NYIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802307; x=1742407107; 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=a0XpxYSrLEkx+yIzSfmPSimPPvYP4gD4dCRRx7Mg8GE=; b=YcfoZ+aYXdOVHvSvB6C+pCvLr0RBGdBCPubb4K0p94Vtdndn1kwpar/Zo7O755PmBY gHSjjymhwC71y2rc5zXVvPKUAS1cyGlb3tqQ09wo8jPVBln+a8+BNhEF1K3PZL6AR+lk psTkslcH8YAju3RUDwv6ksFh7h+A2pijN7wMgBHPU0641oO1hQEU0OnVHAbdSK6OBykP R1PB3wAOtyzIcQgbizd3/q7+5IS9W9EgLXPKc1A5yIh3CrWIlJaWTAfGMZoVkcjow/3B Uhj5fREdoz9Bixuyhd2WO5rriw0vOQP9mSbw7pT2tSKnnAOque2oUM2WVrWR0aMsAqIq wJqw== X-Forwarded-Encrypted: i=1; AJvYcCX8sfwsxFF8R9x/kpB+5JGy8ThzPfjD6V3zVhT15QeNU3hj2plTSp5NUjRnk9jqy3VmPOE0O919eQ==@kvack.org X-Gm-Message-State: AOJu0YzTEW7uYc54YQ5RwVjcDm/N3wv/DHFD2s0exKywCQAiARZZ7Fcf gBT68lHfJUgiyKkcN9COJx8qFbvLsZ/sZeY4EjiUVmLZMjPnvoNUlKnKF3BAeAwkR9eId/NFZA= = X-Google-Smtp-Source: AGHT+IE5UDnnh3yo17yLxT5VX1BO5KQAMs8ianrYZo0AfgH0k/k4UkL9Aw8NmMGZsi98ECarhiOo1EOQ4Q== X-Received: from wmbfp13.prod.google.com ([2002:a05:600c:698d:b0:43c:fb36:c419]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:3512:b0:439:8c80:6af4 with SMTP id 5b1f17b1804b1-43d168d4625mr1074115e9.19.1741802307671; Wed, 12 Mar 2025 10:58:27 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:14 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-2-tabba@google.com> Subject: [PATCH v6 01/10] mm: Consolidate freeing of typed folios on final folio_put() From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: E795F4000A X-Rspamd-Server: rspam05 X-Stat-Signature: b9f3mzff7u8j4rbxfwip34hth9nhyeba X-HE-Tag: 1741802308-935888 X-HE-Meta: U2FsdGVkX1+4dGVo4OoFfSjmRVMUNgQh2uiOpGemxpPHL9P5WLnlI3zGPknwe428YKGqYLxhAz1yKOIfmLHrP3cND03LNPb7sPSgpuwM9ys2/I3REiYRAhy02D+T0sAepOBKiQI8KfBIdDyNKsyTp/OjMfvRqhYLFYN3Mi/A0v2g+fsGbLX5j6cBbcWxnCkSQrg++A+Us8BT1sjfcCMTgV59l8Tp4ByUCRFWgYDlINGUjqhYEXO5u1PEj0WhXmrAvoY+VNPPo5RmhS8Sf3obpld4Ygn9H0eo8QMGYvERKufirV9RVIdG2Z7qyPS38xGEW40b0ynLHIv5Rjcg/6Sq2SYv9oGY+dvKgeOMOJtEPuhaYgGhJmOXt4GHvFMwfQ5rNXeTuPk+xhXL9HRWOv5c0joXn2YmyY7b82x2Z4NdFolyTo15RXBqVD0DCArBY4c2obzMCTgMrSzGaDjXXxuMvcTotAWFQDX66oCL0LUEu3n+4rhjOJ1lv3dujtpFnGHDyJuwl4erdCloGcz76gCrftjqvuL0khvp+QxFhlY/WOCq2HOkHXzEfkjkuclid3CdM8XCJ6TbV3PPpg7vyrljIOFstRlcGgKcRHq+LJGOzHd1j42Nl183RuXPxgNhg5i0xu/AvS1nFy1g0IL3IFmGCTvZeeR0ov8UuH7nOxV87C6MqDytChmuwkghpp1TXUZ6AhZJncww2lav2IKnM/p70JuSDmTXrBzT/VeMMXSsAwcixsTpghNdhKBGvXChDTb3GinO3Roqr+HsIsy9ze0g5rIA2TObCc1txiD5srcmnuZeRxEw0PkKeI5977OuPcvOqB7Doq3QZipo3rAy8kbGCF3sNH1G8obolRmoZcNGYNFNG8414gKNh29rNYvhXqVBcuIvOG5kTLAOqA+5JBskoRno752g/lWEk8FfebKOkkx+k3y/04FrO9rlCe0zuKnJOK9Jo8JFhtt2aK0bd+t 86a8IFSE QwiM28wENM4+HuxeqsHTrYUM7aaJT8maCdknk8N1bal3lddxlQ3bvIhydiNr6iuHaikCO/8hR731iZ3wPQnbG+BTIQovI0jALoO8u3FACIBWb4wCrk3v73Al0XS3+VqNdexMa6ueBTnXgGJSLjFUPHJm3WA9cirA37Hk/gxKzUPdB3f36M8ucNAerWrwulCZlKlwA2e9YNEPMxPZPNfQwB6D4dtyd42kwJ0UZ/DMRmzlxvNJy43BU1c2mEESleXuEM1dJxj3CEsQvY08IZnz8xdt+aE5t/p++d02avqmc7f3ur4UgG5+nvR3YI5Os8KUMSEH/PCJf3sBdsHpoi4rlDIe+nqBrY0JRcSWP/wp23Rok+2qskWhZ5cxKjNRjqfkUy62y+41yOJFLJWt20UoJvpCSrnXLNMoUeG2ZHRAbmEGrbJLm+tuh/jUt3ZRRYGhze0x+5P3UljwBNnOYtrbrVgNIZdAGycf4phpOQTHOvnfd1DHNl8vCB9fjGR5RkGh9gJ11UmhPHndlbvGy7u5hrXSgAePIvnMH0DPuO6V9ag4wAXR3qfyPyDjzJKgiI0l1tBwPtrkAOSGRk0VzAy3vWV2+1Uu4hljNYthlURW/9tG3obT8pfklkL9gteUTe0E360nfGz0j0b6AWG3wAOhBJ0LewHvVuYY6JRjd3ZtbRFXWti4= 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 Wed Mar 12 17:58: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: 14013728 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 6B476C28B2E for ; Wed, 12 Mar 2025 17:58:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B3526280004; Wed, 12 Mar 2025 13:58:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AE323280001; Wed, 12 Mar 2025 13:58:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 89FE6280004; Wed, 12 Mar 2025 13:58:32 -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 571F7280001 for ; Wed, 12 Mar 2025 13:58:32 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A9D8856C05 for ; Wed, 12 Mar 2025 17:58:32 +0000 (UTC) X-FDA: 83213658864.15.6FF1E39 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf14.hostedemail.com (Postfix) with ESMTP id F2CC610000B for ; Wed, 12 Mar 2025 17:58:30 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=GfyDgSDq; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3RcvRZwUKCGgZGHHGMUUMRK.IUSROTad-SSQbGIQ.UXM@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3RcvRZwUKCGgZGHHGMUUMRK.IUSROTad-SSQbGIQ.UXM@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741802311; 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=ZH2ddFSySXL8ljh40ScGRRkvOagkKQt0yLw/o+/C9xs=; b=ewuls0/SQq1uXw10qpnWNMgWYMqZOz2ZmJr3WIN3z5jfAvEy2OHFZhg/sYoCl6VWGSFjBA LVIi0ffTBU9csL23GW5XG8LKAV6oC/Y9A1Qe6TZQkpVXOwuNpbdpaJ7fZre5flMtvv3tUM yl0qsboW7Za9/UXXkSMzWearOk8lHFg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802311; a=rsa-sha256; cv=none; b=1I0eFPIBWSyeseDHhpXYltIcZCb5LKGps9OPz8HDX5gA/a1TZ4shtPcd2VSsbcaGNXxx+1 NtFmr8bFD5MiCJuHC5LQpFC48ksLTdlmYwPC87+bLCuxxphUBXhlWrVieHXL+N4QnLpWs6 IiQ/fLiflZZ0K5NY94ZxrsB1DFsKOBI= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=GfyDgSDq; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3RcvRZwUKCGgZGHHGMUUMRK.IUSROTad-SSQbGIQ.UXM@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3RcvRZwUKCGgZGHHGMUUMRK.IUSROTad-SSQbGIQ.UXM@flex--tabba.bounces.google.com Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43ceed237efso549355e9.0 for ; Wed, 12 Mar 2025 10:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802309; x=1742407109; 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=ZH2ddFSySXL8ljh40ScGRRkvOagkKQt0yLw/o+/C9xs=; b=GfyDgSDqOTYwUP9aHSgkn2dFWMtn9ulO3XqneuC6EJRvV1DYvffUV/IV+TTqEpZa0M LEHANjVhWmbIrFE+kaoRJuxPz/bgkPoADhh8//h5WW8a7ov5TnEIJOBL/LECDMTA/W/a h6gHxpeonhFD9vqKuKZ77h2zUIX2hDRhwNExGhibExDdmXc0KJl14ApYeJOxktM+uZ3x bYsYEF2DMuiHpAhJvsz/Un8aTuPk7WVjVRGmFaQQH0o4OyEJjEtMHIQQjoGP2H/Ia710 HLJsUBPbCpk74KWdokTeiTyOAlSQKfcVdl2uX0uwb4GaEnr0xfpuoEHBEV3BK6HHqL8F /hnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802309; x=1742407109; 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=ZH2ddFSySXL8ljh40ScGRRkvOagkKQt0yLw/o+/C9xs=; b=iA/AUqLHiHOp570wQgWBPdaEov+YKGJdK37+4XS6/L2va8iIPtpTI4AVBfwtK4BRot sAlTEaPf9fF0F/TS/4tgCjUpaxsQ6vU+KQJm3e2jSlnk8WsW/A54op6bCMJ9XE0sDhl9 8Gq+FPCFDygsfxvPX4WNXMecsQZK/5ag7p33a0wTn2EJYy7UHfpOknp5bXzK0otHas56 UaEGzOW/Bv7lHCqA6HlxV6qFx+3DwGkb98+yTGqYCkdQE6bPqfR0MoPR28SALrG9bz6w DoWa0kbcqugQBwH1nGh0MIidLlLiN7Tn1coBjVgK5LiPdKJT05BkrBtfgsc/qore/hSk /ZRA== X-Forwarded-Encrypted: i=1; AJvYcCWKVlIQeqULAlxrEInjbKV1LD16yy5b+rWYz0cgur8ybE6G1rQhPKjFKBrEnW+LOnJb30h8ssipJg==@kvack.org X-Gm-Message-State: AOJu0YyhtkyFtCZShxuY0rZ8itUFdbxp0y4XSnXRzVkCjYE1SwhNO5Zw 2ZiurjI14Hr0qHphdRHEglKIJqIUF98EjVB+kj/MAq2mCed7kqWdb0fVEwgdBSD/bVWe5e7xfw= = X-Google-Smtp-Source: AGHT+IG3QL0FD0w8QJ+6eYUXr0ym7H16e0KnHlntRiSz0AzMSuHdXLBjD/jyLDhLgORTX5AXNY0xHban7Q== X-Received: from wmbgz9-n2.prod.google.com ([2002:a05:600c:8889:20b0:43c:fcbd:f2eb]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4f90:b0:43d:fa:1f9a with SMTP id 5b1f17b1804b1-43d01c22acfmr99270665e9.30.1741802309618; Wed, 12 Mar 2025 10:58:29 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:15 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-3-tabba@google.com> Subject: [PATCH v6 02/10] KVM: guest_memfd: Handle final folio_put() of guest_memfd pages From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: F2CC610000B X-Stat-Signature: nxt1kopy3tgkd53z91fzr5s8bf9ux1i3 X-HE-Tag: 1741802310-608935 X-HE-Meta: U2FsdGVkX1/Exqo1f94pLr+dfJq11MbfoYlZNsWLZDToWIeLapwZpBVo9mmqvvKVrBT0vuT7GeNlGbyrC7RMyVN9UNmZhr6LeoNmjOfW7Ma2ttShT5qDdUHAQDG4wZFyUVlVLEM5whGGzLGJjNu0saoK08nNXJwKzJ+ytJsgFqs8Z7qOijhi8jTJ1A+J7bsjBzU00JZFNekI/z5IUNdmmUIb+DKjE28BChhwNif6btCeyfL1BNogtG/Z2Ud39ACCnIVGEk5QzOAbwjc6PMyU0ub5RF/m7mcXiFIhMqKpHYqtUb+Igfcy9NGafkdxOURiydgT4dlyxU+3gLZ/qfhlkqwo9jM5xxe6LiO6AF2yy8dYCBZYBQ/b0robT7c7+JeTx08hoFFvblZQLHzBeh0hql3iW5L2yFz2kaXafekEMKU0bs0CvX4fTQ5581ftcBQB6aU33DooWJu0lZH1bEgjTxac6cK22MxXpnewtqYjKe5+q+PGKUXlgbPtlqXD4xvk1rgUzgzpeo5t52k6fS8Zzbrxuzkg0MLFu+Q+Wv/iEqGjAsaZS5RyuPCkcbm9bmqz1RjN0OCy0fjVyKzHK0R+gsivFCFZF7FxQ3VGXuAe7zDZKkjtPpIcNt3XzUEQ46ErtmklGwpELn55ojgBHXTtb3WM83o8vqkjtDK7n9MDVhIe7JKLVfPO0PBzms+AYNAvfkVdvJXU1YgapM7SzqfaSVv04DvFexB/LRkUugtJTLKdDf4QL/ihnASavtw2gL09af+TFgwXFmzJlPqmi7qBSQxqbVxO4MvIqGc7ZVQBBWcGRnRa+Vbetdr+vnXKndYdZBnbcm2DnSCCNfoTt14YDL+JHUlJgnSYqjEAq9983H0JPVzh96k0NpjyKDBLzJnUaxOF4fGKvWfuYts+Fs/tcRzL/qbheDyhKL+MTQScYb7m6sm28m16RgvuE/n0VwnLNyFBO2khJZh9MgGfQCO DD/6OWv9 bPG41GsV2nYefoXTCO+cZHAnasGAbs0QTFF9SYW6D90UqWLGPDc9XmN7g15eZ4pvz0Mxxasxk25awgGdi6cxxTabWaRR4bWurfbYzt3f/l/vtAtLm5YALFlvZyMxHL8TsbN9sSfYX6gJ4t2G63ZkWH2FjLj3rXEuSQU+IIoysQ8LRYons1KL5wt+zfCIJ/iR6Mvgi2/SaHEiT+B6PNoBuJmRY+0kiK2QGAhlH2dMlb9lMi4lOfdbtn5w3l8a8cG4i43CaygZWH/lSRtyiSf2SArw+FF+jvRpD+0bskJkY8nOJoHMx8W3Su/v6jnDo4HTvv9Q0Kurlhdqc1ZqwnUfoB1bS5q6wRKyIHoROV0bn8/fwvOc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Before transitioning a guest_memfd folio to unshared, thereby disallowing access by the host and allowing the hypervisor to transition its view of the guest page as private, we need to be sure that the host doesn't have any references to the folio. This patch introduces a new type for guest_memfd folios, which isn't activated in this series but is here as a placeholder and to facilitate the code in the subsequent patch series. This will be used in the future to register a callback that informs the guest_memfd subsystem when the last reference is dropped, therefore knowing that the host doesn't have any remaining references. This patch also introduces the configuration option, KVM_GMEM_SHARED_MEM, which toggles support for mapping guest_memfd shared memory at the host. Signed-off-by: Fuad Tabba Acked-by: Vlastimil Babka Acked-by: David Hildenbrand --- include/linux/kvm_host.h | 7 +++++++ include/linux/page-flags.h | 16 ++++++++++++++++ mm/debug.c | 1 + mm/swap.c | 9 +++++++++ virt/kvm/Kconfig | 4 ++++ 5 files changed, 37 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f34f4cfaa513..7788e3625f6d 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2571,4 +2571,11 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, struct kvm_pre_fault_memory *range); #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +static inline void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); +} +#endif + #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6dc2494bd002..daeee9a38e4c 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -933,6 +933,7 @@ enum pagetype { PGTY_slab = 0xf5, PGTY_zsmalloc = 0xf6, PGTY_unaccepted = 0xf7, + PGTY_guestmem = 0xf8, PGTY_mapcount_underflow = 0xff }; @@ -1082,6 +1083,21 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) FOLIO_TEST_FLAG_FALSE(hugetlb) #endif +/* + * guestmem folios are used to back VM memory as managed by guest_memfd. Once + * the last reference is put, instead of freeing these folios back to the page + * allocator, they are returned to guest_memfd. + * + * For now, guestmem will only be set on these folios as long as they cannot be + * mapped to user space ("private state"), with the plan of always setting that + * type once typed folios can be mapped to user space cleanly. + */ +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +FOLIO_TYPE_OPS(guestmem, guestmem) +#else +FOLIO_TEST_FLAG_FALSE(guestmem) +#endif + PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc) /* diff --git a/mm/debug.c b/mm/debug.c index 8d2acf432385..08bc42c6cba8 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -56,6 +56,7 @@ static const char *page_type_names[] = { DEF_PAGETYPE_NAME(table), DEF_PAGETYPE_NAME(buddy), DEF_PAGETYPE_NAME(unaccepted), + DEF_PAGETYPE_NAME(guestmem), }; static const char *page_type_name(unsigned int page_type) diff --git a/mm/swap.c b/mm/swap.c index 47bc1bb919cc..241880a46358 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -38,6 +38,10 @@ #include #include +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +#include +#endif + #include "internal.h" #define CREATE_TRACE_POINTS @@ -101,6 +105,11 @@ static void free_typed_folio(struct folio *folio) case PGTY_hugetlb: free_huge_folio(folio); return; +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case PGTY_guestmem: + kvm_gmem_handle_folio_put(folio); + return; #endif default: WARN_ON_ONCE(1); diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig index 54e959e7d68f..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 From patchwork Wed Mar 12 17:58: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: 14013729 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 5A9BCC28B28 for ; Wed, 12 Mar 2025 17:58:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8BC0C280005; Wed, 12 Mar 2025 13:58:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F21E280001; Wed, 12 Mar 2025 13:58:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 66CDC280005; Wed, 12 Mar 2025 13:58:34 -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 400BB280001 for ; Wed, 12 Mar 2025 13:58:34 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id CC3B9AA336 for ; Wed, 12 Mar 2025 17:58:34 +0000 (UTC) X-FDA: 83213658948.02.83B96B0 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf24.hostedemail.com (Postfix) with ESMTP id E984A180002 for ; Wed, 12 Mar 2025 17:58:32 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XJLXeeFq; spf=pass (imf24.hostedemail.com: domain of 3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@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=1741802313; 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=R85+vuKuEEUS0jeCyrC0DyFve/WtnRZfc0oDmfyiJIQ=; b=P5J0PF4AMJ4PXiLeA3ADMeU5bcXdJ8flbwdpUGHPOwmP4vIQCnMg2cUL69BOX9G9FOvCLf 7KWmdzMejnJsG5e64OG4U0Q1dW9PBbD/KJIVx2c06aYtPqsJy31AnBoiz8XmD5X0298BuE VGdaQMmMIhj/3row57AAKa/bJ6zWm8c= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XJLXeeFq; spf=pass (imf24.hostedemail.com: domain of 3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802313; a=rsa-sha256; cv=none; b=4pV0nhMg+6tpMuKOW5ZkjDc8GOXkE5AOozlDMcil+slpta+GYF6QBPXXy1CttiKUSXnZjM 61n7a2K7LJdJ19DIAHciGjvBm+tSsfRRbEq7ubkABUzrsFXSStP2P2LA3VYj6Qf4B8PnUD yTdrYhbPxsn4lVKxF+/4c/pDd2aM7VM= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-391345e3aa3so70491f8f.0 for ; Wed, 12 Mar 2025 10:58:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802311; x=1742407111; 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=R85+vuKuEEUS0jeCyrC0DyFve/WtnRZfc0oDmfyiJIQ=; b=XJLXeeFq4wQzxpLhuPeUXNyGj1kMckMFuFWa2rPoTHmmbU1TITodA2nT/P2a2t7ydZ 7eBPERZt20FR0xvns7qD/QCTpJ23MqNVhCsKgQAidUtXXC3EQH+YU1D8fI6J4a6anQer l/NLkrQxA7cwJ0tbE8yN7SjWvs7VJG0G3vO1aXw9vgjvb+mDS3zYJ6c48owYyP5TIjU2 0uuVFT2XN3ogYpAuibfUFHpXWCQ21+zxNEzfwDOAX1zlGFd4M3mpOVokZMyzzxL8vt9+ U4lSjAnfJ1TkrtWEBfkcUWsunGRP/8VdxvkRavLpR7nSZ91pZfYBnR+m+utDqNNcQi7b 75+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802311; x=1742407111; 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=R85+vuKuEEUS0jeCyrC0DyFve/WtnRZfc0oDmfyiJIQ=; b=oxQHan+PFsxtft87N1/ZEMRk4hMk++nipi28eKDt3POirs3nrpINeMq/79JK4VIyiC gBLt15tuUlcBVPOGXcRNTjEylViX0N0SYtWyEkYWZWFldjfweqc63hDaN2pps9HcB4WI I0j4BMG/8eRLDq1eJyRx4x+Eejjc+FUaknJUQZekGZphJZyTjMUJTv4L8xiFM6dnIrvU priYHhhR0yUW9C04srfm5/0xvVzAANbhMq8iGKN/XtPaBmq3cm4MYdcMgKN6upFlMy1w d9XxDdEa/HCwlXCLVA2D+HSatbb44cBiZFytH/dfiKVZVyAREk0rA3x3Dsy5eV6WCeLv v8LQ== X-Forwarded-Encrypted: i=1; AJvYcCXzVskNNDwgzCRQmkINby9d3l+90p7S367fdwgCEegY4TzZ9T1sypw4oacMbLwQafbTEUF8vcoe2g==@kvack.org X-Gm-Message-State: AOJu0YxDHxjTTUa8Zrs9hus0fxKJdR8IHF78z1AIRZpzhOi2yq/WxErW K1wkap9aoRUzk8JEbo9KpSDuv4wfH27bjLc4tItuN2ujuA8hsNGhKDx7grHtvw2fTBBrzC+SSg= = X-Google-Smtp-Source: AGHT+IEjA25qbz56/ZivYmOA/8CzIw+8OnvV/Ld9F8g5Xe1iEl9v0x7DnaQxJbHqJscC5/DJshWP+7a2dg== X-Received: from wrbgx5.prod.google.com ([2002:a05:6000:4705:b0:391:3c12:d0cb]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:178c:b0:391:3768:f448 with SMTP id ffacd0b85a97d-3926c5a51cemr8018324f8f.49.1741802311548; Wed, 12 Mar 2025 10:58:31 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:16 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-4-tabba@google.com> Subject: [PATCH v6 03/10] KVM: guest_memfd: Handle kvm_gmem_handle_folio_put() for KVM as a module 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: E984A180002 X-Rspamd-Server: rspam03 X-Stat-Signature: jp99zajm91w89tajudppn1arqpeqw4b6 X-HE-Tag: 1741802312-101725 X-HE-Meta: U2FsdGVkX19/ugEp+NwbrMU/RshDvOqr7A+nX2KSePGcXu6K+bo31QKNXb+SEcEz0AwO0TF3Px2Sb57AlUwRDUjbAgZl1tZJkpq5NxNSC+GUXStPxtKGNIkohG/1FP54dijWl8pCLYS53VT2byhy4DA5XJ5YlXERhxeJBWxAOvCggdpH5QW6hJ3W/DVBfi3LBC29Sb6AD6zKt0FhPLIeBJZA3CLpK8pkPaALhY3/71PsKRTHQgMKahh8XKkhRfCPIZVwk73Q3Sss3C90e36ipmU4iAP+rXs9fkspE4qmk5/Vptb0IEgychtGXCxSl6A9Jwy5NhA4Rov5lMhNh+EFKZiLZJcyJP5PkfmEQ/+dZ4hChCYAXTQJPAaezORHF4I/QtCQPZIuyXD3+Mo1GH6fk3KcvtZpANvCAgCkKMGQZBE6bNhnxD59RuGi/VBE5xvAnj/LZMNKxhXTtIxahMsjJ5G2tRS5k8H2jXF2/UGyGVN5Znt3oSNHgInWUjp2T4bYKYymE/5/st0ChGYz3lzfvudspkbHqUecte+5Uunw2a8QoEQJzkpeZK/4towLXBneC+wfz7wvyyBhFeifc/VcwZI6WvOjVenPoSGhrtpslfpFDMiLZDoptf7IiBfMMKrfpyOEjROTneR/kI1EhvZkRFYJjKGGIrVs/QAGAXkTv0zmMVL/2Xr2vIAy+IeqP2XgRpvB4npnSk+Q9Az1hmM3Ul2HdqsDFRqZFGYfNSQefSf+hcXKdxsrFsATHE5488tTY0quuyi7vD5vTOTM/OHfJXWM2n66iDuQT1Q9daSMO+qazSHvBGCiTvRZ/u1TN7NspTdq/3s3/TLvpihVudneeLMeDIdYD2MW0953j243dcDSraK/arS3LfMzOQw8EaU1HMPnCg3xuO987A5Fp+GHielWRuC4o/hvgF/NBqjEsHqUp62DcBDDLC86pNqcDclmwPZzSn7sGP/y2Z9YyHd U0TjRo5z djb08+ekt8qFCA/Cz5jROHoeXVHnunvkwGoeSaZBr/ZZU69QwFRKzE4mR5Oi2gN/SKgTrm2Ad11VHmPZ4SgHHioNbtEo4c3I17ftEcPxCwp0D0+rb1s4FCRC3MOrnYeAwgg1Y7X4cPsQNo/QBhfS/63QtYYr9cR4SVL60uxzVHe+7rDd2/snADr/NeY4GxnNTL6vTglZgAkz/l2WPK2uykju+BctWwLu49cPuCYRBtgtbF/n4pslyryuNJdQqInBQuN4AZ5CXepcykO6c6twLmlbbEK3Or9oi7/5ZWAXHS7gN7Gn8g2HMRpRdR4iWlB2woZ5xrS/q5TsFr5tNPHgXDx25pzaTPCDN7hvQmLJSbWRMxqsCJlvHXDNfcpmTsap4pOP9eDd45WoolLwmEYrha5kyoxrQV3fsVGeApLxRwilYBvqpMJw/DPAwhNQtwqGR/jWwb4kMpm75p8520x0lg9esORM8HT73cViUsLLGO/ki5phNp07AnpsyNL3uSm2Vhze2CIQtFS+ylHDPWGQrPpvf+0KscAVh1a7m6CoIacjieb/pbWZ0BZae9KIKa2zq26MxqB2yk1QiNghAUHep8NDjCjar+qei3nLApUTlvNon3W5ND2bHiz+HJkIPO+GY/9xhyIR/2LdDn0c3JlgLhH0b5A== 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: In some architectures, KVM could be defined as a module. If there is a pending folio_put() while KVM is unloaded, the system could crash. By having a helper check for that and call the function only if it's available, we are able to handle that case more gracefully. Signed-off-by: Fuad Tabba --- This patch could be squashed with the previous one of the maintainers think it would be better. --- include/linux/kvm_host.h | 5 +---- mm/swap.c | 20 +++++++++++++++++++- virt/kvm/guest_memfd.c | 8 ++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7788e3625f6d..3ad0719bfc4f 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2572,10 +2572,7 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, #endif #ifdef CONFIG_KVM_GMEM_SHARED_MEM -static inline void kvm_gmem_handle_folio_put(struct folio *folio) -{ - WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); -} +void kvm_gmem_handle_folio_put(struct folio *folio); #endif #endif diff --git a/mm/swap.c b/mm/swap.c index 241880a46358..27dfd75536c8 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -98,6 +98,24 @@ 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) +{ +#if IS_MODULE(CONFIG_KVM) + void (*fn)(struct folio *folio); + + fn = symbol_get(kvm_gmem_handle_folio_put); + if (WARN_ON_ONCE(!fn)) + return; + + fn(folio); + symbol_put(kvm_gmem_handle_folio_put); +#else + kvm_gmem_handle_folio_put(folio); +#endif +} +#endif + static void free_typed_folio(struct folio *folio) { switch (folio_get_type(folio)) { @@ -108,7 +126,7 @@ static void free_typed_folio(struct folio *folio) #endif #ifdef CONFIG_KVM_GMEM_SHARED_MEM case PGTY_guestmem: - kvm_gmem_handle_folio_put(folio); + gmem_folio_put(folio); return; #endif default: 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 Wed Mar 12 17:58: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: 14013730 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 0A64EC28B2E for ; Wed, 12 Mar 2025 17:58:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B1B20280006; Wed, 12 Mar 2025 13:58:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AA361280001; Wed, 12 Mar 2025 13:58:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A9BC280006; Wed, 12 Mar 2025 13:58:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 607CE280001 for ; Wed, 12 Mar 2025 13:58:36 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C3DF1161505 for ; Wed, 12 Mar 2025 17:58:36 +0000 (UTC) X-FDA: 83213659032.08.99074BC Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf28.hostedemail.com (Postfix) with ESMTP id E5F3FC0004 for ; Wed, 12 Mar 2025 17:58:34 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=x72GFWyW; spf=pass (imf28.hostedemail.com: domain of 3ScvRZwUKCGwdKLLKQYYQVO.MYWVSXeh-WWUfKMU.YbQ@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3ScvRZwUKCGwdKLLKQYYQVO.MYWVSXeh-WWUfKMU.YbQ@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=1741802315; 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=ja4c56NjFxjN3VuYRxoRbDc+8encrsyBoZ8FkcBEBAk=; b=AYBewuYYRtEzY4YNGNIw6Oo+VZg+vtz8lS71GWT8o9cQ/93s4atnuiH0Rbzj6wCxFVGoCh uDA7EGmFUFPtR4XnuJRYe6PnYj5OukPoKtL6iX4fPriaF0E8ihqlka4Paka5L17i4ZEG09 QVDPiQkoS3xGtmBfFWmVGWBsgpbwQ+g= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802315; a=rsa-sha256; cv=none; b=Z+J3wEWZTzhYfZQdL/uyKUuijhzla0TiT6N9CbdC5GNlX+8xEMh11yTOq/gtrOKBmY8Mnu eQHOWMQWM9Xts/KrtzaaKzAZQgUHEf0B//E9I8S/5Iv78Y3SzufvezoXvtqNa8OCUdHmch doTrnSI6Km1Sa0Akd1cj6/bXruyHxy8= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=x72GFWyW; spf=pass (imf28.hostedemail.com: domain of 3ScvRZwUKCGwdKLLKQYYQVO.MYWVSXeh-WWUfKMU.YbQ@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3ScvRZwUKCGwdKLLKQYYQVO.MYWVSXeh-WWUfKMU.YbQ@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43bd8fd03a2so306695e9.3 for ; Wed, 12 Mar 2025 10:58:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802313; x=1742407113; 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=ja4c56NjFxjN3VuYRxoRbDc+8encrsyBoZ8FkcBEBAk=; b=x72GFWyWazgGOeQJ+wKTNGL7sg5aEdgl7p5n2wzMsLJ2pSa2Hvj9nwHbESk+ihN3gI xs19VxqF2A8FsCN16oofD+7ZXQfHzzA8wuX0h71k274fcywKH9hqzx9C4Khg+FLvSvDX rm8bXdod156EgX7jw09P1mdPW9gHc7tjcA433gHMemstw+jYEodH75PUo3BBNFMJjLAi 899GYy8fBo2eN7KLczwe+OPacazYEJugWeSdP5x5XW910UFXdGDGw/NYHs6dCXMhNSK3 RXzCsiHT7NneBruiRtB//7ICjZhNtcmB+0hXSC6eGTI+WkYZ34TuhjlLH268qzlkDjKv NjXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802313; x=1742407113; 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=ja4c56NjFxjN3VuYRxoRbDc+8encrsyBoZ8FkcBEBAk=; b=UePYsvucqYjrdPyAI2O/7KJq9tMW1HO45Uz+g0BLZpcvgKT9oD1pJyEDq91J2XR/5f 8GBaa4YEYwfWCC91PSPctPULvm0be31wIXavYk2j/eXxcXUIIRLp4zFKZHCmT1wvuRhI vI7ldwm0Jqg/l9kfD74b41EnzEV8zvIEhoK04SZW9zrAQGRDbIuUyr43dYnIVTFOZhFk +NprAKLbv7alPKW1Zkj3bQ9YBeUw5gZr5CtnPfsw5kiQIQRLVgc7pW22JhisShijuTpu wYYhSpRSeTViAlaglrXTmj7l4TAN9HQcIS0OBvlgTf4zihQY+z7EEitpcKilgEa8DTcy DGMw== X-Forwarded-Encrypted: i=1; AJvYcCU6P69hcRiPqYFFhDmQblABKbsuxev7UpitnMRv0rXtTYeCbLHVuXRHUtPI0877YOvoNzRjZosgQA==@kvack.org X-Gm-Message-State: AOJu0YzPLAxIi/ljDvEC/+z4XMfMsBIcPPiMNl28sZZ9jjya7pmjYpob 7Cd8mmrXVH/5negQIbRp2Rknaqbgts6sS8viO59lTX+Dwf+iQVzJAnJoXNJXsGZPfEAZKrow+Q= = X-Google-Smtp-Source: AGHT+IH6LramvrAethqSEJ43co3nUgcdaI6Hl8zlyi/Cxvas2W6mO2vl5zZ/oeJPP/4J6sjTcPIlLBCdsQ== X-Received: from wmbfl17.prod.google.com ([2002:a05:600c:b91:b0:43c:f5f7:f76a]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1ca0:b0:43c:f5e4:895e with SMTP id 5b1f17b1804b1-43cf5e48a1dmr101433505e9.1.1741802313446; Wed, 12 Mar 2025 10:58:33 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:17 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-5-tabba@google.com> Subject: [PATCH v6 04/10] 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-Server: rspam01 X-Rspamd-Queue-Id: E5F3FC0004 X-Stat-Signature: qstgrpepxjp45p4g6e785a1kmsftu3zn X-HE-Tag: 1741802314-670626 X-HE-Meta: U2FsdGVkX19IM1RV/vFgSPEvwMnPGeJW7PzQDYrUhmdYzCRSkNbeGl8mc1rr6iCN+iFQG+t83WzHBjC35dYyo/SZRiizyrbGakZ7iiuRRc90AbVjHrzJ+AvmzIORaSn0AXdW5p1y68T/4J/vQ1IJooSe0OOeyqcMYGaFKh2y9LI+k+t+AVfuxvcijSCjXP4hz1Va+d8OvFV7WCzgQ83Yr1kMBsPgrzI5g/+xtIqOSX9C2vpqtabw/ULvadgf+ntTuovXbGOOPlkFpIBnUhhCVAmnpgZiFZ9bsYRbaKZBfeYVSLvgMLlPryMcrlHR2hRb/PIqbVIAEvlwgHfis5Lkh1YpzayAu451GDvVZW68UMz8Bgylsw7ESw+6ZiGKFl6HbdbllEN8LnWPihy8Affp/rFf8IOdpnqb1Lno5AHPVwvBs5IRQOxkUo83AXymyR3tV9uFEbx8unlhbE+bifHcSTVnBpGexm2gAlz5m3hL+1DVDGWyzhzdpS0sQGtYFXcd61ID2LR6d/her04Jps25LbcW12vhiD6tEkLAypNDmqiPIbnmftRJxmS02nBanYjRNXSQGQQpCYJ/ghsQ9BAOgRbX2QXEbsVRrtB9NrOdFeEqrgwTduYwxOF5IydthLOTSiKWs8kCMP4dFYCAO4kVuPG0XvpAHpSz+ffZ8la4fv15PUIK1o4XvI6eNVuwmJEq5CWDLkpxAKoSjcqXNl8k3+29J1YOP0mtBozBHF70Bx9clHWV9vVKZyan/GKq604+KHiwOWt8vFFZkjD2167EmLxExoiacd74lNVA1bnBjBMtvAxfk96ycCZRrnyW7r9beNd2N5Yo4+eaZ4UVJrq0iPHZ/pc5XEDKoM0e4aEkLWg1zgQH0jeQShoP7IeWy1V/voXfHV/uvbdnWt/xrHkhle1L7nMu66S691wbOBL8SeKQchNLoGL1YYwQeO2iFGPUrWCQ50Nw7BeGjVPq69i 2TRjZUxt VAKK0pQQBPgkDn0yEY/QT/Yn32cMfEnx19gd/EyXJK+L2hC8oW1+UUkhSG+z605HpHVinMIlOc4NMCEI4mhTJUOcFLsiamZhxn8wJIfzi7pwFD6LiErFqcrgNGeEW+hxbhnoeJiMwdu2/jGutQUIhuajqC8LYH9LkULB6Tx2pBYAOO5X8EPpg1Irvv9iabwKcPHJCDKsp3b3JZMRL1C+i6+LLozfJgzGEyoShegxDzQ4ip8uDIQZKGyvj655TIr7h1ug4xvXYMMMuN3t/c4WOr+9+bZibD48L6NfRemHZMy8my+hw4T5pHZQv8g4tAUyFPhY4ZGCEBlVQLPPz1V2pdrqv7xbp8jBMe2ECVubms1x3ClKEr/4F3lHiSkmo99y9lgb9Hg0BThJFyk4oPN8Jfm2l8ZXU03sQLjh8zGBaNFIIx7cnUJ92CBEKlw5eOh13CEuB777nW5Cl3ymgzVNqFywEsJazZmvAXbBsaglnC4IZH5rNZ4/a/exHeVqMlyFbteefC0RYL8+YUAWwl76i0sZRJMFWU4nrP5yJgw3NjyPioKA5+SKSsrR4D7g9Vp3/riddWUAtYIE26lTBZgIQRdeo4AqWA7G/T7iglat9xGuITwzoIsCs+5lA+RUfKIBNeZ1yAnb4PP0ZEOq2ywHgMVkr1Q== 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 | 102 +++++++++++++++++++++++++++++++++++++++ virt/kvm/kvm_main.c | 4 ++ 4 files changed, 118 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..eea44e003ed1 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -320,7 +320,109 @@ 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 folio_offset_is_shared(const struct folio *folio, struct file *file, pgoff_t index) +{ + struct kvm_gmem *gmem = file->private_data; + + VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); + + /* 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 (!folio_offset_is_shared(folio, 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 Wed Mar 12 17:58: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: 14013731 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 C9A3EC28B28 for ; Wed, 12 Mar 2025 17:58:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A6ABC280007; Wed, 12 Mar 2025 13:58:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9F1CE280001; Wed, 12 Mar 2025 13:58:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7F646280007; Wed, 12 Mar 2025 13:58:39 -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 4CC76280001 for ; Wed, 12 Mar 2025 13:58:39 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id D72781C78C7 for ; Wed, 12 Mar 2025 17:58:39 +0000 (UTC) X-FDA: 83213659158.15.CD76F7B Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf17.hostedemail.com (Postfix) with ESMTP id E953140004 for ; Wed, 12 Mar 2025 17:58:37 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="MtT/42pg"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of 3S8vRZwUKCG4fMNNMSaaSXQ.OaYXUZgj-YYWhMOW.adS@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3S8vRZwUKCG4fMNNMSaaSXQ.OaYXUZgj-YYWhMOW.adS@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802318; a=rsa-sha256; cv=none; b=an5tnOOEsU3zs9ndyhK42ZB/UHlhVmMQAqqT82HF7Oam3r7vojcMSz/54SMVOEfX3XVjoc twLJyuyvQem0A1P92qeMmNW30bjSgfZayOzW4cHtssrZzV/rShLwog6NFZRle6BM+Pot4h hv0cqQkRD11tG7+msv91T9NsldOV0zQ= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="MtT/42pg"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of 3S8vRZwUKCG4fMNNMSaaSXQ.OaYXUZgj-YYWhMOW.adS@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3S8vRZwUKCG4fMNNMSaaSXQ.OaYXUZgj-YYWhMOW.adS@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741802318; 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=ntFxQQNzKKyJM2lZzgIL3uflnY89YGPG26G1RQYhb04=; b=xT14C/karbTVlf2XLBJbuoyAD03B+h4CffHCCn9UxAmwF3qTCfbGrE1APYyRfHmloxuXMP XCOlAZ2UqnZ/K6RFh4FnbGVkHv1+zS2Os16l3upfh7I8adX7w/iC3U3ozZabIPIoAZVbSK hfOI+CNTCMixnLGxsZHqLs2oBQH4sAg= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-438e180821aso337625e9.1 for ; Wed, 12 Mar 2025 10:58:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802316; x=1742407116; 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=ntFxQQNzKKyJM2lZzgIL3uflnY89YGPG26G1RQYhb04=; b=MtT/42pgD3Tad/tDMqqTVkGm3QjCzhagp1W31hKzfGzYGK5MHt/CRlkj64unFbaZ32 cESvsDGS0FxdAVjTO5Rq80PBsv1KndKg8Hw91mfe+0ZjU2qV7BKESOCoTScDV7uNn0uF GC36t2jHUTdroBJE1KR40IscvU2iiSWWgBGtnFK7d/cXZET6LySND2owCNuj7LYq0yAZ a3r7xLrfD+CfORm/AvC8q1v+lrKf90s9QBVBvkJ19vZjL/lFkzKB1W6RtZJbqdp+I2Q/ FAUCab+0g5EAJ8UMNqOJr2f74QdjGZZGsZZl2jK6VFjsao9F97rtprLp5W3lCOOYH98z pqtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802316; x=1742407116; 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=ntFxQQNzKKyJM2lZzgIL3uflnY89YGPG26G1RQYhb04=; b=OJXnU3/9DcXwGXe+ftuyTgLcokxXxzPpLSjQhSnq/mQyRo3zl8mcNxEhyW44MsFTu9 w0PkYOhYwaqACWpBL8hP/PhRsenLplig/fIphmAmEVnjJN1KiC7ua2J7KsYtb0lDL7Gy WSxf8pKZpuhXSaV7LYI3hXuerKAZP6hLaqyVFZhTfiavK4XKwEEyvVmlByxO8zwAmKpa 8aC90q/cl4CBkGmPDCd68fhb4abNK7UiKxYaSmfZsPQJJfg3IFqA8jgfPvF1428OqLjE uiQ3EOSYLNsB7gKu3Byidty1Ka9jl8ucIOiyRsgCFD+taFxargAGtvjxqIhVY5pjsE0j NfXg== X-Forwarded-Encrypted: i=1; AJvYcCUKQlLOwXP99ZotMvoFCk9v5+L4qqFTVsVFe3ylrfnjWH6tzzBuPHgss13sgEQAaMtZCNZwlWglxw==@kvack.org X-Gm-Message-State: AOJu0Yy2aSASEtthdrGFw4pEb+kD5Yht12RGs1fSnZqLyzKE8/y24Lco WOmiQ2SKqQiYE2LdalZwPlmhFIUD7ycNcCj/waVhPQnaClvr/Zu63RB86NedNQujGSBDRh6IvQ= = X-Google-Smtp-Source: AGHT+IHx2UGNc3sxVMFxnpaPRw6zK2nrSSbS+Z6p3nzgLh0TKg+a144XW1OZZX2F42XTW0aAYQXWeSM0QA== X-Received: from wmbhc26.prod.google.com ([2002:a05:600c:871a:b0:43c:f050:8fdf]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4751:b0:43c:fffc:7886 with SMTP id 5b1f17b1804b1-43cfffc7ca2mr104987635e9.8.1741802315742; Wed, 12 Mar 2025 10:58:35 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:18 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-6-tabba@google.com> Subject: [PATCH v6 05/10] 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-Queue-Id: E953140004 X-Rspamd-Server: rspam05 X-Stat-Signature: 9uaq3bgbaxthp1q1ge8g4bcqyrrt81xz X-HE-Tag: 1741802317-942512 X-HE-Meta: U2FsdGVkX1/ZjRr7MOPzR7M13HYqC9FVJUiQ0gCQg7qVqv28xMHYQa8H09J1fSImE4pnUhk9Su/4lrpudFxBx0z930QvMQBKRqftuMwOOz8eE/qZNxMOpWUOBeW42ABgWLQUxAInSlYVza+o+O0YW7WO67XwforFB9fNUD9KRK9hTuFFPjgKjvRNJW0jOzvG/oWOxnb+qef76JniZs/5JKmh0rN+UuP36xhgHI/yeYp0jy+FPgg5bXlobdGCE+dyl10nLgOgrEGNm6FabM21HE6JVUntm420m8IsFBxKZmZSYqp/88dlKp0lHQmQWnO4MNL1mt5HfrIweFyRk+03zd8VCPTxq0IdiYbjjCY9yHgHfwVxkdmhQqDxlQ5yVL4+3dOvq10+mW4VIjt6lEtMCfg8MHvNoVk5kmzVFFRsb+FN98Bo+HVbPPZPiOpF64IW04bgvSRB1D4kDgKDjkVI45sEGe168g+lgVhty8SKcZQwSxNPHsgtYGVOT/5MH8mtzmeqhBswISTOT13vMJv/qHsLJP4CuV17ZYcmjjbjKQWYcWrJdZuL/YdfarZ5j5QLx5yaTxVA+ruJAK/78LvF4W5NCThLgdNSCDMNL5sllXxJjUVjX+g01fM1tbCl9W1OjTt+4HcQZCWaT67lWkq1It7msni4K4Xfm1qbJNJL2jJmevb8ZHYmexTh2c8cYr2Qr92iQde8yyPthh8rbCiQSASTIon7x5V9X4cXlGEg0UaQrxpkqcDUvlSt6wfdIJtHCvXrsuvK4arF7639qXDF41QHsfKA71B71ZjyJtFaRVv9GHH8n+FD1xNnil3S+PnTyo487m5WDEVZjf+5hF2rIKSkksQhIwUQVu0/4TXP7xmlypwdKjUGakceXcOehUbykI28LcBJC+qBpMmpN558ljAMe8zMUXFoV6y6RGxYB/WjY9NAGHDDBmz+ODA9gwCCY+T1ciR/BZtwAcu/Iq7 FsVvR8GK heS2fPnS3JUiTka+6sC4hbjxUPbTJY2VZLMPybsLgI/F+gYLyc720qLUHBlVNeI/SoAWSu1t3PlnJDx3SO56N+jJgkXv7f8jrKv6dciqIoMG9ifNx1X1EedE5RaXRhua+04hZ/pnD+x7C94gwDdGXmADfTI5TiPaPOmzQCTp7s0bWwUcR5dAGurJdftuUdwX33p5WgXeVABsBVwTrjPVDNB/LAzZT2zmH44NF40r3af9xUc3iXhbv84rkJW4QAsAmIgsqXk4ePwmuB4Iamymlm9XVaKsiA/IlRX5ZZKNVl5lCCWLROiloGAP93EcDUE5a7x6ytOC+F0CUDyqqjjAqKX8xdxxlJiyi+jPT8tOAhnAHO90eaQep78NtsS7Fw4bBmuPDkmtfv3KBmW9Lm6ra04uUXNhcayjrZmD3DbbBggSvaGo7NUNui1zkwDeTGtOOPMvJVrM7/FwWgzvJxahU6NvdzUOsU9Lcaih7FCsfaGq9XA/38U7BiwKVZGjAjg6Qbvf6+V5QmeNQgeUdool2rbcbzmV16EHL7ALoJHKGanrO5jLJb4EPCMxEPWuYgvQYgBH0pMUsR/0va3qibR/CVSVj99nTLeawcNFdNurnob/b72LsxZRppgpHW2K5hhbqUt0VE7oJQMsPw65j/5FeaixKiw== 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 Wed Mar 12 17:58: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: 14013732 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 76C4DC28B28 for ; Wed, 12 Mar 2025 17:58:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B2540280008; Wed, 12 Mar 2025 13:58:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A8896280001; Wed, 12 Mar 2025 13:58:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 88A97280008; Wed, 12 Mar 2025 13:58:40 -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 5D67D280001 for ; Wed, 12 Mar 2025 13:58:40 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id ECA2F1A151E for ; Wed, 12 Mar 2025 17:58:40 +0000 (UTC) X-FDA: 83213659200.16.AD7C0BD Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf06.hostedemail.com (Postfix) with ESMTP id 180C5180007 for ; Wed, 12 Mar 2025 17:58:38 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=v4BZZD7V; spf=pass (imf06.hostedemail.com: domain of 3TcvRZwUKCHAhOPPOUccUZS.QcaZWbil-aaYjOQY.cfU@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3TcvRZwUKCHAhOPPOUccUZS.QcaZWbil-aaYjOQY.cfU@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=1741802319; 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=Wx8w/RZ95u4Jazhb7Dc1SjbWTPE/GXa4O3urxkMUigQ=; b=aNdMhW/fNjGLAYW/g02RXknNdxM98vJpqEN1FqORr+aRV6xBt524n+cAawczrZNGKmT17F 8yHGVAU8jwXjEuRgQTUimht2OiifEMduzdprgX+Wt1Ko3Z2OzV1lwGQM2qBJr4UxufXGbD 7Eyy0rW2v/Gw6kg36uS2Bo/YH0GmCWg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802319; a=rsa-sha256; cv=none; b=r6i0+Z4UVsiinfeg+XIfIDfHsrGCX88TkYjFa+A6cBJiINXBDqEASo9J+6mcMa9j/uP4lu EECDYCXUFdp2EMEOGKDomNDkgm7ztL0krgUn7PtW0BFAIZH814nVr1sBTYEofaeIe4wUPp YnOPhFUPxCdVC0iMU79XLENlt+Yt22E= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=v4BZZD7V; spf=pass (imf06.hostedemail.com: domain of 3TcvRZwUKCHAhOPPOUccUZS.QcaZWbil-aaYjOQY.cfU@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3TcvRZwUKCHAhOPPOUccUZS.QcaZWbil-aaYjOQY.cfU@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43bc97e6360so310855e9.3 for ; Wed, 12 Mar 2025 10:58:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802318; x=1742407118; 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=Wx8w/RZ95u4Jazhb7Dc1SjbWTPE/GXa4O3urxkMUigQ=; b=v4BZZD7VzITVbRu5vaqDv9Ar8tSd0d4S9IS/iKeDnBKxrEDfjBWEUH9AeSxQ5vHkLX otHPvn/WltbsquZTxkcK7qyYxNUe4mMMFVcLDqwfy4VDug0h1s1gL0D5UJ4r3Tl/CNrN AWVX4NNsgn0XXWCgS3FPMO3QGUx0UDVCWiAKi2rzbvNI/SneJ/s4Nsx2yhFfd0i3hI/H zOWBtjDNj3T5KS5vGjPjbTpVnicb3Bp0XlTzSHkVdJeU6ncHvgMqucRk5P7F7NhnxWqR mcWoIbH/w0dgg7kFJ6gChc4i0i4RPHcX0JHo39nZGwQt18dUOzpoy/op/U/LLrkw7Mbw IGNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802318; x=1742407118; 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=Wx8w/RZ95u4Jazhb7Dc1SjbWTPE/GXa4O3urxkMUigQ=; b=Lu3NDc8pMqFsqE+ZGua/TjC3/wTLGVbtpTHJrM3ZEbZxwS9yRXjJ4sHifXRvVtom5y WBJw8s3Z25QCUI/1gl7IudM+RQiZzAId9pB2y2yEbDdCxGA7w7vlp+SQzq9krly7pz7Q RFtw0setmCmtzOraUcnWsdkB5X0VtkkH8Y0ivoy+sm6HL0CcS8boSzndGYO/OpM6pSaQ yNQOrUBVMBIxIlPWKuw12LVvRejrjXp37Ntcrt9Yk08Zq863A5x8IwT6kCCCbSJR3Ft3 QhsbVPkd+DYO8vVcqxihkiejcYoHfJy2HTK5H2FQBYAzg2J16qNiJ6WACuGHjJk9fs0x AeXQ== X-Forwarded-Encrypted: i=1; AJvYcCXc0PG26JKGbMK8LvxOXJUJGFVTEJ+2BvztGcS5ykpiqz5+k1Eps1kVkhuZJUhR8JBJYSfyAESIdQ==@kvack.org X-Gm-Message-State: AOJu0Yx1VEoDDtHkRHWt/qUZgSaFKXJ/8lvsuOlVdi2TgNVg10mv5mTF Z0BkyEMpn0jPIEK/5ItVxqIP/1CcXfL4boFOA30TDgdIOkrctTXhtDVW775MdOMR8fM0DLgOkA= = X-Google-Smtp-Source: AGHT+IFJlj4nTok+ueA0jACRwns8uL5LH08IddJBcx9wqowAWc71zjFE+8nTZuhjVvmJcfe8xTEJ+RPsaQ== X-Received: from wmsp15.prod.google.com ([2002:a05:600c:1d8f:b0:43c:ec4d:6037]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4fce:b0:43b:cd0d:9466 with SMTP id 5b1f17b1804b1-43d07fd485emr45933555e9.9.1741802317784; Wed, 12 Mar 2025 10:58:37 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:19 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-7-tabba@google.com> Subject: [PATCH v6 06/10] 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-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 180C5180007 X-Stat-Signature: c13pjwh5jd3x6wzwhcgcjo5qaaozb33y X-HE-Tag: 1741802318-486293 X-HE-Meta: U2FsdGVkX19CqUtrhG3ZZbgcZx+HARoT4226O00a7Vr82qKQIFBnl+NcLYvdSd+oRKi2thfuML2qDLmJyvd0zTul93kx/aguhgfhaezrY12ZYb7bWRmEKrYVuS2ud5k/L/iBIYtt+ePbCa6t6328LILvzQwH6ESpQg6XFHbOik8SwJYnigYfe5ABAdRyBF73jEyywVjIesCqJFsqWLeTJiPlnw+GPpiyEOayNjVK9p7XcZqR86j7bj87EDWirr2oiePR/4K993inAEOab444t2Gla7KW87dNCccjE4hMUbrUFQwFsMM2LzpcN99kD8vbQ4tQKiqM2xLSvBKr1qRWKm22uFwOJDImTDh1jgjuUflwDRlU9I8K4qnaw23xPifI/2w0s0GjIgf26p01U1Xcz5QiXr5ia3x4r3dnDxRE6FENCtPupS0qLDQS8awVzJqYEyUdL8Rd408XeZTgL50xty5H9K0WQ+4DmNvoEPBsZvvVR/WUNyOfa6h1qx5liTobQUULuzLJQ1iic7UoYDDse7b+PEJOMOaJYBTqqHc22e4h8rIc2rynRKwGvkm0nT+dyIKWfs+ked5Hw51Oi7y9FEBzmzR3Cz96oC83JLZFXElj4IejUS5ZhM7DarYsu2+akhr9cdYsgrPPi7h0FQFcdA1BJc4aa/JHjy2uS0jl7jext1DJVJqMM8ggeyu8k6qOSyKgHJSOyAqgyfOvk3S4yvnD240EZwIiyFZNqkouU6ylIBlH6Zz+wMvdjxiFSkk35QcpgbM7XPhwt/377AcmCQ/or6rqEa+FDRud5CMf3MjAWFlZhPTier9720rt4xHlktKMlGUf9kJq/VzdXRDl4k4GRXe0fhgOYtF5SVPmmUUnu3CFrMvP+lQGFz9D5L/EWbZXAneE2/cncgRbxll9UcVo8sffs/Yv6rPGnZD8I4SQAbtRlO63BbZDTPNJWDKf5r2/IACxW4JfTXBNNZ6 C6LSrvTd 2dHNVNTT8ZGfbJTKxFSTNI72uovUWgod1L8S/drmlFiHASb/01ye9v1LDnUi552xowGGoCUtnU9Nw1EnfO/fMJ/m407q1XDqa2qCxO1RmjfPPPa0uE4/ORPsGNsd9usvZh2BUd3giJvU1Rlu2t6YNrVk6HBt4B3NueWAy2olGAXexqLG2v/59VeFk67nbEmfpeCeX8Lxtc8bSC6bQ3/DzusYn6JoDhySHzYCbExxhU7K5rg9lfmR6F39cSjqtac47VjfYD2wM+tXLjuObN2BjvZ+uzsAZ7FZhE/4oeaBDNr92TfqRiaLX2lNPnAK3YgyVvEjNI2FZtMaOKha6bxcSn10HUaJw7cSQa52Nag7COJzj3ZU= 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 Wed Mar 12 17:58: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: 14013733 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 DE83DC2BA1B for ; Wed, 12 Mar 2025 17:58:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB2FA280009; Wed, 12 Mar 2025 13:58:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B39F9280001; Wed, 12 Mar 2025 13:58:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 98EDC280009; Wed, 12 Mar 2025 13:58:42 -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 717DB280001 for ; Wed, 12 Mar 2025 13:58:42 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 13A6D1214FF for ; Wed, 12 Mar 2025 17:58:43 +0000 (UTC) X-FDA: 83213659326.01.083176C Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf26.hostedemail.com (Postfix) with ESMTP id 27B6F140009 for ; Wed, 12 Mar 2025 17:58:40 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FefVSytg; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf26.hostedemail.com: domain of 3T8vRZwUKCHIjQRRQWeeWbU.SecbYdkn-ccalQSa.ehW@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3T8vRZwUKCHIjQRRQWeeWbU.SecbYdkn-ccalQSa.ehW@flex--tabba.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802321; a=rsa-sha256; cv=none; b=abE8mI+6sYX4P0COoGbvVWrqeszfqvWXitOM1UqVa1ReQCiYH+acQvx2ce3uh3juyuC3l9 8qV68fpU1YZTU/2ZIE+tDF3BP5P3mixtTRf9U4FjTCYFUcxT7X1vsLHQarW+8YRHUd82/h woIavP5/aJ3WJAx17job4s6hNBJ+BI0= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FefVSytg; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf26.hostedemail.com: domain of 3T8vRZwUKCHIjQRRQWeeWbU.SecbYdkn-ccalQSa.ehW@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3T8vRZwUKCHIjQRRQWeeWbU.SecbYdkn-ccalQSa.ehW@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741802321; 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=Awd1f7IbYeX5crgm51oNRh01M9SxrhzmMhHWchIyiT8=; b=Ru+RZ+nzLw7lfJCbGbm0aV0QiK1anVYBpIIYP2gbLXmabfy8jhKFcBoR3ihZLusXfZgx3T D1KSzV6lCtquBXEQ0yHPuLvmnxOlbPjo1hy0/OacL0gwj3kgc66PKIetw9YGC79d4uhG5P 3SbdZVznBp/96azDxCpxDy1x1rtp/Rk= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43cfda30a3cso296215e9.3 for ; Wed, 12 Mar 2025 10:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802320; x=1742407120; 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=Awd1f7IbYeX5crgm51oNRh01M9SxrhzmMhHWchIyiT8=; b=FefVSytgMQ2eqc0esnrTbeLmwi0Knu0AkPXEFb+re4yS4znWgmzIlKRphoDaUwswdl LHR79AMlSekm49GxaxPM1LgmhEEjqT/h+9I0jqgrEGxdqGtpJqtB9TKcqZDf2B5fVeMV 4XXea6oAqv+DzVzqyYaF56R957nqRcpKOdpD/Slh1S2aL6JCVRtshSpN0f0aQ1cMfX07 zYg5Jy5xGFYrFQ86wFfFBEBoMBpkyN5PnRqMuJahs3qqvBQZ+bF58ciK+sXfAfy8cOAS k/91kZSpFsyWdiftRiIkvni8RJ4PoZjkOUYi7eA7zMJZBEv84rTVsEHdSHMNJOLLjejR J84A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802320; x=1742407120; 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=Awd1f7IbYeX5crgm51oNRh01M9SxrhzmMhHWchIyiT8=; b=XHzWhoJsbrUnsT3eS1ozIsgQIB2SV/0IxMx4m2JZRNC/Qbdn7V4YbewhBx8AhKdtwz gaiGgq7NEGM9+Ma/Ai8W1yEvfF4sA7TzZQkSu6Tn1O/Jc8Hqcyn/gTSgysY2zioGoh3q KaqMEs4ut431YXg3S1415goflM6/Pwtbvq1mVmudKJEqP26knUofOY1p4JKQ3FJgLVJo FdpmNCZmb7uxwxu0sGp/DaDapG+92HCCF8K9AK1hRM3YU01dChYCMHB+Wpi3Sb23o+VT ZffGN+qdErJKERfEkOgq3yr61mzrK4aDA4m8X6jW1IWVBbxEb58pBdBnfveh0OXiKkOa pL3A== X-Forwarded-Encrypted: i=1; AJvYcCU87aaFN/hg4QXl5Cw8yXidyLVwz31Chb1Lw5jrudyQxhrWNSil01j3EYSFYJxBQv2hHKSxHeONAg==@kvack.org X-Gm-Message-State: AOJu0Yw7LRKiARMwMMr6cjGA7MipXUne5TGTUXMjhrjaInb6kSVe9xYp 5Y3ZgII2e+4iq9wpfboMSeo7D9KAaO6pAqlDdiZaq/0wBx2O1CJ3lBwaEygYLRVYxDZIPCK9RA= = X-Google-Smtp-Source: AGHT+IHj9tfnXDE4zwGrzMtBNQTrEX37Nr1SjsVHZdIiFflWByxQ+d97M9AkHPF0ggQs0Ylalb5/M39WuQ== X-Received: from wmbbh12.prod.google.com ([2002:a05:600c:3d0c:b0:43c:e9df:2ecd]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4751:b0:43c:fffc:7886 with SMTP id 5b1f17b1804b1-43cfffc7ca2mr104991245e9.8.1741802319732; Wed, 12 Mar 2025 10:58:39 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:20 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-8-tabba@google.com> Subject: [PATCH v6 07/10] KVM: arm64: Refactor user_mem_abort() calculation of force_pte From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspamd-Server: rspam07 X-Rspam-User: X-Stat-Signature: d8i4ucqn41g6b5d4cj4759q491fkuj5m X-Rspamd-Queue-Id: 27B6F140009 X-HE-Tag: 1741802320-482750 X-HE-Meta: U2FsdGVkX187BuitVJBxZhWhLZpdwenhUf1BBJjworTT4faZef2xn4AtT5LPzP5SayzW/rcrGZO+axdG5K0+ysMBvuhdeld30mihltr4eDdV33WKab4BGwDF0Rbu00djyZ1JhMif7ok70ZVIoX5MxsD6kb2ZJAhwTbLioUdUYRCo+KBlKrfXzJYnCyw1utcntA72LY0h8AYhIGEFvezIxUSIDt0pD2MV8r+Mrm91aJn2fWiJDgE8iRNTYwoCU+nonb4zH+TswSPixCPvJm3SpLoCvR5QZOqqYqmh/HzRJ/4Y5WNWfTy2R0xRNfYhvweVfVq7LwacguKFFdGW4rxmsMPszII0uycH5Z64pCTawTUDu2XCmuVreG8g5+dz3t8C9xsHYlGcsZc8Bm9P5/yrq53KXB4TmD3xE4IvIwE4T/KB13mAwDgE45SILwAQaiffJvQnVI+IywCLy7S4Qo4W9WBojoNC/EFLDjJT/erV/ej+/7pIPWaC1dhduQfEW8P8w7IRIzYnBUBPcZ/mS7nwDslaSjj9H9jMwfcu/zw7jvBsTeIwgjTe6ulhx0ZZ4mKJDg45INKccWMx6P5x5EDLgQnOFme8ArOlPzbwFDKTq7gT7niK3kzSsY4lBrRUbgbW+Mo/qjVTQRJqY/utAkyMO+gA33YGTFUoYFqBxeraA3bE2byvov4OWVQW1taBWSovAHy8KLIV5guTblC6bjp8i7r6c2md3HS/yPWh9E0W1wJArWdqIre5fmCCQw+m+F59e+xjX2Bw81B5h+xbepev0SbAM5XdzU7K0ewIMnopMczPjoqYrb2SpdQb9GZTbjrSC0h2onj5aPpQHXDdVI0PFi4xbBbtfyIvpvAKiCvhqwp5ZNTXhxSem5Xu2oDESx80zQ2a17eJ8WQW+Vy3qWSTkGLyl0EMzP4BmBYeSzCkfU6BQDmVAYlNVzVQRKN+0HirbD+G98qBjLHazjKw8g2 KLcoRhtZ bjBwhbJcyLZMsLeJ+irPob/668JIli4YgkC5QCGNYCJkOz95YVJrxWpC4+aTuce8+MEZUPefR7Z7haaQ521/LSi6oNPhsJ8xm6cMsyLhV6SkPdfBPXOa/TXj3OlMRVeuPIQOvZp44qBNfI465I7SyOB49UCgo9i3iKI10DBQh2UoPwYY6veECCuh6VHaplmRRYLj35009mmuEaRiq9B81esJfBkjmT5KBzmLtMGyQBd1EQ61eTyaARvqjal+r4akvVLFpoPihzuxUYyzk5VfErK2PnF42flpIGVl9cJ8xXi+i3wvd2btqKzV08lK9saDqmXxNkvajfTAkSn4v2nQNXKKC8DskOR9rQ1O8vG5LL4LY9kyi5iXArjTSeDulkF701XOud8d9E6D22G6j9Nz4h9aar9Px/xiWCu2IwBDKS+081riPZtHAp9rqLNTj+utN1ZZ8UZVEHZOcSjEYsmw50gNdpje6JWy+hFVpLC0vJ3exNewRWfiBE1QBgjEawIBA6yu3u4S6wDGtmoxJYEPcd9kU3uzZU78Apl8laMoH1xPerfxgiZvF0TLMoSvDsiq24gx0Tpvz76ogoBJVyPiPtelqjEuctb7duYlYZ2nrSPz0eokOqoB1BuVT71d0gehY6ptJ/4YmGNVpo0beiBcplryEUw== 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 Wed Mar 12 17:58: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: 14013734 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 6D4A4C28B2E for ; Wed, 12 Mar 2025 17:58:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1670728000A; Wed, 12 Mar 2025 13:58:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0F134280001; Wed, 12 Mar 2025 13:58:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E38C328000A; Wed, 12 Mar 2025 13:58:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id BB793280001 for ; Wed, 12 Mar 2025 13:58:44 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 45F3912149E for ; Wed, 12 Mar 2025 17:58:45 +0000 (UTC) X-FDA: 83213659410.04.F63FEDD Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf10.hostedemail.com (Postfix) with ESMTP id 5D034C000C for ; Wed, 12 Mar 2025 17:58:43 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=PVdOQpS2; spf=pass (imf10.hostedemail.com: domain of 3UcvRZwUKCHQlSTTSYggYdW.Ugedafmp-eecnSUc.gjY@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3UcvRZwUKCHQlSTTSYggYdW.Ugedafmp-eecnSUc.gjY@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=1741802323; 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=We8c70tl+Zx5FQcQtlW287aL/adOZePxySoQID49z3A=; b=GVTYfoogZV98m5Iwo+MdqGzsOHPWndw+SMCB/mNe2rE0mjqC4kdxJyrQGtJ5FSm+0CirHt BVkoHQ3BX09qP7ii4/ukxGivbHAcaUMfCQQbV5VhIMB0PD6sZ8Vk6xLF1LAQbKrQCd29SW veCer/DdEbFoIeNfTft149XzJgZ7yCg= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=PVdOQpS2; spf=pass (imf10.hostedemail.com: domain of 3UcvRZwUKCHQlSTTSYggYdW.Ugedafmp-eecnSUc.gjY@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3UcvRZwUKCHQlSTTSYggYdW.Ugedafmp-eecnSUc.gjY@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802323; a=rsa-sha256; cv=none; b=rynGrRE7ljHPXChmwt5lURzrVTjBz1xxULzdPFAc5YSTUrBqMefwdIQHE5snn8QyzM+lL7 HjL7z/3oCJB1MpQLJD+hlj4u/CwJeVXwQ42IZ0v0m31e9H6PNhedBkTKoXvF80eB46AA0m a/g99h1c9sk9WeneZlgZ8sLZfzPBiOE= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43cfd9b833bso5599695e9.1 for ; Wed, 12 Mar 2025 10:58:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802322; x=1742407122; 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=We8c70tl+Zx5FQcQtlW287aL/adOZePxySoQID49z3A=; b=PVdOQpS2QVJACuC6Yj4eeA63U14wBJLSNqiEDw7g1Be2jpo3Xh6g6wTH2svr3Kdggk Qzzky5Hw1/CqHe65I9vbIg60c/LH6RfWokScw8FijYebyOV/Poq9+kycTjEXmaZWzeZD QC73CaNJUxS6LQpNREEq5aTonk+DzLgjAXCW73bQNU3O/DZCxV1CwBPCbTsgz2C1AhSQ RW1EQgDK+xKkuAHtdiasvCYM3eAPkRbsiHE7S5y9NRNXvqT6ElYam4HgcuZ/82HYuogO sTw4TzypwAaMQdHqbE2vh8xBgQW9ulpPnvNDBJ6RB4r1MOU8RLelfeTJ1ybOgq68oKqP 1nBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802322; x=1742407122; 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=We8c70tl+Zx5FQcQtlW287aL/adOZePxySoQID49z3A=; b=lws8kSBFgI89RlLGXr0RtBDoPabT3pjkYMeFNKw9AgB/+228RxjDmmT8NxX+BqFiOU t3yuJ+e9qKhPuiB0m2PHnHK5JReSb1i/IQDo9WJtomneTdhe/FaR+ImRNMBqtT81fG6G pr4SKtHRyXOJ4mlyFXcyh6PhTCYMQKaxhvwCpgpH45Vyefpntouo2nZh0ctFiaIUoaZN XVNbSekNPdsHGcePcLxsPBlUQDnecilZeRrIksIFL9Ui+l8+XvGPfHF5lpko57PR6sjm N2GdpScxRKt7PWvGOtQTpKHgwWrfJFdQE4YyJXXgZl6M/kBlA6iMgkRO8HI9zf31gYvY 8J1g== X-Forwarded-Encrypted: i=1; AJvYcCV4JVI/UIhjZ3OrN56N3oeZYAWDDgGRFR/zB0hLnhlQhhTz1zTiZPbyGmoP4Xtk6+iIpo9Q9AaqDw==@kvack.org X-Gm-Message-State: AOJu0Yyb1QEcANBf73Z8CLayB9Gdis39pn7Sk8dHz/oY+5yReCQYu5ts RMJXRI9k96Y6HYQshiEVhOOle1WjiWZZYDNqP8WAxFCbhTUU0aPYHvl//W5bgzbL8QSy/BNPuQ= = X-Google-Smtp-Source: AGHT+IFgL9irGVEt2YWfb1UQbIwVL/VNkbXIcKNXEidvOBQCQVT8F8I3RbRKchYk4z05AIfWZpjSXgIKCw== X-Received: from wmbeq9.prod.google.com ([2002:a05:600c:8489:b0:43b:c9fc:b269]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1913:b0:439:8e95:796a with SMTP id 5b1f17b1804b1-43d161ea047mr4367375e9.13.1741802321988; Wed, 12 Mar 2025 10:58:41 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:21 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-9-tabba@google.com> Subject: [PATCH v6 08/10] 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-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 5D034C000C X-Stat-Signature: wu664ueabc3ay989qb718zorpbe8ys4e X-HE-Tag: 1741802323-167627 X-HE-Meta: U2FsdGVkX18SzR+3ruE9J25rPwxYvmatmIkxQzsy5M6KRn6NGzKjVDlfIPUbFzvqycX2CfOg4mlmUfc4Pk2JrDFlJ2jAPsgU4Ry+S9UTRxsJa0TIivhJcnCJ2wzIbH3nALQQmBmo14cPnYEyWGCXUl5dhK0LKDQzJY5fpLIIdqgxi9OZPv1x3qa1JeWo+leUje7kHnHriWC6NMPgvzzzZXeiMBmMoF25whz8ZtG7kvMwXgVULJJcvnzQK1Aauy+CuvavJ3xvzEvrKNDcxzEgbkp45lA17TRDXq0aOUpssRl9q+k3+k6vSYTnI1iufS2Ynq2sDu7ePGzaAz932VKYCrDOYMPczaWJLpFG1PwSNzG3qjRap/gpTSE+Chp7CP8/FAVK15W0WLU1BUnF5uo8I79tg5UZj1dtGPqMffniPTu8DTzsUwzhs3H4NxMRZsApSOwIfJ8RfiEcIEklWsQ7oVepg9kXGN5Hb+/ZyCLeB7VNjtmULMbDMRQnCtdC8+W/5hW8+JGuqxuzyV1DWM/m5UyC3SOZtOynK3HpcX0MyNWPy+6PdMjokesCWOGnjhL6FYsdbjREvAJQI905wG7YADkfXjd9vNwZDJ8QCRb9jRZZ9z2+72LxieTTWoycOF+rl+4HdUT7iMHEeLfQkcFeeNNYjyt4nTkWubry7hRe5v+3AGlOMujAm2uj0hrLtOSiILQO74aanwKHYr/vj+FKQYInO026Q3+XVDhmmFNk2IH/6sCGpkFEPpHR1ZxT0qLkdjmPZnJA/YYFNXqReWcTgh0M6jiZNuBrWwVkN6xof43R2KJ9PfEM4Do4oZT9MYGm5rX1V65GIPuXjrIuIsEagk20zOyj6R9IDVV2KEfbIRJgegwQWxakYWV+gm3j0/a1NZAoL6FgoVWL5RpG8SQ6ctTUn8YApNnFdQ7Y22EZmDUgRdNjPkPckf7rknRZqHfjv2loAMcOXu8PVE7OQRg HpTVHU8u l++g3iaUiaFMcqwjytfW2ytFU5SCFEwFt0gHoApP2qF8EureAG4bpqJ8h/aZYefDRZmp/bqZgVyg20KULVoWphNIHLOsX+ZuAj8ftMJ5WN53bKD+Y+aZSF6eAZryXs4ps9Ypwia8q3PrBpVDGA4g5WO1GNx5Nacx6IOYfpBvdCW7wcHDZf8SZw0Kh5OoXg6yKUeJRr2UdlWD2WNiqC2KTzXnwfYp32sXO43m8XXNesluOd01rSiHFMN49+z5yOvc8GizAuRssp3mAMfSV+yCuRxuXj98pHiC/xZ97VGyEVHRXtuzVCRG1THl312f+ghSamNkmAajhHQCKp9e1no2oJwf9qEgMrMQpkXodvE+ZVZATCl2A3VeGSBfKXLSHxIBlinUi0z0lmEObNnMcg33B7TwWo8C5BXj+s5m5RWvHOceNUkT5nbYwxeSsk7ZlpQS2DMW4AEWqSEb2OgCqllNOGqwKTPyxmSmHVhmpGZI7A26GA2jrhSZjeZjK40MzbhSsrAX41MEDthQg8xx+TxlE8O5tp/7USKEuwPA8/JXMClrJ5LZT8/aeFEzbafUNrTzQA/V8IuPzxh8ag+r+qdUPEA1dZnKZXCcLN2/bG28FAWKqJ+67ds3VEiGbdNBae0ExZUbBGwHFvd25VSBBuP4CWyGbFg== 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 Wed Mar 12 17:58: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: 14013735 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 1B008C28B28 for ; Wed, 12 Mar 2025 17:58:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1358128000B; Wed, 12 Mar 2025 13:58:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0A151280001; Wed, 12 Mar 2025 13:58:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D8ED528000B; Wed, 12 Mar 2025 13:58:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id B6BF0280001 for ; Wed, 12 Mar 2025 13:58:46 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 5F807A8CA8 for ; Wed, 12 Mar 2025 17:58:47 +0000 (UTC) X-FDA: 83213659494.07.00AC9FA Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf17.hostedemail.com (Postfix) with ESMTP id 7B41240004 for ; Wed, 12 Mar 2025 17:58:45 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=0ShJSYOS; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of 3VMvRZwUKCHcoVWWVbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3VMvRZwUKCHcoVWWVbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741802325; 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=hYJFKrO7ehNxwQgkQPklR1qHjwdzPiYZpyonfD7j1as=; b=lx5NiXcuK7hrKs00zZE2S8T8FG7fsQd6nnrw8GHRMDoizo/R7e8cDmfPdTZVkBYAeGzttb HpAgIgrlcC4CEjo6vFg5gYoUTPiaAUkcMh7A2px4mBJYTJVPanP6D8vASTRQE5ttE064P9 u+FKNElLw0/JmCWSs/ggR9ISN6snQgU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802325; a=rsa-sha256; cv=none; b=OGMXv44MQyqCnuIpEIo6KKWFV67SlxjiQDnbGQ/bkNBsr4qe0oxmNdKDnrtcttQVs1iHKx 6v4rbRzzV1aFhxdq0YaSpu0UuilqTskakjF0prc3kBW0Ys3j6zQPmQyHrX0AW4GHBpuZg9 V602OAsga6q4ClyAz9Ev1x+pn2mS23o= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=0ShJSYOS; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of 3VMvRZwUKCHcoVWWVbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3VMvRZwUKCHcoVWWVbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--tabba.bounces.google.com Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-3913f97d115so83677f8f.0 for ; Wed, 12 Mar 2025 10:58:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802324; x=1742407124; 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=hYJFKrO7ehNxwQgkQPklR1qHjwdzPiYZpyonfD7j1as=; b=0ShJSYOSfOdC1PrMSmvTbVIff10KnzwCPAJvuONRdtZkR8P/ZQkXD5Gzcs19BSM1It sWv0hCfzTygLlwINPwbMDjbT3CvipapdgJIvU5lGya6i7PzDSkFwXP9pTyEUwfLlsid0 mGJTGP2rXiyIK030Gdbqi5p2Y0RBsb7si93i1l+udDaV9/6wSzhXmlCHXJUkZDp0yjBd K6V5wFaIz49MBfl6bXG4aQFeUiwH/zaOSBkkcyRRH3FJybOsJ0QkmszEXeQMBJYV9jID 9WS5xZ+LywR5JvoZ3A/XEaPnA8wUWPFGCKi+T/4kXo0g7fOtkxwLdSuttYP75x/0tVdW XjAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802324; x=1742407124; 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=hYJFKrO7ehNxwQgkQPklR1qHjwdzPiYZpyonfD7j1as=; b=el8sklA9DHUfljjvhm560muFsqZ/5LBMHt3THnu033kRiEUnXzbNzGtrqaNizhhEVh WDKDKivEvrhgb46Cw+JaQCZbZIVzCsWXB0D035tOZssott9YvEeGJ1eEY+ia1b3/pTD7 xAtMc0cPrL3vO2IlmWgdoASdpxoSx4LMKTgAXcntMprEYlqjb0j4xABWV+9jFBmsGkMU NbSlwIMU0Tu89Iok4FCDDa0Kzb8MHLnO91zvde9tBAd49JoCjDFD1pqIiu6gRM0CdXFe Bb7gFATV/GD6mFzf7IQ1tMnekLSwlWeBJLDSEU6OW2B7fu5X5GTWOOffBrHoHZEhy+pX XNyQ== X-Forwarded-Encrypted: i=1; AJvYcCV04+vAMZVwlewyokTqNuz6znVn4vhmzNkszz8jSww3PyzwIssQ/yenXXhALJZV6uoqFIEU1bGgkg==@kvack.org X-Gm-Message-State: AOJu0Yz/VwKvlAtv30bM98Jju8YkW2Q6FbR//kYT/Q0z2URrQz0iA1Gd zOYtxsS4+23MBMfByP833iUlOjK8zzmxJN/y5ztf4cJogjd8RPU4AVY31zacPHQILbYrhGz2XQ= = X-Google-Smtp-Source: AGHT+IHQSaL0y42vC9qHHbU0sI/iFbdLjbiwdGaYuErHiOt/6W3ltnpQGYP4gPL3EaUPVT6jNAZ9Hud5Ag== X-Received: from wmbfj15.prod.google.com ([2002:a05:600c:c8f:b0:43c:f122:1874]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:4022:b0:38f:23c4:208c with SMTP id ffacd0b85a97d-39568a1c22bmr422481f8f.18.1741802324225; Wed, 12 Mar 2025 10:58:44 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:22 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-10-tabba@google.com> Subject: [PATCH v6 09/10] 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: rspam04 X-Rspamd-Queue-Id: 7B41240004 X-Stat-Signature: mjhhze7wtjrprcgtk76bzzqjsw18og1t X-HE-Tag: 1741802325-603901 X-HE-Meta: U2FsdGVkX1/GjP5vLAEh3m3me3zUuMPb1AVm8OD9sMDsKHR5IlKrGugNAD7DFQ16TnvRFfb8017Fjdd8kmOOizH0zm6P7B4Sne2vEThr3vr7hBfOpw+IeTr9sbqKaPYb0IIemboXxoSoaOXVPDCWybdwv47DHRpIkIpxGkAtA9aJpJKTT6gad78Bp0aSC3C97qZkgd0AXluKpXq/mPkuYCUdoxiqEslIr4qB7trBQjzgedk/a17EwFnqjDRUOwUChwK9hrx2enwCb5dnTJM9udQeWbqSR6MfZM71hkFxPmbu7h/FaBt+nH0YOT4e9eIFRwyGKTNaGEiGLuvKUx3gIZ9iq/siz7dAh0R8HvbuoBhyjXdWbLeQqZohfeNC9Ed2JdvQJaPGqPSL9pRSPxx3tywjYvAro50E9fb4GkwVctcF1Zyh5hx4K6Gk/0jLn2LafO9zQrHIt7JlYVoOHCrsypAqQs1P3SBAmfGohzyx94RO+2L0+QRjNNkepYbNYL+RETPxmiS6O/2825eIgtCQqm5M4rR9T2rt91qGTbzzVXfCIwAX2Z6GCefhKHuVaBqHCSvCQdqZ32twQQVZOP8RdND32WXbRN7TzXkp4Anh9h09DkvtwMTnYEH89mPSv7lkDDwANLdT44xPSOfCBltmkbNICSfDAgATjLGh+MIRmhTSsKVSmA92ha9Tlh3eq29M2TI9nrzOg3JHI6Gx/c7j7RGZcMRqxIrvyZ/WO+nffcXhuHGp1zK5CjAER78w6YaSaErBlXiiHF/mrJQ8UGC5NqqZd6pJR/0QVecaE4A9L4Ekg5MbMiguux2mdmrMC+uN65pdD93qqaVq58hGxqz3ZnUzwFPg6gHNaGyyVULGh3FAYX7hVSE8g9Ww1ert6tk9rze1lnIzPzotyG/AMw2oFSJ7mhB7KiYxdPeT9/hYLqhpmmAqIfEdHGeTjjdwKa5LctjVJbUqoyDvZTBjBrP 6Ct9pNPL bBFcy4hzcAuPCzF7nOJNjvBJarVIxAUXFNCEDqes/Au8eXO1QznsUuhufEXupr9l+eM9lSuV27Cdhf6QPzJ2EXQ7v1QtiMZpeFPRsQPmapLV1Sp2vNaLj5eGSEQ0ccA+Vv/1FRmlpQ/aI2gohjsoIK8mcAWzfXye2/m5RgBLr9cK1l5cCLL/HRboIYCVcu2xWH//wvxqpyJC6kppww5mnDYvA2pu84KggoZU/cVdIvLJLx0vOkT3SwX51A4MzG73VJxW6NizAfeeS9wAIu1m0mdqWuUAh7bcwUUqGVdGNMGixpfZons+a+la98qt9gSu5QX2cVv8NsplxwCa7s4Wa1DjLdGnIEBdlPmzqmyjXpug6YMxaXcuopMV+kfLNvkAPXaSX0nRHv71VVWg4+CFVJr0subowHfHNkz6Huza9DFGAL+bJ4koHw/If95aWFfM7QWTUJ8kUKlQ1aYJij4sfTrZsuBZjiMFYn2HLlyt3rKCRIxlDpkoVrsj1+bd1OOwhv8LmpwXjfKoIvYufS/2uCQGsY3Tght2qMxghurt6GILTzl4FUsIoZrR90QzaZpFoUX0hfn72bWpDCxpPZ/t0qBGc+UNJISYtQ5y0pdXgVJ15ivwG5/TpkrreuHDT5BfFM4l1cBmNGqAq95TOO5F78mORTb9BdyZsgTklg6fzy38F7St9+Wz7teqbnpyDO5wqqWKY X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Enable mapping guest_memfd in arm64. For now, it applies to all VMs in arm64 that use guest_memfd. In the future, new VM types can restrict this via kvm_arch_gmem_supports_shared_mem(). Signed-off-by: Fuad Tabba --- arch/arm64/include/asm/kvm_host.h | 10 ++++++++++ arch/arm64/kvm/Kconfig | 1 + 2 files changed, 11 insertions(+) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index d919557af5e5..b3b154b81d97 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -1543,4 +1543,14 @@ void kvm_set_vm_id_reg(struct kvm *kvm, u32 reg, u64 val); #define kvm_has_s1poe(k) \ (kvm_has_feat((k), ID_AA64MMFR3_EL1, S1POE, IMP)) +static inline bool kvm_arch_has_private_mem(struct kvm *kvm) +{ + return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM); +} + +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) +{ + return IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM); +} + #endif /* __ARM64_KVM_HOST_H__ */ diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index ead632ad01b4..4830d8805bed 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -38,6 +38,7 @@ menuconfig KVM select HAVE_KVM_VCPU_RUN_PID_CHANGE select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS + select KVM_GMEM_SHARED_MEM help Support hosting virtualized guest machines. From patchwork Wed Mar 12 17:58: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: 14013736 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 BCA56C28B28 for ; Wed, 12 Mar 2025 17:58:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 01A1F28000C; Wed, 12 Mar 2025 13:58:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EE27B280001; Wed, 12 Mar 2025 13:58:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CE49628000C; Wed, 12 Mar 2025 13:58:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id A8DF9280001 for ; Wed, 12 Mar 2025 13:58:48 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3EA43815C4 for ; Wed, 12 Mar 2025 17:58:49 +0000 (UTC) X-FDA: 83213659578.27.A062A65 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf30.hostedemail.com (Postfix) with ESMTP id 66A278000F for ; Wed, 12 Mar 2025 17:58:47 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=L6HHSf5V; spf=pass (imf30.hostedemail.com: domain of 3VsvRZwUKCHkqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3VsvRZwUKCHkqXYYXdlldib.Zljifkru-jjhsXZh.lod@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=1741802327; 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=IlIj3TjUhtkedIPYTVHeRQbthVzaFoCCtbaBiaH1aMs=; b=Nx4kHL6x/bkFb0/ATd9En960e7c5jwcVuqAvRBCCzu6kOPv1pSwY1d2dM7Gx64tIj+VHFI DH8MU+GQF7Bombh9d5eYJya4WT/3RoYEBhw1BNOsHl9IEjYLgprV55vszWeboXKmT/XHOT Z1vTPHiIkQetieXzf9JxgX/7GKPQBMY= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=L6HHSf5V; spf=pass (imf30.hostedemail.com: domain of 3VsvRZwUKCHkqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3VsvRZwUKCHkqXYYXdlldib.Zljifkru-jjhsXZh.lod@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802327; a=rsa-sha256; cv=none; b=XVybHq5CAIQoeqQREUwfpvKJx56coer0ddG1IRBBIy3FZe8sVbws7VFwXe/LYecQWCb3IJ Rzh9DugRc7xEqGVQbr8J3hDfjoqJJoxdBbBQR7u+BJQDRj6Yyp9UsS+cjcppRnoylA8Utt UPTwO0/YrfnB2vF8srLMuQygX2ldtOk= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4394c489babso347595e9.1 for ; Wed, 12 Mar 2025 10:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802326; x=1742407126; 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=IlIj3TjUhtkedIPYTVHeRQbthVzaFoCCtbaBiaH1aMs=; b=L6HHSf5V6EnJcaJTi2y8z+CUIGO0dA/keW9pw/8zpceveX5iGb5TIE9t7lCZYd99Rx /CQOGb/RaRQWQUXeMqn+ce2u7wCbIXow0etmaYPWiwJEJbABuEfjJ1eyXkphwWj0uICB KGHhEPPkbmTstQKqwCt2acYRubk7xEupBTsv+2gVS9ceENKiF2bX6rJSIPz2OJHjQIRp zppioEJwOyifvHg3fqG4fgsBK80Z/t7xvqOhUQQ1Z+sYVwuEogmw9RH2K8fvCerB3mWp l3G6YMLt5NoeAkoFKdlcOwa7nUp1LL0dhUzMRzM3MtOpZoFxHIFtmW6nJ+cvyZZ56BDJ DWGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802326; x=1742407126; 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=IlIj3TjUhtkedIPYTVHeRQbthVzaFoCCtbaBiaH1aMs=; b=ps9A/GYVy3VVtxu05iW090pEFtU/kyvGnLtzaAz4uPbWMA+fbgQA8S8qid0H1t0LwJ nNHVnPu5DjSmLAWUyyZQoEJ9RFnJx3QMLAzae8DmaQfmUCnoZiTTmd/TQQx6crTtPgp9 sVHqGFbiR+ngevbnAzgBGwhLHH1wsdPq6OH2y/Wkwl4FvPbc5g+0uzMU9kboPz+FLS+y BMS9pWE7gq0u/bYJfa1rLzFD2Ep4okIp+aukka+mq7VH1tYBJJDDEGBRSvnJv+psSTqf Q++8UoR3lN7GKM3QnnhZNAsHVU7r1Ve4FUKriKjXKYJb60ghoxH+m6VT41FesIzTFOx8 58XA== X-Forwarded-Encrypted: i=1; AJvYcCUJ57Nk2m2NCPJH6zZ+QmjvcPaciuXnpERdADIS3evdgDcPH/Sr/7HZFhuCqzfS35Dnv5EEYBXU1w==@kvack.org X-Gm-Message-State: AOJu0YxquH/37MapqnnQpyz0ZT9Tl0NCT0rkxiZOHLwgj+b9crSnCjO+ Fs3viImg7OKdgn4dKAeKi4pKjTLs8O5QUJ3CJ1icgm8L3ZuTZewDnuI4hp9knkFTHf3xiSpgwQ= = X-Google-Smtp-Source: AGHT+IEjvTr2HYGSAjPDkNMw4G4npR8OoTHD1VZTAuD0hSm6xCoVT94NRgIvuCOHObtSUaBMEiPsUwonRg== X-Received: from wmqa16.prod.google.com ([2002:a05:600c:3490:b0:43c:fa2a:77d]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1d09:b0:43c:efed:732b with SMTP id 5b1f17b1804b1-43cefed78bcmr140968325e9.5.1741802326090; Wed, 12 Mar 2025 10:58:46 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:23 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-11-tabba@google.com> Subject: [PATCH v6 10/10] KVM: guest_memfd: selftests: guest_memfd mmap() test when mapping is allowed From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 66A278000F X-Stat-Signature: sdqyws8cosdxdrc38w1rtt4yge7fwxry X-HE-Tag: 1741802327-986287 X-HE-Meta: U2FsdGVkX19OBjnJKFeL31UTcJ4vVsxJC3tArCxy8MAPFcjSFmv1OuIgohOieCKi+1g11eDPRl0808iwgDC2C0/P1xBIoqQh3C6FSiRehgrxitXc5Krl8QbUJaK2FhAwnBLl32e2zZLSwXvhOYTjSUu3CGub63S1QLvIhUZCsjtlmjdzDJRj76Ss0QqZqYYTp7rvI/V1G+eE9qzjua3uCOyr5NG7abDNi04tqUkSmIJ6mmnWCdYC/ngVnMIFEnv7334c5vg/ErRnc+6en7W91+DVVfHsfWzv5ZnyYM8tv7vrwN1TmsPUIqi4A0ypHsho0CAtVnl0kRME5/OuMRazMZeQLuzR7UG4rCxWDYjs9a8EAOroy+XootxAhLwwvRf+VylpuGPUBWFX1y44WNrSLdNFyN1j1qMT/XyKOJVR1251D7nJQqZHrECpmPFfFLYdWhGn22EB4bLG9L81dBi1f+y8vx6BJ2jwWVET6Lo4aRFcDXpBEE4Q8N9TpbGvFX8S/34hmvhkUnm63IsWr9/jpurX6I9NutqgH4f+UusxJduaZjUQ8lJxvw7lnpwo0CoMnOMxFb/vqc9307YVN2pVZgW13LIRRtCkKbMJ3Lk9/mBystWO7eiJtdQcqc6EN2a/G5cwxysqul/QChJhiYqVv/EdDJydCtmYWGXe6eFa+g6beef2RWqbyGRvxJT5vd8HQgqrPSXKVYUFSLuUDnIPr3zWMgslF6A4S7Fe55xJFhMePm8LJeSpQW6PkpiZL4Ik1P3BrhSEqreNYUSxZ8gz3b/i0xQaqMR3qqjBP5Y6nzReBTOhmqJ9iACUHIz5z4nO/R+m9dtTHjiYnvqbE+umivjJUHQx2QTikG0TX4QMOkgmjgnEw41s5KWxPD+xgDRCdXcUqxVFmR1sL3oKXd9TJHHs0gyDJZvz5t2RUNN54ERt3sXnVfBCE3uPAzHetNSpE5vaEhSkZxtlFUCQvzJ 7C78PRF3 lwZyQ8m1lpJ5U2jpxWoWhQyEKasJQV5I9bRNTFNO3gixEOQsF4ZUaBVvEToM3lsYcAfA+ILJy7CxnC7TyxCnzFHfwNMBgr7GNlatPvPR8dHCI679xcP5mL5kQiCNW9LoYPhNDOWkebSoiFEnbSEX+dhd8TpvCnTeIlHpyakl8ISXBbOCPXUlf0jfdeiclmV8z+sCCZ3capSefQ0MyN0DHlmFYOZ/cZOVuEJfnl8dXLKzgZCf+Ccy2q/FvQykRO+mqd6dpr/J9a7rGyh6Od82J6zD83PYnMlVQ/8RmWdz9C6tJ265MLi9n2V5rawOt2vQEE7etwuBNo6pa/u1hX75c6qJ6Cvl0fkGVB2Cl3zoJNEGlLwM= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Expand the guest_memfd selftests to include testing mapping guest memory for VM types that support it. Also, build the guest_memfd selftest for aarch64. Signed-off-by: Fuad Tabba --- tools/testing/selftests/kvm/Makefile.kvm | 1 + .../testing/selftests/kvm/guest_memfd_test.c | 75 +++++++++++++++++-- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm index 4277b983cace..c9a3f30e28dd 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -160,6 +160,7 @@ TEST_GEN_PROGS_arm64 += coalesced_io_test TEST_GEN_PROGS_arm64 += demand_paging_test TEST_GEN_PROGS_arm64 += dirty_log_test TEST_GEN_PROGS_arm64 += dirty_log_perf_test +TEST_GEN_PROGS_arm64 += guest_memfd_test TEST_GEN_PROGS_arm64 += guest_print_test TEST_GEN_PROGS_arm64 += get-reg-list TEST_GEN_PROGS_arm64 += kvm_create_max_vcpus diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index ce687f8d248f..38c501e49e0e 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -34,12 +34,48 @@ static void test_file_read_write(int fd) "pwrite on a guest_mem fd should fail"); } -static void test_mmap(int fd, size_t page_size) +static void test_mmap_allowed(int fd, size_t total_size) { + size_t page_size = getpagesize(); + const char val = 0xaa; + char *mem; + int ret; + int i; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmaping() guest memory should pass."); + + memset(mem, val, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, + page_size); + TEST_ASSERT(!ret, "fallocate the first page should succeed"); + + for (i = 0; i < page_size; i++) + TEST_ASSERT_EQ(mem[i], 0x00); + for (; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + memset(mem, val, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], val); + + ret = munmap(mem, total_size); + TEST_ASSERT(!ret, "munmap should succeed"); +} + +static void test_mmap_denied(int fd, size_t total_size) +{ + size_t page_size = getpagesize(); char *mem; mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); TEST_ASSERT_EQ(mem, MAP_FAILED); + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT_EQ(mem, MAP_FAILED); } static void test_file_size(int fd, size_t page_size, size_t total_size) @@ -170,19 +206,27 @@ static void test_create_guest_memfd_multiple(struct kvm_vm *vm) close(fd1); } -int main(int argc, char *argv[]) +unsigned long get_shared_type(void) { - size_t page_size; +#ifdef __x86_64__ + return KVM_X86_SW_PROTECTED_VM; +#endif + return 0; +} + +void test_vm_type(unsigned long type, bool is_shared) +{ + struct kvm_vm *vm; size_t total_size; + size_t page_size; int fd; - struct kvm_vm *vm; TEST_REQUIRE(kvm_has_cap(KVM_CAP_GUEST_MEMFD)); page_size = getpagesize(); total_size = page_size * 4; - vm = vm_create_barebones(); + vm = vm_create_barebones_type(type); test_create_guest_memfd_invalid(vm); test_create_guest_memfd_multiple(vm); @@ -190,10 +234,29 @@ int main(int argc, char *argv[]) fd = vm_create_guest_memfd(vm, total_size, 0); test_file_read_write(fd); - test_mmap(fd, page_size); + + if (is_shared) + test_mmap_allowed(fd, total_size); + else + test_mmap_denied(fd, total_size); + test_file_size(fd, page_size, total_size); test_fallocate(fd, page_size, total_size); test_invalid_punch_hole(fd, page_size, total_size); close(fd); + kvm_vm_release(vm); +} + +int main(int argc, char *argv[]) +{ +#ifndef __aarch64__ + /* For now, arm64 only supports shared guest memory. */ + test_vm_type(VM_TYPE_DEFAULT, false); +#endif + + if (kvm_has_cap(KVM_CAP_GMEM_SHARED_MEM)) + test_vm_type(get_shared_type(), true); + + return 0; }