From patchwork Tue Feb 18 17:24:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980311 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 4D759C021AA for ; Tue, 18 Feb 2025 17:25:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B5E77280163; Tue, 18 Feb 2025 12:25:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9ADA028015D; Tue, 18 Feb 2025 12:25:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 80083280163; Tue, 18 Feb 2025 12:25:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5C24E28015D for ; Tue, 18 Feb 2025 12:25:08 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 05C4347D02 for ; Tue, 18 Feb 2025 17:25:08 +0000 (UTC) X-FDA: 83133741096.23.1DF9611 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf24.hostedemail.com (Postfix) with ESMTP id 254D8180016 for ; Tue, 18 Feb 2025 17:25:05 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=t07yuQpG; spf=pass (imf24.hostedemail.com: domain of 3cMK0ZwUKCA06noont11tyr.p1zyv07A-zzx8npx.14t@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3cMK0ZwUKCA06noont11tyr.p1zyv07A-zzx8npx.14t@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=1739899506; 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=uH+fBcfhHBnIgnx24Za2RqEfoW93YGim4l7wHxezgLs=; b=SbtFjtQJaDHIXlrwuZnt5Aq/Mf8S2Obs6ZuTz79CSrJwoivut/ksRXXu7K5Pi+PK897PmV hPZQ2M8Kt6xK5HIEOk/8i9D8wPLKBB93cj5ZkXf3WWD9xGs339u1+L8Ekpm/SrEL9+OXtJ SWjX92UucP3zJcVgI6v+TXZj+BGIUu8= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=t07yuQpG; spf=pass (imf24.hostedemail.com: domain of 3cMK0ZwUKCA06noont11tyr.p1zyv07A-zzx8npx.14t@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3cMK0ZwUKCA06noont11tyr.p1zyv07A-zzx8npx.14t@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899506; a=rsa-sha256; cv=none; b=wGMR3rVYEjuMiwoKiLtibJcBiBZvMVxZuNkmaULE2VwMw6qXN0ZAqLjjpPbu46U1FoM0yB S4vhLAJ/qel9HarFZy14NDVhy+iYGiT4PHQ+uz3VEbfvaVbDP2IApI6y3AMMyvCdA+r1kk cEyaXnEGL+ynNyP/bXPr1iu7XtC2qgw= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43935bcec0aso47133305e9.3 for ; Tue, 18 Feb 2025 09:25:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899505; x=1740504305; 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=uH+fBcfhHBnIgnx24Za2RqEfoW93YGim4l7wHxezgLs=; b=t07yuQpGp8QFtnGrcY7cLdp1zUC0n2QyWy74d+SQ2ONvORgXUl9LZbsVyU7YdGszi1 xMqxJ1cpmY8ALLg+L+qg8darTaUq3Sp2jhrFZfpvqx+gI3kgdR6W3MMEoZ2OTPZPMeRz RH7anXW13LfPGInVCbteet/hWWK9Yq1MrRJkCupDcVQQJ9Bz8T56uL8HhPCculKsv2aT 2vYsaFPfpx9kt7K9OmjVhOGwIzVXZ42FV2S+3vNXDepeZy5iurxy1jP/Yv0ymPjvG/4Y 5uF61M6Hg1kd0boozGiNSWnCB8JYMspBRuevmQFFnuLPiNiJw2VjYqsbdY61Mucu1VpZ pogg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899505; x=1740504305; 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=uH+fBcfhHBnIgnx24Za2RqEfoW93YGim4l7wHxezgLs=; b=cai8TJOZJzw00wzp9RAGaQafjvr4mtGe0crzDhrl9tCL1z+DeBbuUSPV32eU1E1NxC rG1se29tDP3/h8QzfszBIO/NuYE4sGJeSuXIjOc2KkufQzeEJJdAM7zA0TrD5zXqFTiK YS94/TOlEeuyKlye/9/DpDJPd4eo0/pVOMURLFShQafXNu/gwkex4dFSW7KJD2MTmdJ/ GGLcuYyp47uHxSOUUrjns/AnCOzJ6d6YjN4WvqFtbgIWsYofxVKdlKz4+LFE+82vqP4Z /tVkdiV/wTuA2sfKXjfejRXRukHpylxxdjeG1QsR/7BkQSpI/X+3TvGu35xvf90/edSD QP0w== X-Forwarded-Encrypted: i=1; AJvYcCVvm8XlrOJaME9+Smut3Q5kg++qO2ABEqxpJ6Jaw+oatIcW/FlaLHmWRBWkEc/nT5jnoTXy9EvRew==@kvack.org X-Gm-Message-State: AOJu0YwAChTduvwFLDbVUMZroZSZIHfpjgSvCrFo4CFCgus1UVQI8NVy ZSg9enLwIxccV07GdU4mi3wOPFf5nCMECHsnKXCFTkjjrKTWASz40lc7MtPdYUSMgtRaV7DHXA= = X-Google-Smtp-Source: AGHT+IEO+Q4R/pkJYt43fJfT5ZiB8RQT6Y+1MuFVz/324xaxqgmgHccN+PjmLq2lzd6582it0nkgtuGjWw== X-Received: from wmsd12.prod.google.com ([2002:a05:600c:3acc:b0:439:9541:1cf5]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:6547:0:b0:38f:2073:14a7 with SMTP id ffacd0b85a97d-38f33f56437mr10419463f8f.47.1739899504782; Tue, 18 Feb 2025 09:25:04 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:51 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-2-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspamd-Queue-Id: 254D8180016 X-Stat-Signature: qpqajfpsqai91iw8y9txt4wntuz5txqt X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1739899505-526733 X-HE-Meta: U2FsdGVkX1+8EmYCCoNNJ/1/wz2mfYOc9yAV41d4tNnR83TUpMI31lxdXu4mB8zZolGVe0mRZFDySx5L1yokjP6QdTw6Il40HkEuteoSmDXedGeqcBfvcuN67T6ElnwlutiJPdHhl5+Oplbbo00LrwmyR1WY1nwoTDiwXcdPkiQPWoCle+MnlLwyi0fH0vt3kYWM4KJ29fb9qAJikIzddi9g9Lg8p/tO4b5QXBqRBVY5bepjDsqXae2DB4jaoVMJ+Gd1EEIzt3dTSPwcblUFIYQFE3JS98fZhGe94bjzsI8d5sh9gpPG/hHNW3TU5X1hih3oKspVmd51IYOqKK83jU8KeSnZ18Fd5DtsIxJ+bCgyqnn17A7jPSz88Go7WrD5LBa3KlwGxprRXoM9zK/EwWFH+wUF55GRMB/IqFp1qOSovok2cmEUuug1qP307GV5so+WuBLdIzQbTvoXjUY/pNxOjqBk/G12/orq91+/5DstqOnNjth00bii2HZP80pGxXgibXB0+nmdfdOLlo7Ph75tqFU1XhpnxMf+Or8mlPXrDsE8gwHx7aZKUF0wUazWOkv+P7IpBl7Zyw0al3/rie6AxK3y9AY9/2RQU/vqurndRaHC8MkHKzCg2VTyfRoxLhQCOPultImBkGP1GEFrGzo0fMYVD+JqzxDsByt0flNwchhKUV8IIINGovar3He7FjvBaTpjHRNA28YE3OHVuAlXZbTrI9S5EnWWstWQOyXxWRcViKX+t4mIIzNm3FajnCu8bKQ59ltRX7of3QjKT34qfiebhggxlzqj8DoPwZMPsQhITQ4yP9G6K7UQsCkMFfLLfsaxsFHwxTULDMhjUZpQDyMdLSDFTeQPLwN0MpmYytorl6D6s+kp8VCyVuHnPDp1warWGIwlrL5MsLtvY8hvrJmlLsQakjcAPuzGcsTk8Xvv+nKDn++VEinzbfJa/aQ5gRqsVpMJmRR0b96 CMy50rft xim+8V6nlBbqSdnmPbIkNJK5X2jP5bMAItsZ9+uP814T2fWbKddhWe63YyCmOtFP/L9ysaki0dDhDjYBP8FDLVlzGnSjUcPmunYDaBOWgHvF7tTbPcspQtsNv4tBuI1SZO/ZBY59sFJiDjE2l41Xh19e1gx4WmTG8mngB4MF9zghLSftuoJw8mEqBKlLHo+VlOYSq80WjYlrrxnhwjV5kGjc9mjycH0iZPaYrYvYiqGA7DVwMfDvMAwBULlGVIlY1YAD7dmy81PA1UMo9dU1LyJeQotHEzMlovxXQEVNx43s+ncPa8BmnCojCIy5jD4Qq1uzxYNmuolQy9k7y2aQ7V4HeaM31ahBlhGH2nt6Iw4K7HBM1Q1wQ5shTpWP1RR5qYXmwBM/7BkAKlF2p/QNx/hV9nRkYUqrCtdHNbrldK+GO+aaX2yzcTbw/FuD66V7o5cjPrzfoMJt6kld4tNYjS5D4nuXHbM7MOw3uOwQwUMV9jAW+uD4SOeokZHxyk5OTYDLPGsplPR4Yy/FsnUEQmLXj6PF1xi8ygakPAENWRi2AmnorVAkYpxQIlKUGLl7kScGIalX9sqnFWBPgURpdj0pbQbu1qTokthxcxkiULsMrCBpM9po+Fr7fIruX81KoGQ6BpaahEC/X6MKjmZMgCvOQDHM1FfsYuiOH0tUL0451oNU= 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 Signed-off-by: Fuad Tabba Acked-by: David Hildenbrand --- include/linux/page-flags.h | 15 +++++++++++++++ mm/swap.c | 23 ++++++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 36d283552f80..6dc2494bd002 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -953,6 +953,21 @@ static inline bool page_has_type(const struct page *page) return page_mapcount_is_type(data_race(page->page_type)); } +static inline int page_get_type(const struct page *page) +{ + return page->page_type >> 24; +} + +static inline bool folio_has_type(const struct folio *folio) +{ + return page_has_type(&folio->page); +} + +static inline int folio_get_type(const struct folio *folio) +{ + return page_get_type(&folio->page); +} + #define FOLIO_TYPE_OPS(lname, fname) \ static __always_inline bool folio_test_##fname(const struct folio *folio) \ { \ diff --git a/mm/swap.c b/mm/swap.c index fc8281ef4241..47bc1bb919cc 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -94,6 +94,19 @@ static void page_cache_release(struct folio *folio) unlock_page_lruvec_irqrestore(lruvec, flags); } +static void free_typed_folio(struct folio *folio) +{ + switch (folio_get_type(folio)) { +#ifdef CONFIG_HUGETLBFS + case PGTY_hugetlb: + free_huge_folio(folio); + return; +#endif + default: + WARN_ON_ONCE(1); + } +} + void __folio_put(struct folio *folio) { if (unlikely(folio_is_zone_device(folio))) { @@ -101,8 +114,8 @@ void __folio_put(struct folio *folio) return; } - if (folio_test_hugetlb(folio)) { - free_huge_folio(folio); + if (unlikely(folio_has_type(folio))) { + free_typed_folio(folio); return; } @@ -966,13 +979,13 @@ void folios_put_refs(struct folio_batch *folios, unsigned int *refs) if (!folio_ref_sub_and_test(folio, nr_refs)) continue; - /* hugetlb has its own memcg */ - if (folio_test_hugetlb(folio)) { + if (unlikely(folio_has_type(folio))) { + /* typed folios have their own memcg, if any */ if (lruvec) { unlock_page_lruvec_irqrestore(lruvec, flags); lruvec = NULL; } - free_huge_folio(folio); + free_typed_folio(folio); continue; } folio_unqueue_deferred_split(folio); From patchwork Tue Feb 18 17:24:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980312 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 95BCDC021AD for ; Tue, 18 Feb 2025 17:25:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2AB59280164; Tue, 18 Feb 2025 12:25:11 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 234B028015D; Tue, 18 Feb 2025 12:25:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 01208280164; Tue, 18 Feb 2025 12:25:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D12EF28015D for ; Tue, 18 Feb 2025 12:25:10 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 55E1E47C9F for ; Tue, 18 Feb 2025 17:25:10 +0000 (UTC) X-FDA: 83133741180.09.056BAE7 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) by imf08.hostedemail.com (Postfix) with ESMTP id 6E6F9160010 for ; Tue, 18 Feb 2025 17:25:08 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="wt/cNGH/"; spf=pass (imf08.hostedemail.com: domain of 3csK0ZwUKCA88pqqpv33v0t.r310x29C-11zAprz.36v@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3csK0ZwUKCA88pqqpv33v0t.r310x29C-11zAprz.36v@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=1739899508; 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=AjftRHL78GvMAxQBgln24N5MOtatVF4iZ/akwpMzsOQ=; b=dtyjsMkB8v1zeypD9MMdqfuogQNaEpBokXdG415aJyTSGp8c7Skz+vV13uRF2xcs4/J9QA HEopzfLJLagx78Kiq5S3m6SaLr15PucNwdkA2zPHQyXa88hJuBsGQTiWFUUe8t6fjirIFc CwlhSz4yjEZwg/VRmSFT6ICUuLboQvA= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="wt/cNGH/"; spf=pass (imf08.hostedemail.com: domain of 3csK0ZwUKCA88pqqpv33v0t.r310x29C-11zAprz.36v@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3csK0ZwUKCA88pqqpv33v0t.r310x29C-11zAprz.36v@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899508; a=rsa-sha256; cv=none; b=cylCTE48BqFWSDw8PhKhKvj4ZK/VcoNxQG+Arr56PMs5jCchZEhue1P27sfXKFHaLzgTlv JkVmQSCijVqx+4mlOVZpWN5eD4Eb8/YRblBimq5lTITZ5I3m9DrE97gmVLm/Eec0up2zCs 9DayjLo+MWL+435mJzT9k0imsjPQvWQ= Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-38f29b4d4adso2652467f8f.3 for ; Tue, 18 Feb 2025 09:25:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899507; x=1740504307; 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=AjftRHL78GvMAxQBgln24N5MOtatVF4iZ/akwpMzsOQ=; b=wt/cNGH//buwQpuB3wkNESfdXoBdejGETX/ez6gec9wax/wapS6moJRkCfE9a+tz3N 20DvEmUWu5WOWsQn8XOu9nJQgSrYgE1QjTA1O5eCWeTBymZcmgDYZGPJC2b4HFiNGybA FgjsjWpBg6yHegUag9hD8PwKy57kVrx75tZoL3h5hqdKNIkwYkVvIGJuDsvTkPAFprjW Nwn4rGKcsLLPGGvvTB3seVv4+jTT5VhYofQJRRIEUGG2zxP/vjU5h7CwMfCp1hC0non3 7T41hREs3aF9Npk896/WCwJ3MD1ssDD50VNBbvbn0vk3Ojv6AEXha1R5q3S1bVaOiu/M BLmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899507; x=1740504307; 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=AjftRHL78GvMAxQBgln24N5MOtatVF4iZ/akwpMzsOQ=; b=lspnecrSQpqYygbByPPT+HM/Jfn3j0ogAXFkCEn2UVgUL7O0igW1SwSABvJvlMrGSJ DPDVV309Ycqbyl3TxhaAJY7tDwyZq4Mw5spUOMYk93mIPEBaloqwqG1Q+QMbo3gmYb9K BU+dqgEJyjTmtHUIofklgRzrVQHGBEdRSHbuCW26TN+gYTf4xXdeWK/6isKkkjEKoaQi w88leyKy58aV3RaQyRpvIWc0EEuV8lG0FhCLCNFI4v69VRt3KHz83nl3YrX4IKd5iRjg PEFgMj+5S8ZFpGS36EHWHC2afT3AGIUJP6Z02aLShLr1SwU5w04VKokm6Mtbbk1h8CIb 7CRQ== X-Forwarded-Encrypted: i=1; AJvYcCV3pKHKa49cGKungSCx4C3ruCrog9nahjRqM90Ron5M3DIcU0uCk3xA5BBSQ86dV5gZcUlO7xBoIw==@kvack.org X-Gm-Message-State: AOJu0YyxGKFQNzGJ+xgAV8V2dbCaZdwDju9GvkzOYc6EOYh9h3c0vKgD exBUCkyKIbO1K4vF9xX1Mz/MijuaoEFMVatzX29BqwB6rwFStGtzgnoyJ60XtZrQN8NVmsa5Qw= = X-Google-Smtp-Source: AGHT+IGtq1vI9mi82FBNTYUNeT9g08nt9Gn+a8vjX9kYrGKRZeaCmPiZJOk8GXgumjV4Sq5SnZyiJoW2cQ== X-Received: from wmbg4.prod.google.com ([2002:a05:600c:a404:b0:439:9601:298d]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:5850:0:b0:38e:90f3:475a with SMTP id ffacd0b85a97d-38f33f55023mr14469841f8f.51.1739899506921; Tue, 18 Feb 2025 09:25:06 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:52 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-3-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 6E6F9160010 X-Stat-Signature: 6mx6jn5rwxqka5aa1fxdoo5jaux5z4ex X-HE-Tag: 1739899508-431214 X-HE-Meta: U2FsdGVkX1/7BALCYuGjRqoUc+UEYXQ+GTPgIvRWnqbdZtFnl0lliSBf8iTJatsJVLGJnQX30VAGfMnarX7swVmYmvkUd9aSfca1JlxLQeLHGzW/sztdIVqWBlrQBgNflIf1JTgP0+j8OjPcfi1S1tchatACe+HrycLnI7fnBqUbh/1HWnqtQK6r9sNyWfof7ymJaudx4yf5ye7P74YpWw/LJDS1DqfCjbHTywiNoZLEJ7rtBb0Ej+ObbGHU3F9Ue67lTX2VomGmAMVHLS0bctRGSc1wIvFq4sTLUPzR895/jaOa+eejcHMmvcmFNX11kurP2vFJFCPBBTxpr5qvta5GtuBPkkjgtaD3mvTF2KFMOqNxUfs/vS3+YqdSQV+/D8Y2g67EY/0hcoMmEBWGlkKwo9pxkTh+FeS0TXYc2rOnU5LqHUpMVTYAAzi+4pqE5yn6B1+daqcV6hQ13XNgF1iZCaFOUS1oA+R/2X3oaO+k2VMhcVQU549XDtbJ7XnFOtspn015MSGwRhpQlLBtMINYqCXbO1/gYEqyitryBSlRnA6DGZd623OWMgy2cVPcdutcYMzaRjCaGF7Jqw0lmQRJtO7rYQeESPvLdCEml4+SpEVEM1nDzG+5bW85Hrgb+mNaa+vE7t9hlrwfHWnNq+5vOFGtECbn+gYNDQyWNVFjM5jewx8wrmi0ZSBDoGOaCRZyhSwor31Yb6Roff0ueoijoucMRFKUL384zfX3lCHOU2vKe61pF1w/iTaGTe6AoWhLZY3d9LuUN3eRkOJsmNGSQD3ZiZ88lPJoVxQxKWV2e4ASy6kvrr1x6yf35sia2Gp+7FJ+uf2GEeU5VLS4eBiR8St7PRCCSt7jARopSF575hqBFzDjfDy40E9heBTzCqhYMzlTUudj6WFx966SV/QOctvuNArmissjMJXDjNdG+5qVHxz8T7PnfqWQDdW9d0LI//Lryee1ne1Rcpj zTJ4J0L9 Mz2XSGD9A1Q1eN99uNuyESo7OrqnJfPq4C1EI1HX9IHUnqQUXr1lR69lKWYV/tupMB9BrCHBm+akLcRlUkwQU901ig46uqOAikrP4YBgRccLVOVkvPH3Zf8p13qY4y0dbrjsnVBpYVmCUOTmVsAnVVZH0+DFs2fngGp7jSztkmTZAbDGkfAqysCrtkoDy2xbiW8pAx3r1XIC0pu6LK0B7P0lgE9Bagq7IO3M4zH3TtFeVPrm7PvWU7z3qm0ij441ruepWPoI/rV/q/N4XqgDUrwZ4yuBrB3QzhLfrNhiBoUYbrGeI0V/sSKYheSxkfy3VkSmPpwjkj/eGX2k4WPXU6alRyOsiqS8uyynHXdkj513AjOrbj1z08cPAY/+Bk2cwNNEGNsIch99B/CK7+oZvhd3ioWQwPTWTRUgjN+IxsqHMtS9PytYo/tMG67CUuNaOMhzA6PQqhh6H0FI7RrSAfydWay0nfXDytmbOi/Yd1R8qkSX61zWs8iSCt7J09kEo01+If0DZU7+e5VNzxPW+6vLIbjvmm4NE3/nzeNl6Rk1nw8m4v/AKzsi/FgCtRwXPmBEl32MaLB76jYRRNP65ANrmdozKpI1hDMLs1T6/LYwp1OII1dWL1MIrrRkloNtTguvYdVANEEsjwLtlzb0ZcMMNUSGaoDgeEz/LeJwD+I45FalksUTiXo5bQA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Before transitioning a guest_memfd folio to unshared, thereby disallowing access by the host and allowing the hypervisor to transition its view of the guest page as private, we need to be sure that the host doesn't have any references to the folio. This patch introduces a new type for guest_memfd folios, which isn't activated in this series but is here as a placeholder and to facilitate the code in the subsequent patch series. This will be used in the future to register a callback that informs the guest_memfd subsystem when the last reference is dropped, therefore knowing that the host doesn't have any remaining references. This patch also introduces the configuration option, KVM_GMEM_SHARED_MEM, which toggles support for mapping guest_memfd shared memory at the host. Signed-off-by: Fuad Tabba Acked-by: Vlastimil Babka Acked-by: David Hildenbrand --- include/linux/kvm_host.h | 4 ++++ include/linux/page-flags.h | 17 +++++++++++++++++ mm/debug.c | 1 + mm/swap.c | 9 +++++++++ virt/kvm/Kconfig | 5 +++++ virt/kvm/guest_memfd.c | 7 +++++++ 6 files changed, 43 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f34f4cfaa513..3ad0719bfc4f 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2571,4 +2571,8 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, struct kvm_pre_fault_memory *range); #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +void kvm_gmem_handle_folio_put(struct folio *folio); +#endif + #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6dc2494bd002..734afda268ab 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -933,6 +933,17 @@ enum pagetype { PGTY_slab = 0xf5, PGTY_zsmalloc = 0xf6, PGTY_unaccepted = 0xf7, + /* + * guestmem folios are used to back VM memory as managed by guest_memfd. + * Once the last reference is put, instead of freeing these folios back + * to the page allocator, they are returned to guest_memfd. + * + * For now, guestmem will only be set on these folios as long as they + * cannot be mapped to user space ("private state"), with the plan of + * always setting that type once typed folios can be mapped to user + * space cleanly. + */ + PGTY_guestmem = 0xf8, PGTY_mapcount_underflow = 0xff }; @@ -1082,6 +1093,12 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) FOLIO_TEST_FLAG_FALSE(hugetlb) #endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +FOLIO_TYPE_OPS(guestmem, guestmem) +#else +FOLIO_TEST_FLAG_FALSE(guestmem) +#endif + PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc) /* diff --git a/mm/debug.c b/mm/debug.c index 8d2acf432385..08bc42c6cba8 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -56,6 +56,7 @@ static const char *page_type_names[] = { DEF_PAGETYPE_NAME(table), DEF_PAGETYPE_NAME(buddy), DEF_PAGETYPE_NAME(unaccepted), + DEF_PAGETYPE_NAME(guestmem), }; static const char *page_type_name(unsigned int page_type) diff --git a/mm/swap.c b/mm/swap.c index 47bc1bb919cc..241880a46358 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -38,6 +38,10 @@ #include #include +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +#include +#endif + #include "internal.h" #define CREATE_TRACE_POINTS @@ -101,6 +105,11 @@ static void free_typed_folio(struct folio *folio) case PGTY_hugetlb: free_huge_folio(folio); return; +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case PGTY_guestmem: + kvm_gmem_handle_folio_put(folio); + return; #endif default: WARN_ON_ONCE(1); diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig index 54e959e7d68f..37f7734cb10f 100644 --- a/virt/kvm/Kconfig +++ b/virt/kvm/Kconfig @@ -124,3 +124,8 @@ config HAVE_KVM_ARCH_GMEM_PREPARE config HAVE_KVM_ARCH_GMEM_INVALIDATE bool depends on KVM_PRIVATE_MEM + +config KVM_GMEM_SHARED_MEM + select KVM_PRIVATE_MEM + depends on !KVM_GENERIC_MEMORY_ATTRIBUTES + bool diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b2aa6bf24d3a..c6f6792bec2a 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -312,6 +312,13 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +#ifdef CONFIG_KVM_GMEM_SHARED_MEM +void kvm_gmem_handle_folio_put(struct folio *folio) +{ + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); +} +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ + static struct file_operations kvm_gmem_fops = { .open = generic_file_open, .release = kvm_gmem_release, From patchwork Tue Feb 18 17:24:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980313 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 21BF1C021AF for ; Tue, 18 Feb 2025 17:25:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AC71D280165; Tue, 18 Feb 2025 12:25:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A4BFD28015D; Tue, 18 Feb 2025 12:25:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87669280165; Tue, 18 Feb 2025 12:25:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 6508128015D for ; Tue, 18 Feb 2025 12:25:12 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 21F811A037A for ; Tue, 18 Feb 2025 17:25:12 +0000 (UTC) X-FDA: 83133741264.22.0538F9E Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf15.hostedemail.com (Postfix) with ESMTP id 418CEA000D for ; Tue, 18 Feb 2025 17:25:10 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=t+RGvi0z; spf=pass (imf15.hostedemail.com: domain of 3dMK0ZwUKCBEArssrx55x2v.t532z4BE-331Crt1.58x@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3dMK0ZwUKCBEArssrx55x2v.t532z4BE-331Crt1.58x@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=1739899510; 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=Ja1dbSYeEbtOj/Lq4H8XOfvxJc8Pm73z8vQggxiiAfA=; b=LYFnHLRnHp7PlYjCY3WioVSC064b3ZnR+41J8GEeK0JD7QPf2NRR+vMmAWLqWbU9Qy3zl1 FoKb9L+fU/cqQFH21P99ryIQLouP37k9ISXoYQUgRcmY+jabRsNEIP8JpSI4cLPGeJR8cA sOvNh3jdBvrV1fnOfjI9NXZ1rJsMigU= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=t+RGvi0z; spf=pass (imf15.hostedemail.com: domain of 3dMK0ZwUKCBEArssrx55x2v.t532z4BE-331Crt1.58x@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3dMK0ZwUKCBEArssrx55x2v.t532z4BE-331Crt1.58x@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899510; a=rsa-sha256; cv=none; b=HDVP9e6IyyISUr3VbnVX6q5D+XzbvyCFObNTijyuFTI4Ty1ZG2au7XEhqcCQ/WZViQRl4C ABa7u293Zl3yFrl9Oci7QojW/Ez8Zhwj3H2jL0W7brCLwmTyDWUxLTj2f4LRXuJL7A7x6p Be4NGKBn4gEdwV0oJdi6xIOyI9wSSFA= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43933bdcce0so47862135e9.2 for ; Tue, 18 Feb 2025 09:25:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899509; x=1740504309; 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=Ja1dbSYeEbtOj/Lq4H8XOfvxJc8Pm73z8vQggxiiAfA=; b=t+RGvi0z+vYMiJ0/bQ9aBE5DXSzOMmMbqdmBZBA/dva6kO2m7mG2BzqUQ8b56xByav e5dnM+86mPxIkASVt++tjB2kgPwGOC5lScsJk45UUPNz4l2KuiS9XNWfCSzs5/ysIzNX 6H3ZQoIfz/Qxc72uqwRj0kzZDZmVMan+LZTlW2i/iaGyiQGPMGpqA/Fjt7UE7bjz3JMB F2Vj7LLiCh+oN21OqWA/9jQTvVhSJRsJkVSZGXeXllhxi1JQ+mDqA8pgskH0ddZY3NFP tZY2mJxlS+2MaN2gXJBX0vv1Yao6JoV4bSKJCKUK4spI+wCMOSD2Q+9n1xUoD9gHaDOQ gPhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899509; x=1740504309; 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=Ja1dbSYeEbtOj/Lq4H8XOfvxJc8Pm73z8vQggxiiAfA=; b=aiu23NUV6bnn7r3EiMqEudCVOCCqH+Zspk7XpU6aMNWSqQz3RJ5hEkAMmd6+dlPI8+ R/KwGdG2ovSYGr0I9rDjmUl7R7mlVC0oI4Ls4eg4Pyn8VpS6wUd9sxqQRhcoB7ZW9I6J MvvWOxGAm1ewzie466FVtan1syWX+eg9SL+DyKHTqeGeaHmE+4Xwu5pOK6+1ahyFlDtg J0MucnZ6GSnByupWFutE0WnE0sAt0paAVfV4Rvma2mhxpf45Y6qDb0YJzYF5TMu2sgYe A8mdnD1RqeirFn1PxdOZFNBgiGSUElCy4wQvrqbqfd7IH7Fi9elkSn1qJ3l+ltpuw4XO a6VA== X-Forwarded-Encrypted: i=1; AJvYcCXkMR+4gpmQBlsUS2KT15+xsXu+IJ7XXn+FR9ZXr2uR/EzBszyHJt8FpL2i7g5N14/RXlGKeVeL/A==@kvack.org X-Gm-Message-State: AOJu0YyFk/Wwh7yhOMPrzJGbYZVaAF+Rp6GC7ke6DtTKQzX7DL6+uZRq 1eXR9OXzMXogqZL/itMbiA+/jVXhNoWR4JNWa1u8Gr9lXNcbM2LHpIDHn4/zzydWbgxcpggNPw= = X-Google-Smtp-Source: AGHT+IEk7whKV8qDP3YJYflDIlm8Cb6VQQ/o4v2sTpWwI0tdVBtFPk7h94MV+FENYUw5CL+bP9BAxRH9cQ== X-Received: from wmqe5.prod.google.com ([2002:a05:600c:4e45:b0:439:8333:1efb]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1d1e:b0:439:6118:c188 with SMTP id 5b1f17b1804b1-43999dd1dc6mr3930085e9.19.1739899508877; Tue, 18 Feb 2025 09:25:08 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:53 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-4-tabba@google.com> Subject: [PATCH v4 03/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, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 418CEA000D X-Stat-Signature: ijz556omy8i91noiq8tgnkdpyi4awwjt X-HE-Tag: 1739899510-285682 X-HE-Meta: U2FsdGVkX1/B+Dhjwd1klS8rOmIUnnZZORPNYcrTzpVBm2rj48kYjh8VUvMlgTvMBRkESVupVeJXh2jPlQKy8XEdMOcR/CRRTlKTJ09eyO9I505bv8/mOFWMKgMEupmZnZPwTLzvAwzEb0LtrteCyqDFGjXaXQBupXf/9zy64tcz9F3DbZo45sO3S4WuKpixWLXgW2KQElagLxxlLG58O1eQ0yvAgOuuPBaMHKZnK7E037yKNj607RklRmZkxTnExuvYdU+6JQGj2IKuGjlgFF2z9wzD5hvbhOG7rDMkVIiJlhyetRdcf5rIMYbQCWKmhu0zZDCGVf98juLlASbm6/tzJChE44IFQvlzCj4wB+kZgdYn4BEfuYnezA4LI6LFVB/jZ+hfNXNes2tgdKoOqeEfNaXxSB0j+H9ms2lq8WuRhQSt49B9LDlVxxw3lmyIYHaXRPZLxjF6HnDNTM56HPjik0G+5iwf7jo8G8fuyTDgWhwpowzdKYVmM588mG5ZbGIXXZcROABU/pFqOyv24Ky0a0ug8plunTo1UlwxV7aQvdPowFDLBUtmxget8D9H8vY42Jp6Ce647OQlcKnPilloTbSVrxQvT6w+m2Q+qax2WG1wDoLyGAe0L8tG0qCG/JFAVipBBRiNMgcvQ3aZdzNnBdM8okDF4bIxvBaGaMGPS9Vsr3JhOjfDmPzhsf9TiQhIMbnnlEZ8+pf0sO/iQ60HHory0RrdXxYgdov25zqDQGsUcvxOucdnJEyTGprbz8yLZAYjdeGBnDwcNdZt/jRiJQyEXzdxs46gi2ZoJkL4aGUPQOZStQrVzo35gF/t+JIy2ph/W4+oKBESw4BUa9x1ZqQtudeswfialcNEBEsdAo5jimwkiEmmT0AdsEiv2nAawiDhUpJvHBtOzd3kFDqvm6zLoq8foT9k8uenTqjPCeHE7Ze9z7IE/fMD7qDLj2aZm561BvOjG+aDjLE AhxAK4FU 8RTGkOQDI7VIWLo4GHRH9oZwHVQtGtTUaAvblcZAHxCY2LXLeqqQNMxzyzSV5TCica32lpOKtw6ZgtGUfF1ZnG5sww8R/B6QP507Q8cTRREP+RsUHkIlqP4KrZp8MTzAytxMcX34cGLeMs9J1Z3L63O+5E04G18QfcvGySm4QNaDFE8FxA6ksRGm+6TJ8lM6He3+tBFRfbpjC1jcLGoxI0NLPRnSkjQQ1N8/SrHLSv9Iw7yvp85qe9tWrX5H9NCqC/8RF7tW3DXz1gRxhZvixkJtsMlKTComqyX7AnFYzoe9RUR2NJrzULSZSHB03kgA5U4sHCN49Ty8sg3uB0Wnp6acXZl+c6I5pwqGNnuIHZ5QEu4Fdr85tCHFb3B0gFypJJIGyr7+Jt1WxzpQgwHKGNG1FKJv+S/9O+4uJ00IfuCGuuR9nBzdSXJeVXxEhvuDDAAdLrXP5DMx0EurXFDRzjI3NoW3R/7bM7RrWa+UX8r3fbgGwaFogSLI6R/k1eEUPJFjdhaGXfTYHCstQcOqyNOlOmsgysEboOhj4EmhdATY6dsbyzzWY03VRzyKqIJwtd/vRETakJKwKQ2936Bt9RZXvc/AgoO+8TBSadZ3i4eZcaSN5+au0XovidMY0IDit0u6cyofCGOp0C//Ja9M+SiqagA== 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. This behavior is also gated by the configuration option KVM_GMEM_SHARED_MEM. Signed-off-by: Fuad Tabba --- include/linux/kvm_host.h | 11 +++++ virt/kvm/guest_memfd.c | 103 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3ad0719bfc4f..f9e8b10a4b09 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -728,6 +728,17 @@ static inline bool kvm_arch_has_private_mem(struct kvm *kvm) } #endif +/* + * Arch code must define kvm_arch_gmem_supports_shared_mem if support for + * private memory is enabled and it supports in-place shared/private conversion. + */ +#if !defined(kvm_arch_gmem_supports_shared_mem) && !IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) +{ + return false; +} +#endif + #ifndef kvm_arch_has_readonly_mem static inline bool kvm_arch_has_readonly_mem(struct kvm *kvm) { diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index c6f6792bec2a..30b47ff0e6d2 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -317,9 +317,112 @@ void kvm_gmem_handle_folio_put(struct folio *folio) { WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); } + +static bool kvm_gmem_offset_is_shared(struct file *file, pgoff_t index) +{ + struct kvm_gmem *gmem = file->private_data; + + /* For now, VMs that support shared memory share all their memory. */ + return kvm_arch_gmem_supports_shared_mem(gmem->kvm); +} + +static vm_fault_t kvm_gmem_fault(struct vm_fault *vmf) +{ + struct inode *inode = file_inode(vmf->vma->vm_file); + struct folio *folio; + vm_fault_t ret = VM_FAULT_LOCKED; + + filemap_invalidate_lock_shared(inode->i_mapping); + + folio = kvm_gmem_get_folio(inode, vmf->pgoff); + if (IS_ERR(folio)) { + switch (PTR_ERR(folio)) { + case -EAGAIN: + ret = VM_FAULT_RETRY; + break; + case -ENOMEM: + ret = VM_FAULT_OOM; + break; + default: + ret = VM_FAULT_SIGBUS; + break; + } + goto out_filemap; + } + + if (folio_test_hwpoison(folio)) { + ret = VM_FAULT_HWPOISON; + goto out_folio; + } + + /* Must be called with folio lock held, i.e., after kvm_gmem_get_folio() */ + if (!kvm_gmem_offset_is_shared(vmf->vma->vm_file, vmf->pgoff)) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + /* + * Only private folios are marked as "guestmem" so far, and we never + * expect private folios at this point. + */ + if (WARN_ON_ONCE(folio_test_guestmem(folio))) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + /* No support for huge pages. */ + if (WARN_ON_ONCE(folio_test_large(folio))) { + ret = VM_FAULT_SIGBUS; + goto out_folio; + } + + if (!folio_test_uptodate(folio)) { + clear_highpage(folio_page(folio, 0)); + kvm_gmem_mark_prepared(folio); + } + + vmf->page = folio_file_page(folio, vmf->pgoff); + +out_folio: + if (ret != VM_FAULT_LOCKED) { + folio_unlock(folio); + folio_put(folio); + } + +out_filemap: + filemap_invalidate_unlock_shared(inode->i_mapping); + + return ret; +} + +static const struct vm_operations_struct kvm_gmem_vm_ops = { + .fault = kvm_gmem_fault, +}; + +static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) +{ + struct kvm_gmem *gmem = file->private_data; + + if (!kvm_arch_gmem_supports_shared_mem(gmem->kvm)) + return -ENODEV; + + if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) != + (VM_SHARED | VM_MAYSHARE)) { + return -EINVAL; + } + + file_accessed(file); + vm_flags_set(vma, VM_DONTDUMP); + vma->vm_ops = &kvm_gmem_vm_ops; + + return 0; +} +#else +#define kvm_gmem_mmap NULL #endif /* CONFIG_KVM_GMEM_SHARED_MEM */ static struct file_operations kvm_gmem_fops = { + .mmap = kvm_gmem_mmap, .open = generic_file_open, .release = kvm_gmem_release, .fallocate = kvm_gmem_fallocate, From patchwork Tue Feb 18 17:24:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980314 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 B2621C021AA for ; Tue, 18 Feb 2025 17:25:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EBC5C280166; Tue, 18 Feb 2025 12:25:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E44D728015D; Tue, 18 Feb 2025 12:25:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C4874280166; Tue, 18 Feb 2025 12:25:14 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 95D3728015D for ; Tue, 18 Feb 2025 12:25:14 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 3E3571402D7 for ; Tue, 18 Feb 2025 17:25:14 +0000 (UTC) X-FDA: 83133741348.19.53AC2EA Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf28.hostedemail.com (Postfix) with ESMTP id 58717C000A for ; Tue, 18 Feb 2025 17:25:12 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tzswN34Q; spf=pass (imf28.hostedemail.com: domain of 3dsK0ZwUKCBMCtuutz77z4x.v75416DG-553Etv3.7Az@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3dsK0ZwUKCBMCtuutz77z4x.v75416DG-553Etv3.7Az@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=1739899512; 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=eTW5My6K2OM+Dzwm+PfBz15qR/KnyXT0mlOIBk4Z2/A=; b=e8dgGtZuVloQLfhsKcPZjiRlP+gJrvbIGI/lk5H3k8L/UojDKpv8nnxVFfLORUg1VU0brF mKdF4IhBjyAgL+egxHbfqJ1kJfpzpYx5xSUFB+WrfH3I/gJzPXBCt7JVwioBEi8/DGXSb4 CYMpkF+ITxqAQmaZfJMA/+PfHlZ8jYo= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tzswN34Q; spf=pass (imf28.hostedemail.com: domain of 3dsK0ZwUKCBMCtuutz77z4x.v75416DG-553Etv3.7Az@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3dsK0ZwUKCBMCtuutz77z4x.v75416DG-553Etv3.7Az@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899512; a=rsa-sha256; cv=none; b=UcpH4qHf+Xgx9EnmmlK4Dv8o0IGsFNDFcfrfQIOTh6PtYH8/GqzTP+oiWi8z8Gq/k1aruC vMz3K9672Y8KEF80Ahte7GQBzX6H8qquYQBIVEmrKHor6UmxJozfeoSMBP6/NiaoT382Gx LtX/49P8w4F3+IOMK27AnnDX/x3bJtE= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43935bcec74so30154855e9.3 for ; Tue, 18 Feb 2025 09:25:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899511; x=1740504311; 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=eTW5My6K2OM+Dzwm+PfBz15qR/KnyXT0mlOIBk4Z2/A=; b=tzswN34Qf5lGxinVWq3bOUwtCvSYV0ke8d0Qw2X+qSU2jrsRTDYQxZvTQ7lfUHTlTf Cw/0Fbyqi/nKFytQSZ8MI1RPa0N+GrWcm06J8W6IaQo+qpF36KQPZdejt/+J4s8Uk9yp uS46nmEnX0xWDKVz+BbNOSZFevoovy8pkPUZY7vyzswL820VYi/VqobZEuQF1D4i62wb skuAuzwqEg5VJPohmnoElJ/VDqH35VrritiEoQU9ZNHzOozQMLAXS8TNzmu8KtfIg+iV 8LSxR0NF9WHyGIfaknyMBH1f+lGMZ+aFCk9B/5jQe2nykkcaP4izsxDoHjOr5IgotcGk Ttpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899511; x=1740504311; 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=eTW5My6K2OM+Dzwm+PfBz15qR/KnyXT0mlOIBk4Z2/A=; b=Yk9GBa9eJudsJE/S7i7kRPrlLno/vLZtKwstHoUkg26i/2ez7mB9SeBS6hVfqhutAs +oxa1Uh8N+mnw47WRU3cMjZUTbPVBpRfmEIRGdm2ZpvvXCKo+Ctdfned+vE1ahseZoP1 VHHAWDACcqjvoYd4lCj8S4pZQzAiQI9vyklw4dr2+wDUQjn2/ZWm7k8LT4hgMwa+zNc7 lX9oJSnOuEVSEL2vLQu0wII6MWPnob6YIKG/kcHNCvJmgMDIbc+VeDolwCRPOuUOeyn/ llMN0UOGTFXahubucHLBvTPvLQzh+tyISvQBj/oqNnjwC8lk51b7MXIQfkKF9HBzA6gk f2QA== X-Forwarded-Encrypted: i=1; AJvYcCWsHYYVgWBo/bHuLn9dx838Y3IOG30Mzn84zQwNZqqRvKvkfiG5/JGJmYG7wqO+AkYxLFz3Pbukvg==@kvack.org X-Gm-Message-State: AOJu0YzWZt67YykmGKaqRXmIKcn4DkMcpKdWHlw1j0UxMJqMR2KEslUm Ir9PjmX8i/9ZlncinyKbDRzU83Fteo2TNl1JQ4wcbk2CzI0zMZUyaCo4Oi6zVXqt44fHVxujSQ= = X-Google-Smtp-Source: AGHT+IHuQgBmWKLX/iaLAIhwX+Ygl7SCrjQmYq5mlPdxwxv1m1H3cuEySvE1kherBoZWNYm/GzLxu4kvpQ== X-Received: from wmsd12.prod.google.com ([2002:a05:600c:3acc:b0:439:3df1:f296]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1550:b0:439:9377:fa17 with SMTP id 5b1f17b1804b1-4399377fb82mr36630915e9.18.1739899510991; Tue, 18 Feb 2025 09:25:10 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:54 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-5-tabba@google.com> Subject: [PATCH v4 04/10] KVM: guest_memfd: Add KVM capability to check if guest_memfd is shared From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 58717C000A X-Stat-Signature: yrqtr4uxbojewm66u7kxgoyff7k94zm1 X-HE-Tag: 1739899512-28205 X-HE-Meta: U2FsdGVkX1+K15itLr2VjM9WZSGqGEtwnMMVcWAMzpb6uoQHtC7wO0CS++zTrMY8Wvz7VAt3XFuFSCCtt3qHz9x7pcwSS88r2xPp2I7QSXyjoKuhupb+uuGQxbUt8PgvVkobkEC4PYKwQf2RnTwiAMzypYC0YhgLfasCEs7xI9cFaQgx4fczSmoGLjJ8fXE6VSmqJNKgY/N+1zPlK2B/O9y6YiFhHEFNSrJxSxyoqOXoYOfkxYW6xl5ZOdds+couYUzTDRIc8EF4KTkJr9ySAFNTVK8o4Qg7d2ZHIr6ITr1EE1b4WMUIZiLkrlGy8+Q/51abytAWj1vz7hLVixrLKypOzRdettTSEuerBAY8MxGRQPtYahCK6AkgduEdqG//nhFtx9ERmTt2PzRSvZKM6Ma4k3WpLNoRetcZBonCe28/zwPgM6m+4F9nQS7pSNEWQyls1OJlyk+DL4F5yAfFnt7rvoMQYiZStuLFYgr6vQZNzMHzWGfP91zqBgsZXVLS93Nu8WOXYOdLDFDwgCY/FLemQzU9nR5mlIROBq9ooMrIfsWBu9dj4FZU+od6ZPofVtSJHXavW2Mk+F46UZ/g3B4it2spRSRKzTVEENypq3UWkB2700c8BJ/xJlbmzN3bh7XYKGICFLzETFD3ukwAY8daKJLOs9vsjH9IvY/trVi0RMG4MYK2YWJ/E3DAHduhLZsV+7z5NUWMN4DZaNlt+I6Ag2Db7+5IV+1TpW4rFeWsOXteT9cwbdMtauUXiFGwd4tIsEqk1rMrO9PalLdHTLtgAvoIHnjvqC0YIDcd+lwe1Zx8wyLxhbcqtr/isDHxiAKtAC+Ikfg/sRn+8RD6tH1mtJVMbR8GBeKWJeWvBPRrmsI5CKbrabyoMhqCM0twgfMsZ21kt/NBSzmJhCCEWbim6eebIhrfV8v2nsFxLjcS7LNHhBgWPHXBPKzZpQqPxF4ZgmMGsIgIfm0eOha zmNMq6/o wJT6wqzQDJcMrrFXls9Et+vVwS2ruVgwBIVGrvEtaApgz4lt1TPzsF82GdR13A40Ve4bkzQz3qKCdbYkRkCRzCpVMkcjktiG7ysU7GuRE//SR8YPcZHFNk8iVyWa3RLVxGu+vbZXnmQiE5NQ4tIcuiT5hV51jFpB/3Yi9v1ozyE7ETpJPPGkmg8AH8YLYaQUgubBcw3vDu/uzLj0uCb05oIDWM4/kkVZUndqBTFSrYezZqU4ZRB6RgSRszv89bZlE+i7FAQ2f5lfPCpiuHwdjrDF0MXf1/swF5Z21ZXnDd7apujco9+XHFikWuaFm6Xdf4UzvTVFLaaPbuiR35N6YJb1gOEocI+m6KPXGZowBWnadoDFPUlp80LV5EV41gmVKkjVPFQGlgpm618Uc15Ngg42jEIYsAxtH7xrRRlFTLCNaDk/1UKD1MZ/EasQ0+MXCGOGWpF1WzM7ynfIS/Sb3p5JiYTEuQtGDu3wZueVRv9YJog1/ruVUTLSyIAxmeLPVUk0Zm1vEzlGVfAWjQeXP+a8FVt6ks74IPfGrEc3sG+sdCFrIvWS7wvMQD0jOQGUVfmwhZpKCpNh1MkPEXyO662fADvQyAF9pmT6U9UiMbkmQtNWV6YRKWS47EXlkg3CIhOw9Pt3ouxAe3WgqXqQMKIJeAA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000030, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add the KVM capability KVM_CAP_GMEM_SHARED_MEM, which indicates that the VM supports shared memory in guest_memfd, or that the host can create VMs that support shared memory. Supporting shared memory implies that memory can be mapped when shared with the host. Signed-off-by: Fuad Tabba --- include/uapi/linux/kvm.h | 1 + virt/kvm/kvm_main.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 45e6d8fca9b9..117937a895da 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -929,6 +929,7 @@ struct kvm_enable_cap { #define KVM_CAP_PRE_FAULT_MEMORY 236 #define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237 #define KVM_CAP_X86_GUEST_MODE 238 +#define KVM_CAP_GMEM_SHARED_MEM 239 struct kvm_irq_routing_irqchip { __u32 irqchip; diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index ba0327e2d0d3..38f0f402ea46 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4830,6 +4830,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #ifdef CONFIG_KVM_PRIVATE_MEM case KVM_CAP_GUEST_MEMFD: return !kvm || kvm_arch_has_private_mem(kvm); +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case KVM_CAP_GMEM_SHARED_MEM: + return !kvm || kvm_arch_gmem_supports_shared_mem(kvm); #endif default: break; From patchwork Tue Feb 18 17:24:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980315 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 58883C021AA for ; Tue, 18 Feb 2025 17:25:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 59104280167; Tue, 18 Feb 2025 12:25:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 540DE28015D; Tue, 18 Feb 2025 12:25:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3BC1F280167; Tue, 18 Feb 2025 12:25:17 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 132C628015D for ; Tue, 18 Feb 2025 12:25:17 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 5AE5FAFBAE for ; Tue, 18 Feb 2025 17:25:16 +0000 (UTC) X-FDA: 83133741432.08.A9B8B44 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf07.hostedemail.com (Postfix) with ESMTP id 7EC1840011 for ; Tue, 18 Feb 2025 17:25:14 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=NsgtNUyk; spf=pass (imf07.hostedemail.com: domain of 3ecK0ZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3ecK0ZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@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=1739899514; 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=iGoNX/Glm+WMVatJb0FvEqCK9D+bw5+r1sAfGUD7IRg=; b=qEJxHGyfq88s4YPPCwiLVhBU/s2WgLsW6uUIQUcgNiMZqBywKnsoUF/15tp8VeScORO5Qx yGWaoo6ULDGzEuH9DmNs2vPD6i1FXz7DHebPCM6I9qBDKF9HvoJN9PUzOXANydPvw4zI/Q 98N7NkahFTX8jizFCJojPb5xm0yGUmw= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=NsgtNUyk; spf=pass (imf07.hostedemail.com: domain of 3ecK0ZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3ecK0ZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899514; a=rsa-sha256; cv=none; b=tv/5rZIhd2Q0BLzvHwJtwJCnMfOiWJrwOlKj+p6Q7ytx7IQv72eSDO5dqoxJtHRrK+bBbN xDkmj+t4YQz4qv+inaUwEP2zie9un4PAX17ZIW3O0vBSSVk8OGbP2pgC8OB4v18yr42Vf8 mK9K3x4knw0sH6uyvfr2AeZWsIugWsE= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4394b8bd4e1so34333025e9.0 for ; Tue, 18 Feb 2025 09:25:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899513; x=1740504313; 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=iGoNX/Glm+WMVatJb0FvEqCK9D+bw5+r1sAfGUD7IRg=; b=NsgtNUyk+j9jS8PuSWN4XVRDaIHWmDQFUxd8skt5ufb/gHvhlwvPQhvthlp+c2sMy0 cWnD0DjtKo+XbJS+x5Y6b5loIiA8TUp5hdS2II0cJujFhqnsbG1WBPC8wh7Wp4pP+Grq 5zXjWEsmC2x/haqBCCGvSPRBEUHpupvf/qSgrn/s9nPGt2fOrq+/9gBBF+/WzNGNLIcG ct9n7Esjuj+cJxg9isuakTy1LHp6C+YUaaANxCRIzZOTnCF6n4QjnVSWSuWCNU8ttDCq +abZvqjZcUZ9w/txBysfFsb0OTlcFYt+oycVA0ybv04PMNaNxbiVhhVAgT8tP2UXNYRc vebQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899513; x=1740504313; 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=iGoNX/Glm+WMVatJb0FvEqCK9D+bw5+r1sAfGUD7IRg=; b=QWT+v47IpfmGYetpz/ksCX94ZpIdSMWqJ0h6yQD13HdWlP5vgUt2Jouee5KJGlu0+R Vg34mZKMD8KwKkuZyyNdnOFCdPtZOzwf01euWGShFxwnEwkAFhQsQRBlRWaOCi+rgXUp SJ/w8KznaKdZCZZmPgagIN+bNN5lOGjKPu9ETxz4ZuRNmaEu8OOQ2sCzw8yrRhx4Hi9T nNhxuuGwrZ/KjG+EPE2bCWBDQPtw7N0BlkgGfMXEBBBFj+/xbxOPUC3ZRVGd+VOG/Lxs UXhFDCKwng+n4q6pWFRe8QejXXQ10APVbq09nTm9zTSHFETHreQ/QjN8YitEA9iiG4Bf OOqg== X-Forwarded-Encrypted: i=1; AJvYcCUIMdhQOd9L2BzA7DHv3SicxmcdEbwb9ykESFFvKUeM6wyzHhZHqQQGqGHDoCjOkH8VBa8YiaYv5Q==@kvack.org X-Gm-Message-State: AOJu0YznK548IPv+JN6/2fVcgEkjQqCcoS6X/kg17zMQknxwOA7tLDwR MZJ+d+TInR18h/VKTTDlK7Z0k0Yt/IF/rHn5rmKt+6uJjZfSYujEcwyOksNQXr3gOzdR6SJriA= = X-Google-Smtp-Source: AGHT+IGyVyR6Cc0fgExYmIOuVxu5DOaZXMab5x34lQgOdyuWaPWAIeIyXdXc2E/LoCQ4Y0Nq1mwGNRpbtA== X-Received: from wmbbh16.prod.google.com ([2002:a05:600c:3d10:b0:439:985c:9199]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:47c9:0:b0:38f:4493:e274 with SMTP id ffacd0b85a97d-38f4493ffe2mr8630057f8f.54.1739899513086; Tue, 18 Feb 2025 09:25:13 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:55 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-6-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: 7EC1840011 X-Stat-Signature: secd6kge487rarmptuma8obih6n6dwyq X-Rspamd-Server: rspam03 X-HE-Tag: 1739899514-513609 X-HE-Meta: U2FsdGVkX19hWqDbI6lKtzj8144grpG0IHaFMNtfDTYECDzixkTgLBXrdqQrFku/GkaI8S+pkZvs0BdOH91cNSexHQxvo7iOBlHCLQVKvQBFd9laXcI6a/Vv2fuplEPFdJL5qAv1VjOOcVLH+Tw1XH11yfJFsi5O/WH9agnWRBao83aWrhT/w2wFuaYvulfG+cehkFfoLOQuA4FJfVSZQRW/Ng2Jv/lc/XJPjeOEH86OREO/iyZt6NdfGz7XenHJ5mGqM1MX3NRdlD9WkByKU+OjbkuMF7Rzdzav0BdqOj7ArBf7eukq9onstrF4vVhqhpiFWZX9oHf4WkLgsb2EcoWO6xMhh4tUm5fcrKOpkaC0AugS1wZh4i7ZyzWXsHJR8kT2Nzcsz7rE6GukMk7+3DGPQFM6c5U4Pt5yjRLkS5iWRd/XnMqmLLALK9Kh6Epc/AJBhrGUaUMb6raaiBz3aGvyfR2/pw26exOkFgtBRtptBXpDPef9Zf7rzkSwXOtwHWZzzeEr1CquHitf6YOHBeZq0fywTDwv2ZqwZxqWKXtIumHtVtmiFwhIJPQW2ioaj62M2NrSWRBjhOJZiUS4kdgWnOwvJFsmleiT+02pMSaApJc9dryHUDuDwJhAxn3+he9k2BtO4aTHMjNuKNE5rF7dsxr9xkErnuZK33jtWofYjyc/J3mKpGML9y0FdmUjoQ4WXIBYCGTk9Bhtnc/Czlsf0RZ4HzMV6odA0v+V/J4FBZWIXQb0q6bPGwBnEFkuaA6XC91BdolFrB0PUZyV5K2Jr89nNSs9r5BWZVNJt2x1emAaGbSuU4dXmPIrdUvu/M9nj8OnQM4CedmxAmjMJaKeM6qfJ5OcDCQXXbPz9tb/SIP+Ik6djwVxuzqk4w9DF4p8ToAaP6U/IQ2oPYM+UGnTmrIUtccABgNlEVYc9Hy3jnWBRSnqIdJpqniQla5rZbN8l/+NrI1/U00c6Lh az27gbiS lZOKxYk2xyMm4U2SmgoWNY+Fft1b3GOi7PicxNr5CJDqRUBmVL3JcfIhqtnJXnb3tGGWswStyUHDlZ2v8HWj7adB5DTO/sUekIvkLvnWHb9/V+9oHY0lbSckll9Z4BTk0gfdWIh/zm+YAanKa+Hul7g9Qkk0eOWrP0SWCuzuFez0SJaZPdfxCqV1K+p1mv9MWsRLI5VKRogsy+h/ke/r4QnFdTUFYTSC0HgOqh/sh9+Wegl4AR1d9bbt+9DbzXh0RNlsUzB4F7uxcKe6PwSiUDS6iGoi1DwfJZBuNeWBD1HokLiaDBhpexOi2y06DdGWtMZMcd1KhSpOhUs+4gXmlm5cftHmGUK6lwzA2NWXImQCLrK4MWYL3xW4VmgAzNwyhFmNl+5YnI2rZedwJPG6vPLPVvZZFOoiD1N0JbVaXyN8YW/uCPsHxvZciNAHff5MTEHzQGvKXFLFX1JFWq6rpXz/wqUr3N4HG0IzrpXSG9HOtZ/Wly62USlAoha4AG1f9f3sBdPHwrPXM32gSw8pj7kA3wiGRqDnGcWp9CZu+yCF5knDt/G7UkbMzPOmUy4GisOrntU0Awo5O9m5fHH/tcwiJydovZSN0w4KLJTTcWRzz4Kjky0PQ/3AlVi3XhUZF/AvPfGG4fvKOoR0J5ap6yyeBtA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000011, 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 f9e8b10a4b09..83f65c910ccb 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2521,7 +2521,8 @@ static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) #else static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) { - return false; + return kvm_arch_gmem_supports_shared_mem(kvm) && + kvm_slot_can_be_private(gfn_to_memslot(kvm, gfn)); } #endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */ From patchwork Tue Feb 18 17:24:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980316 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 C4AD3C021AA for ; Tue, 18 Feb 2025 17:25:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0B17B280168; Tue, 18 Feb 2025 12:25:19 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 039FB28015D; Tue, 18 Feb 2025 12:25:18 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DA6DA280168; Tue, 18 Feb 2025 12:25:18 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id B625528015D for ; Tue, 18 Feb 2025 12:25:18 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 6B41F802D3 for ; Tue, 18 Feb 2025 17:25:18 +0000 (UTC) X-FDA: 83133741516.08.BA54C5D Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf06.hostedemail.com (Postfix) with ESMTP id 88CC7180009 for ; Tue, 18 Feb 2025 17:25:16 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=2IoBP7lj; spf=pass (imf06.hostedemail.com: domain of 3e8K0ZwUKCBgHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3e8K0ZwUKCBgHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@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=1739899516; 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=jx4xZjDfMBMXXhEUJXok46KCHPVTD9NLwBhDL+J2lnc=; b=ysQ8WzWy6Ln9QGF01PsoDsz1T+QEudnHSZCA+lCgJST22Py+5PrVUWG8sM1NqvtysKP1Xh dzUrfb3mbiEdboDTa+PhjUlzPdkpbF+NJQLeHfDRGt528QioVKKcMZzwLMQMVWKZNrXP3S qLRfl5qwKZ/iNMpGcBuarkWq5jLLQTs= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=2IoBP7lj; spf=pass (imf06.hostedemail.com: domain of 3e8K0ZwUKCBgHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3e8K0ZwUKCBgHyzzy4CC492.0CA96BIL-AA8Jy08.CF4@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899516; a=rsa-sha256; cv=none; b=4aW9POGkfzbstwXDQB4F7AMZ0PxNQS8m/eV0gPOMkEdomiWCgRFCic5VvRJEIc37LA0m7R M5MEH+dQkmvRWAV3L8BtYUa4pN3xanRoxRZkhsLyFNz/ANcmvXpaJCM+uW3SyaIEKeemtp GgQDUnKReWRm+F3glTiMFllWx//rJ18= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-439858c5911so11923205e9.2 for ; Tue, 18 Feb 2025 09:25:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899515; x=1740504315; 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=jx4xZjDfMBMXXhEUJXok46KCHPVTD9NLwBhDL+J2lnc=; b=2IoBP7lj390utqLkGotj05CsEMT0igJAuSidMs3mLcdblLCGcGd3sbmzC3/ZkGKD7x tyR6HI7+PfI6FR+V6d70J8Pmqo+uILqrGnzH4VZT8x/famn69TUKzzwfOjCpwF1Bu8/n h7PNbzDEfHMInfBQ2KOAQSXPDxFa806QB5hDEuO3rvjwC0MSSuGwQQ/7w/nXko0npZX+ x2e3EMXGWN/uUVMcFTNUnZFiSfKaMfgAAAOEjfYSgRCax2bKKFB0H/CYzkNqT5u9N8xv dN345ROelD7FUgvoKn6BR81tZmqsIWA8TlRlPjGnk2qWoFn+tTJh6p3cAG12DoVEpktz g8Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899515; x=1740504315; 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=jx4xZjDfMBMXXhEUJXok46KCHPVTD9NLwBhDL+J2lnc=; b=My77U4DIuY3Xj0IcKUCbxSTqIRmp0BNlKuMhrPd/gK6WAmEUQza8tUcnykPYuVdCHv uzjzrTgrc+aKWq18Qlibtr4HuAKHF9dC9VdLT5D+9nh0MhfJV6tqidUYeVvVjqvVy2UC Simq2Ov19vOsS8/YXn8Fv/wtbAu10TLpNI+bS7Bun5pj+nMGqn+QGrE74Apl11qdcibZ 1dsTmLVnWJCJBlvwVpUHnCAAs1DThJabTlEIl6vxdWdrPNa+fNZW144194FdrQb8x+am 7ycJtJyu0xo/cyJHH6kszN48KE16ciyBQHLO+rQHmYZydM/t6eYVjcL8273dOTFpIKgL fsdw== X-Forwarded-Encrypted: i=1; AJvYcCUge54TkjMgYH2ltNWkkatPR4Y4m65lNBtGcAHAVX44p61jLE3lgzXLaeht/OFJ5o8pWjlJNXmU7w==@kvack.org X-Gm-Message-State: AOJu0Yw26yGnXmNJbCcaJf1ZYbV1gV69aeWpnoQc6czN3Qr+/JY4I+FV 2wRC5hvGuVQQebDO2ph/T9bOKRZs9VaYgk/eSnnCZbdP5CyVE/Bb7LJ4+Wm+xMW3wDP7/uphiA= = X-Google-Smtp-Source: AGHT+IFmZffBFgEdtdB4umKgK2ktvciHW+KwlXO0p1rZeaOpM3ZGypPScKK7EME3e2ZtSdCfEZtgUxje0w== X-Received: from wmbfk13.prod.google.com ([2002:a05:600c:ccd:b0:439:841e:b677]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c86:b0:439:8346:505f with SMTP id 5b1f17b1804b1-43999dd21e9mr4817225e9.20.1739899515197; Tue, 18 Feb 2025 09:25:15 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:56 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-7-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspamd-Queue-Id: 88CC7180009 X-Stat-Signature: zgskg4m17zcwmweusr5sj8cyemozi58n X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1739899516-409774 X-HE-Meta: U2FsdGVkX19fYazGBds3W6JPA1EXYV9vs7cWCgVPUOg+rXvebsLypMVMH1cwWBC9cEpe/uwqHhG97ZNo93sd4YuA+UfoNWAWW1vhWtyu8NeGo1GGvcl8M0CpxEEO4S0jOHU8yO8JoX2/dPSeHfR049O6DOc4Qc6Hdn1ZdIwuFpVtp7xing5h7sl71cLcp5446m2/KzJXR3+dKcdT6dcSTxhI8f7PzbrFiTKJLJF3JjrYZh6mydxjLbDGxqe86G7mn7uU2F9KP7MSdcyqCEy1i3jsloIlpWBROMgy6dxnTjxia85KX/jZXZZmKIxTgErJtCUtOOPPOgyAzzBzAxnan7lxLC48ubOSgluDCTwf1+q5jy+ky8WxrPOKmMm+S7QMGsJuRQDnYYXWDv/7riXw523lnwNWE3smpXUPLHShwWnsM+IIAGxY4chES9SX2+lNPE2co3jVBt0L6QnYXNz+7kxfDD1Nucv1eTsihthgfKuSStXGg/1jdanghlqzJ8mPF61bF4jLNjofYLRGWMmov10RmdI7lPlPtO2P6b+PAhWazP8vIceyyPNFqSy+000pkfBYBZ1Hp153NDtTi8UXwtkfvjJ42zeJnYWa4TESpnFW3dn0O3w7nOYemCewzOQrxb0I2VeaJSCsJGtyQphruwK2hrKzCdvDnGgG9DH1b2lDluzT3CgLj2nnH1j9BDn0uPc4jbW4uBGMB+o6zzvb8YLscRPF40Pbmg+HA8KqJs2GG11D9cEpt8Zr8tAzA9f5tCUEypJpGWSw7uOI8dw/dtAmy7pIvJzr5SX8OyoE812aZGhhmsvnMm09bPcymUybhSUWApmx1EW5bG+VGZ/W0vsvAz1oW3h25Wqn+Eg4JdBAMTSPhnl7F5cCAzj24O5lwYvjw8tNUMUhHhANqvPPT+lhPDu2bzHf5Rm5BEykL4NF4b7ib1d5SyCmDPrFJ5fdskKknFMI2Torj2oo6xN i7i5PErG 74ter8ZbkmOX8YyrGFOPVQ7OlPGoAWy4H153hzQfxNn/mGreeJWGvp0r794EhVm7VgAPE/f73AFtjyu8E+qNLzwEvdm5tcFKxAwX9mrlgf1R/7y2Fc5wPlHEJxoUPa5x7FdwIpbfv/Hl3koaB/2txt9bDA9CXiLSwgbV7UeObxVYnwLA/gnOhmwjONOIiUtzNeJ6RHA/i/kKLNNq1K61cQge3SQRC6KUcgbd9GI3/Gpf3uGoQuMoWoeImokAvtlShEj+ItOjjSyS026aHGD0TPqzdsYqje0o+bkmAsemFY6N6IrS7LYCqvJ+R3LpBt9NP9DlwpHhnt4g9DluMWU5O3a6VjVTNHWO3RRBHY0raPGl8dRVSmPxTKh42Xh/o1/cOOJ2YzE/5S7l1+0mmLrmXagJhOo/AFL0by0upem8GPo5LRhgHoDUOrshvTKvzyPe6+9d4FevrJsiEUjOgWki+3350q0Bbn3gx7P7XbRbVr8AInjW5HJRjvvAfLt866IBiUsj7KaLZoa4n6ZzOMpgiHWe5DVXkbYLTE4iEf8sSitRDZ8476JGhCE1GBEU6q3KGAygTPExxBSJAQwMueSVeiyepzQV6sNoSWtxh8fl/qb1QLmVH73Spvv1+qhP92dzw7x6PMlhp/Q3Z+I7Nvbed2I4u1w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The KVM_X86_SW_PROTECTED_VM type is meant for experimentation and does not have any underlying support for protected guests. This makes it a good candidate for testing mapping shared memory. Therefore, when the kconfig option is enabled, mark KVM_X86_SW_PROTECTED_VM as supporting shared memory. This means that this memory is considered by guest_memfd to be shared with the host, with the possibility of in-place conversion between shared and private. This allows the host to map and fault in guest_memfd memory belonging to this VM type. Signed-off-by: Fuad Tabba --- arch/x86/include/asm/kvm_host.h | 5 +++++ arch/x86/kvm/Kconfig | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 0b7af5902ff7..c6e4925bdc8a 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -2245,8 +2245,13 @@ void kvm_configure_mmu(bool enable_tdp, int tdp_forced_root_level, #ifdef CONFIG_KVM_PRIVATE_MEM #define kvm_arch_has_private_mem(kvm) ((kvm)->arch.has_private_mem) + +#define kvm_arch_gmem_supports_shared_mem(kvm) \ + (IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) && \ + ((kvm)->arch.vm_type == KVM_X86_SW_PROTECTED_VM)) #else #define kvm_arch_has_private_mem(kvm) false +#define kvm_arch_gmem_supports_shared_mem(kvm) false #endif #define kvm_arch_has_readonly_mem(kvm) (!(kvm)->arch.has_protected_state) diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index ea2c4f21c1ca..22d1bcdaad58 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -45,7 +45,8 @@ config KVM_X86 select HAVE_KVM_PM_NOTIFIER if PM select KVM_GENERIC_HARDWARE_ENABLING select KVM_GENERIC_PRE_FAULT_MEMORY - select KVM_GENERIC_PRIVATE_MEM if KVM_SW_PROTECTED_VM + select KVM_PRIVATE_MEM if KVM_SW_PROTECTED_VM + select KVM_GMEM_SHARED_MEM if KVM_SW_PROTECTED_VM select KVM_WERROR if WERROR config KVM From patchwork Tue Feb 18 17:24:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980317 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 5E2CDC021AF for ; Tue, 18 Feb 2025 17:25:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1A43D28015D; Tue, 18 Feb 2025 12:25:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 08736280169; Tue, 18 Feb 2025 12:25:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E691F28015D; Tue, 18 Feb 2025 12:25:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id BEFD76B00A3 for ; Tue, 18 Feb 2025 12:25:20 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 775DE160211 for ; Tue, 18 Feb 2025 17:25:20 +0000 (UTC) X-FDA: 83133741600.16.8016BA7 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf11.hostedemail.com (Postfix) with ESMTP id 9C24240006 for ; Tue, 18 Feb 2025 17:25:18 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=USLU4WCC; spf=pass (imf11.hostedemail.com: domain of 3fcK0ZwUKCBoJ01106EE6B4.2ECB8DKN-CCAL02A.EH6@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3fcK0ZwUKCBoJ01106EE6B4.2ECB8DKN-CCAL02A.EH6@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899518; a=rsa-sha256; cv=none; b=7MdSEKchH+5DiRxM5/Qz72lRtLwG6DAYXGFWSIiv9xO5p5gj8K4P+i58bieF4XG17x+wfi M40QDJpxMvAMP/FkL1xaYrK3nR6Q58JQkNsGRARcKeX49R7pXDlwjte4X3gnMLk+oVapCc rIEHrGiH+tBAHlHUqdDNjEG81Fn+hJk= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=USLU4WCC; spf=pass (imf11.hostedemail.com: domain of 3fcK0ZwUKCBoJ01106EE6B4.2ECB8DKN-CCAL02A.EH6@flex--tabba.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3fcK0ZwUKCBoJ01106EE6B4.2ECB8DKN-CCAL02A.EH6@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=1739899518; 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=0+1jJ542FIUn0Rr8Fjhsk4rNdZzsZ79ixZS3qAefs1s=; b=azFZexaByG/SBv8ipAFm0QPQr+Fv1SOEVa42Wo3rKKUccP3Xyld+pEVzh1G+GRN1ozK94u iku3c8MtVL88DzHH8N1ovnsHZ/pI7MwzV47xfHDSC78qCqTs9AMMMEqdiA/eNQZF2ApySq YLREUl8d1M6VMTR9GyUJTgLWu+H94jA= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4399304b329so5552255e9.3 for ; Tue, 18 Feb 2025 09:25:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899517; x=1740504317; 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=0+1jJ542FIUn0Rr8Fjhsk4rNdZzsZ79ixZS3qAefs1s=; b=USLU4WCCTgKfXVcrWyIqZpgAkvKm/YIEV5uObvO9XeOVePDwA8BxtcJyQT+XZtcOqf OsoFh35oKn/fPldyjKZcxDaDxGRbI8stjbr0j3DfwD87lDu01X1sYnbDx8XuV6UhMm7x VW7i+wbYxDLd8sGItBrG0j0DIjN42C9pcPhC2USNBEL5e+lfz/b3CUaFb2pjQ5TWrA4h k7z3A7g9uAKKnwqNun0Iva2PBeOoL/rz+Q8U3o05VpmEdOnVW9eoD0+RROVk0z5gRRcL X4JifpwDUqdg8wBdAi5SUpdkOvQ8og3syauV7uKH7jxBojG8e8m0ZHPh06OsRRfYSqEu OcgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899517; x=1740504317; 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=0+1jJ542FIUn0Rr8Fjhsk4rNdZzsZ79ixZS3qAefs1s=; b=PSQ4yzdPokUs1nYYaMfs2HiuWz6cS4ilAl4MvLw2PBFfKI82UkUHP3U0d9mgHy7Epj T8W3GxSNPwa4fwIosxAou4JYduYC0t3B1o5xnHmBDyNTocFU0BlTg6MT69mb94zOR5d/ 8rxwxAV1vz1F7ES8Z9+LFW1LohGFbq93uTt6oMlgfYrzQ4MOkb2KypDzYVCnvI0XCyJ4 OIOGHcpp0QhKeh3YER7FwubPLOWPj4y0hfNLmbSOPMrs0y7ymgj8kRdsKlZjABwuqHnm Nh6JMsWuVMXnf5zW7bTMUAw19ck3Fa87DRoExp5j+lSsvZN4o6A0DppFgltDOZw7aBq4 m6Ew== X-Forwarded-Encrypted: i=1; AJvYcCX6iPq+7P8CXYwoX+tqkj7hG4PvvNeUcJxWEyffQ8HDZGK5EePhCrLbdHBWzgqbseWcXSHLCuw3Ug==@kvack.org X-Gm-Message-State: AOJu0YyKd65nzDbwdKpYOsWyGH9zOHqihwU1RqXHKGvR1V1tHTTJjqHs 8e+Va+i9uKzxhzRbiTx2l487dKcHrMlgfnfu3W5vIct1zIDUtY4U5+squeQqJQ3h82MYtplNSQ= = X-Google-Smtp-Source: AGHT+IEomX75wSUKcjYlPTL8ccxKDoIA0hN0/nqjvlvYP7OWhi/yQq6R2XsnyWNa2w6ZlekuJlp64UeMTg== X-Received: from wmbfl27.prod.google.com ([2002:a05:600c:b9b:b0:439:848f:2fc7]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4ecc:b0:439:685e:d4c8 with SMTP id 5b1f17b1804b1-43999daff2bmr5080855e9.15.1739899517280; Tue, 18 Feb 2025 09:25:17 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:57 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-8-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Stat-Signature: utqz7m1o1gy3dwn4r3k4tnr37yik9tu7 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 9C24240006 X-Rspam-User: X-HE-Tag: 1739899518-225024 X-HE-Meta: U2FsdGVkX1+Gc+A34pnR0DLwiZDCzPHzb6raIZUh1cqg5sm/2+5EY86GoChtjYRjjbxIhjuHmUNuZ3x5KXwOVG+UckkpMgv7jGCep7ubbid++JPCxav1FIA2lDxfDTgWzrTr8dMFXVeDdUqnjhmn6dBc+KrL5RGleDdh6lFsQmGBPCdn0EHZs4H2s/pBXWj42yqFC0hEugqTtTNJ8rzfEG4KGbOuPq8muRA3mb3xlB8r2wWU91yIa1xuDUr+dRAtv1GHdTRjmHz0qE8iWZnJ4oWLkx4wQgOWihUZKXam4JU9Z6wsACJxdugNAd373a5THMxODLRrw/gKJDJr65bRXgw/EmMzeeJZLL0d2RUe9qbC3KOVHX2xRbHEdpHTrDh3XV1oHJMGge8gnqX/42jp+8dRXyt104mRx8dZ5qnwCv+VMVD6kRnfqwRqffskJDVkjvRxICO/2YfR+vJB4o2NXYsQiCfdhFDaA4pEjMqslAWBkY89xIoNq+djA4DvFXQRMrYwNjENvtF0/6BDDXQNPH4QEoOt1bpTKbW+K/f0QQ+2HtzWgve6cR5xpWA50q9EO1UiHMxSOe8YCYBi1igwLUxXbB6J7k/6HZCViEUwol2qOkh1wwMdDEYrHswV64/fpLOUQDBF4NuoKma3AyLJh445MmKeC7BEvOVio6sYtijZnCKXsE3wK8Xr0BTuHVv9OpH8AUI7wtnAQR6HpkJlKaEnP8C/Vjjep7EDsBwkUOeauO5Ubu73XJfAaIkx8NoE7Q0/1g4WUm2EtNVqxYKFMlo1xrUmjq8wZhTRZMd7PamsFcq3/cRQvMOGxe4/s5dH83FYHCs1RPYOFZGM0h35T6r9B8z+DPktLgh/Nu8kSgwAcy0pEHvoLEwO7V6XO6eQNZC6MHfGY7kjZkeVijZNZdehlzNhVHvIoGyzYd0hyA2KpiWfCeMJpIxii/ckCjmXYYQMr/VeyTt9O7uAzOA ge3GLXhl hYP3mUxPHk0/ogeQp/S/gYu145+X6t/PAX31YVeq+AHoYVu30Lb4SIM/AANUhqF6RwXDkcQVp29OiObc/saGo22HVIABqchOD7SU8Aq2LNseV/UqZL4jDuabcKhrwKrUCRZewUc08xzaCPq/sn9rSYCWvy/k/yWaTzlGTbYk3qFEEOM3JQUHPsH0Fr2j4Cnwsut6fO7bOvNNnRPKUG+ZC+cdeApEQ/Ea1+NXdDFVYR27rtrjx4Tarox2To255Zlv1cRXkqk3I+oKoxnw2QK6fMePhb6cSH5sbhCJEE057A171G1XusnKuGOxXbCdCsQ8xfmN//cmoSgBNwxUXC3QaqExgHL9I9BNFLMw+660eZbZQjuiwl0cx1WpjaNXol3fbpiDfHmry8AXX1Vq9Ptbjrg4tKTQtAFsn9Ab7JmhvIfvcsi8/aKH62BbRpzn1kC9JxR3GD+efa63HR8knXHXZUM7hvd4ij+UFwOYtD9vsXJWcYkI9AhGhLERv/9SJentcYLI4vgYcWP6j+4BBKqt5Ahyqt+v6MyS6tgNz+PZ4mCgCFjvLbPsayvotSsyjP0PqJEX42AKDlFGQQFGdSE9e9hCGFEPtjruqZCQUoNEUQNSNcfBEo6YDvwQ5+jO6V3RINN8FU2g6d80ReIEpuss502CNFA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: To simplify the code and to make the assumptions clearer, refactor user_mem_abort() by immediately setting force_pte to true if the conditions are met. Also, add a check to ensure that the assumption that logging_active is guaranteed to never be true for VM_PFNMAP memslot is true. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/mmu.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 1f55b0c7b11d..b6c0acb2311c 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1460,7 +1460,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, bool fault_is_perm) { int ret = 0; - bool write_fault, writable, force_pte = false; + bool write_fault, writable; bool exec_fault, mte_allowed; bool device = false, vfio_allow_any_uc = false; unsigned long mmu_seq; @@ -1472,6 +1472,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, gfn_t gfn; kvm_pfn_t pfn; bool logging_active = memslot_is_logging(memslot); + bool force_pte = logging_active || is_protected_kvm_enabled(); long vma_pagesize, fault_granule; enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt; @@ -1525,12 +1526,13 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, * logging_active is guaranteed to never be true for VM_PFNMAP * memslots. */ - if (logging_active || is_protected_kvm_enabled()) { - force_pte = true; + if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) + return -EFAULT; + + if (force_pte) vma_shift = PAGE_SHIFT; - } else { + else vma_shift = get_vma_page_shift(vma, hva); - } switch (vma_shift) { #ifndef __PAGETABLE_PMD_FOLDED From patchwork Tue Feb 18 17:24:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980318 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 DF038C021AD for ; Tue, 18 Feb 2025 17:25:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 78E7828016A; Tue, 18 Feb 2025 12:25:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 71519280169; Tue, 18 Feb 2025 12:25:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5443A28016A; Tue, 18 Feb 2025 12:25:23 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 30B1D280169 for ; Tue, 18 Feb 2025 12:25:23 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E2050C02D3 for ; Tue, 18 Feb 2025 17:25:22 +0000 (UTC) X-FDA: 83133741684.01.0F78BB0 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf24.hostedemail.com (Postfix) with ESMTP id 0E5FB18000F for ; Tue, 18 Feb 2025 17:25:20 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=jTof81Yh; spf=pass (imf24.hostedemail.com: domain of 3f8K0ZwUKCBwL23328GG8D6.4GEDAFMP-EECN24C.GJ8@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3f8K0ZwUKCBwL23328GG8D6.4GEDAFMP-EECN24C.GJ8@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=1739899521; 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=HrCJ0PSXwDLqByOCYPiXAh/mnjwdtGMIXzVkGX+CyBE=; b=ty7flsyNWn5BcPCFbwvsfnT6+TbPaUgFS/y6UKwPS4NnVuZXltqL3308FrNVlaaVuGVLzw tb8+dCSq8VnF/elDXc0ijeQsTAE5AmNikqpK4X++IEpCuqBPveQFSheaGQ6gDVsawzARev ufFnhqBXISCj1nqlA8b4IbhMHEW/71k= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=jTof81Yh; spf=pass (imf24.hostedemail.com: domain of 3f8K0ZwUKCBwL23328GG8D6.4GEDAFMP-EECN24C.GJ8@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3f8K0ZwUKCBwL23328GG8D6.4GEDAFMP-EECN24C.GJ8@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899521; a=rsa-sha256; cv=none; b=dUc8bisirBwCH3peFfkxntjsliorurNfUAPDWhZFz1/TN4GE0tGzeH4anbB6dgLfmAyy9I on0yuEmwrwiWB4hM20nYrbNmEluUoqGoO4kSOkmtSQWVz0k5WDokvu9ytczYX1WkbGg3R4 iFFFEHY1x8HVRA3IywlqlsdKFDprMq4= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-4394040fea1so32941485e9.0 for ; Tue, 18 Feb 2025 09:25:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899519; x=1740504319; 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=HrCJ0PSXwDLqByOCYPiXAh/mnjwdtGMIXzVkGX+CyBE=; b=jTof81YhzUzxga8PPldT6ZyFM8lviNKM0eeCltPExO2Mn8KjVInw3Yupf1l8zwFCHo Klb1cvOdd/XUrS9m0JLprHm0moeC4hvdMR5woZAN3gTLsBpoW/FTqchlc5B8p4uSC+NN tmQDsyr2xVtyfbomPZ2wtvB088yZqu5NIkHLNNLOgHwft5LS6UVPVcYY5wnEEeU+Ua8b ROykdD+kkcJqtUlkzoMy1ao2wyzX89/273X4YeUjdwwc3tD4Q5YK9SlFt7Ys7/+VXNcx qKMrDNdx7J6UmLzQksGGDHG+Ll7CrDdQERIriwSVKa9ZPTBBqc+OKtZHCldjIO6wzPqF h8KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899519; x=1740504319; 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=HrCJ0PSXwDLqByOCYPiXAh/mnjwdtGMIXzVkGX+CyBE=; b=Ucfjn/pTxeJgJLkrNipYGyJRqYICb68UmW//CnVANVbJmGiOWkTZRvN/vHsjyxDmrP pTnagvmP/zeXQRggZ6dl4C0BlnMRy4TuxGa/Xx4XHAlolE8UHE8QmJWXnixZ24x65izQ yrhq4Mzty8sUwJN9qhJ21KXwz4CXbnC2ICXxJtqP3WQ29K/krSt6NTliQl0TIkTtApnW CdPeBiVWNLKhMB0FXtcCJY4h73Z62ONkFf/MTrdeFdjM2qetn8yAGiWOBRFW78287l24 7mmzn+1vRIXxpV5th5UPUucB5dRnGKl1L0Utt4BkomAl0Wdgy20Zy/EZPn+17sse2JrY ZCyw== X-Forwarded-Encrypted: i=1; AJvYcCUxMnj/g4EBUaW7t75S36jGN87cSvTQt8DjX21YY6CBKikAdQTuxY5ICWZkKcVLMImOOl0Fs3HH2w==@kvack.org X-Gm-Message-State: AOJu0YzhtU+nrKCU9pyyeDooQsK6B2hmCg1dz5WVJkKxB/s6zuElzkpL Y1N6lXfOb9ER9N/yb27RqBvGwlJNRYdFDZdO1/lZ+mV3I3yWBTaBqvE8T/e6TnIWoH/PnujJSQ= = X-Google-Smtp-Source: AGHT+IHieSA46B89OLR6pUBT7ll3MiaqOwCjVEt9P6dGxiZsBq8L2OW4aSqegjPPhJC2FlnFwn7sH4wmkA== X-Received: from wmbep11.prod.google.com ([2002:a05:600c:840b:b0:436:fdb2:fa5]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:6d4a:b0:439:5d00:e78f with SMTP id 5b1f17b1804b1-43999b7ec7emr6088405e9.11.1739899519655; Tue, 18 Feb 2025 09:25:19 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:58 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-9-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 0E5FB18000F X-Stat-Signature: i5mhoch9x6h5iahdnur7k75wgpzud6mw X-HE-Tag: 1739899520-9975 X-HE-Meta: U2FsdGVkX1+n9UZCKQtN5oVbWRLMhYMVPkvhRg5IT9v+nLX/q8RfLhi6n2sB1LUlr9Wb9qj2pHVCkh4QgMxBE/V2UvE/1NGkoEdcE6D/Ik9oUas35ilqAXUShI1qo64KJOsnApTpG/PhBSDW32E92JHYpARuMT8AQt5y4y4V6hbRdMFMjEH/GE/WCQUmaTlTokSr1zpyVJPLea6bm+kzmUce1P2UAlPGaJ1lASqUPmE97n9bj32QmNY5BnpCIUamEQT9mBgDbWCdq8RFOD285TVM5V5reMEY5OUMj3shkCThg+q1fggr3hIW+SzczFqKGHyDtYqQAO4HXsZFmLH3i3rjykcEtKixEGdJadfyV0IznyJpx+8xEatZLRj0ifNocIww8XTzHlmKynArtek6CHyV3EW3mFopVlMu4ZeQoyBUUttPomQQmAG+EKWNK7rRvX80k6nk1rHL+VIfn4pDbMBCZWiLNpfCFUA+G/8+0PBP9704FFXRs4j7lrkwlFTiV1/IvHqNuC+zK3EFuEUmRTmN36OtbAhcuYcLZ0435CS9OZcby5vgUsCXe4fCYwlGuGxGtLLmIZciKmTlFqM2ysA1i3SW1USbMkiQPAWkxcyuNKkQTQgoTE3db4zMH7dzqobzsda3i/SW7Mz13zfunjROFxQiNfxiiYgjShk5xMa/M5mKb8dEWpuMFkj0sJaMSuO7GAAQUqxRQCA60L8zTXti0c9nPfLu56wDNA+577AiC7OMNyOL07fmcSVmSV43SSlqPvhfORi/HYQkUZK94XZYZDHIug6QterJ8xGCFZZwihVbp+7582fz+KfOJy4S71WF3xcu6dYxd6W8iMmEsiDro1ez2ntGFpySoQddg/9Cy4MqLiLL1RR6kGW42L+iS36WmsMFdvL43Rz0/WspTmx2dWTrYSo0mneVXuQ+EbpMqXiedeJ+Jpcj7hYA1KIgkFE0Likd5+8PbvSYWiu bHfVaP8x misz2kDDM9bXJgpe4yuKpE7Qo3t3Q39twfBqczgJCuNsp6/i7gV1PcmAuFazcTJido1YynZCvnb/407ZsvYeL6Z/8XmRnQPEOv5VLNcdHDOrGzxgc4cVkDPIGeWGVIEYPc+hUVoNqot/E10Ow0v/aDLnVaTU6VVLbqBrnJleTw6IX+Sgw7mYblCi88aud/8Mpg2Q+h+Z8nY9FUhisHtf7poNGljLRkX2iRgJ+CAmRHu9R+RGsGx/QStfdk3umL9h/ISqCx4NgrUzFKwAdI3TPfJ6EP6WhErO7v8rKTPz0kJGNvShYQAVp4y4x21spYriHklSI/YHV02A8bZ1VkcoJOUkkb6Tsk+UHHvmNfsywY+X+YhtYQ72PBJrTwspT2joE04OIOH5HQBxCT5jHSb+hjn6jXsctULsfmGBTtUqhzS7LXBiwaWOeFPqLg8UYKeXmDMVumMnlCXBMoVyGVcY9xz18Q6CbPiD9LL8HqJQILK6V96OMLHdIV9N/WB1ffJw567uYv1znHia3hPcSfP3uDLdh+RsDI+7Z7qDeh6OxGbQM0MWNIHSUWGD0kxAzC0KGD2lKO0vytNF2L6WyaRHrSH3+xjuq5c0eAWDNT9NSfvs8G1o6GI519MeXnclFuyBGRE2NCOJWSDafVeVoNMbw9u/DSZULEUpqmoSwnnXDFhKxIaMTIG0aCWgA7LrVKtRRRogNIqZaUAJ+59Rvm9JxyzEqow== 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 | 79 ++++++++++++++++++++++++++-------------- include/linux/kvm_host.h | 5 +++ virt/kvm/kvm_main.c | 5 --- 3 files changed, 57 insertions(+), 32 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index b6c0acb2311c..d57a70f19aac 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,24 +1535,30 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return ret; } + mmap_read_lock(current->mm); + /* * Let's check if we will get back a huge page backed by hugetlbfs, or * get block mapping for device MMIO region. */ - mmap_read_lock(current->mm); - vma = vma_lookup(current->mm, hva); - if (unlikely(!vma)) { - kvm_err("Failed to find VMA for hva 0x%lx\n", hva); - mmap_read_unlock(current->mm); - return -EFAULT; - } + if (!is_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; + } - /* - * logging_active is guaranteed to never be true for VM_PFNMAP - * memslots. - */ - if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) - return -EFAULT; + /* + * logging_active is guaranteed to never be true for VM_PFNMAP + * memslots. + */ + if (WARN_ON_ONCE(logging_active && (vma->vm_flags & VM_PFNMAP))) + return -EFAULT; + + vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; + mte_allowed = kvm_vma_mte_allowed(vma); + } if (force_pte) vma_shift = PAGE_SHIFT; @@ -1597,18 +1628,13 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, ipa &= ~(vma_pagesize - 1); } - gfn = ipa >> PAGE_SHIFT; - mte_allowed = kvm_vma_mte_allowed(vma); - - vfio_allow_any_uc = vma->vm_flags & VM_ALLOW_ANY_UNCACHED; - /* Don't use the VMA after the unlock -- it may have vanished */ vma = NULL; /* * Read mmu_invalidate_seq so that KVM can detect if the results of - * vma_lookup() or __kvm_faultin_pfn() become stale prior to - * acquiring kvm->mmu_lock. + * vma_lookup() or faultin_pfn() become stale prior to acquiring + * kvm->mmu_lock. * * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs * with the smp_wmb() in kvm_mmu_invalidate_end(). @@ -1616,8 +1642,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 83f65c910ccb..04f998476bf9 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1882,6 +1882,11 @@ static inline int memslot_id(struct kvm *kvm, gfn_t gfn) return gfn_to_memslot(kvm, gfn)->id; } +static inline bool memslot_is_readonly(const struct kvm_memory_slot *slot) +{ + return slot->flags & KVM_MEM_READONLY; +} + static inline gfn_t hva_to_gfn_memslot(unsigned long hva, struct kvm_memory_slot *slot) { diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 38f0f402ea46..3e40acb9f5c0 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2624,11 +2624,6 @@ unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn) return size; } -static bool memslot_is_readonly(const struct kvm_memory_slot *slot) -{ - return slot->flags & KVM_MEM_READONLY; -} - static unsigned long __gfn_to_hva_many(const struct kvm_memory_slot *slot, gfn_t gfn, gfn_t *nr_pages, bool write) { From patchwork Tue Feb 18 17:24:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980319 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 78B83C021AF for ; Tue, 18 Feb 2025 17:25:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93C3928016B; Tue, 18 Feb 2025 12:25:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 89E1E280169; Tue, 18 Feb 2025 12:25:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 656B028016B; Tue, 18 Feb 2025 12:25:25 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 34754280169 for ; Tue, 18 Feb 2025 12:25:25 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id E6F54AF598 for ; Tue, 18 Feb 2025 17:25:24 +0000 (UTC) X-FDA: 83133741768.13.0757478 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf03.hostedemail.com (Postfix) with ESMTP id 1D8962000B for ; Tue, 18 Feb 2025 17:25:22 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=E9H2neR6; spf=pass (imf03.hostedemail.com: domain of 3gcK0ZwUKCB4N4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3gcK0ZwUKCB4N4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739899523; 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=DDENpaoS5GaJB9ptDxeQYRENejUKqLMRn7e7USx5uGM=; b=E1j8sRvfj7xv7TcUmua08dadv2cKzY6NK1eYCQawvrZmUWc/Kq4j+SW0yL+N8KxWNZtvK4 falhoy8ViNpMx2Sjw9Rr/VQ4SYPvbOvQw4WkjD9hn6cKn58kcu1Nzp8XRGKO3BtLczPU85 xZvOmjBx52BG27nVnlE7WwrcYSItCo4= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=E9H2neR6; spf=pass (imf03.hostedemail.com: domain of 3gcK0ZwUKCB4N4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3gcK0ZwUKCB4N4554AIIAF8.6IGFCHOR-GGEP46E.ILA@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899523; a=rsa-sha256; cv=none; b=C4KV5APs7rp7GTVStIa1y8ijII8mNebTa0x57z5eLZTCXaZYsfg360+Ifl9yYMZ/XIuLWL UWWVMp8yJipfhoU0wQW0iQPD7RFznChB9fHnBmic40xa8wAl99q1kLAVzS2VFxeS0ePT+p 9yJi2IeaGyXxg0mBLEUsIChBQ8KlgJk= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-38f2f438fb6so4836668f8f.1 for ; Tue, 18 Feb 2025 09:25:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899522; x=1740504322; 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=DDENpaoS5GaJB9ptDxeQYRENejUKqLMRn7e7USx5uGM=; b=E9H2neR6cBsx+sqbmyxkdV0LnRyGUY9oKLQfYl7dgkf5iC+jqyUudeUFziaCxBVtu3 FOH3Onp6wyOGKXOMTD/2bo7jftz2LVrSH4QQKevXZPGnVp8RT0Lyq3sCY3+BA17dNj1q /JvOtIvgrs2ZFyHHF0pu8d40A0wJyZML1RXv4ASiqGp9I0RnN2miOEV94ncSU00GeYzo EZsSqUZn4Uh+xUnM5gHlaBhTYgVnDNFahLzoU+mK66BJDE3xNrWm9t9SeHwmjWc6AQKn psjkMVK0JXxloLoHU8cd/92hbUmPBVouYVEEvJ7jrG7gyArhCY2jnud/0FZUaftWDUZ5 cjnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899522; x=1740504322; 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=DDENpaoS5GaJB9ptDxeQYRENejUKqLMRn7e7USx5uGM=; b=WACUWLrvfm4+QoPR/kMJZNDpMT6TsCZX0UJ0beddM3PK24C09HsJu34tpe/q7MExda bcl80GLIbozf0rbkwcMf5t1SfJlA2LZjWwEyjnXb0nWgb2r3UswCHGKc0HOPaXvi5+sB 8GWd0XgR+7wcDoZUSOUjJnDNGDKBKwu7np18R0jJndxKRmbyoqSdfLSr+xQtR3iNCkz9 R3DHnIX3auSdyrki/jp1cRFq1WZuxXv2rFqFNMrna+B7Mr9QiSG8mHl51384/LS3spbA 8PFZ3byWNalfL0E28Xr9Vgb8NfzdeViGCVgVgipT+f150qccqK7jbPzUkKXjrQVpQXgG /NZg== X-Forwarded-Encrypted: i=1; AJvYcCWyQ1Fy/IaiHNPHyu47WJC+Rj5JuGn6sfsovMjgLqZjDtjvwMHfqRT7tabSEmplJplhyUY+1vVA8w==@kvack.org X-Gm-Message-State: AOJu0YybOdgW+Csu5ieCsgnqtpQK5xscPA3vyAIHwducPFyQZZj7xFjA 1Vcl93cuKreO0buFFf4LjqVyuFdJ9QASOdbUhXKXjb4euiyyWd0XDbT/6e9HQCVkTKvC62NkWw= = X-Google-Smtp-Source: AGHT+IELudRwURLH4qpHIjMR5d1+/EyuvFQNnfb9f8/dkmRcuMFNx9He10X0M9rgLys8f9ePWvRLzu+maQ== X-Received: from wmbg18.prod.google.com ([2002:a05:600c:a412:b0:439:9438:468b]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:584d:0:b0:38d:dfb8:3679 with SMTP id ffacd0b85a97d-38f33f292e9mr12240320f8f.17.1739899521705; Tue, 18 Feb 2025 09:25:21 -0800 (PST) Date: Tue, 18 Feb 2025 17:24:59 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-10-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 1D8962000B X-Stat-Signature: t38n985x3785n7wpxmnayhqunhc17fmj X-HE-Tag: 1739899522-533535 X-HE-Meta: U2FsdGVkX19+wS+qF+jO2aIzq3QRnpS3gE1MGIGzv2ftuuJY/K5cwvMZ8iUgcd/+2GtPHMmraVLhwx3G2/ZYtGoEm+v81ZYnXzDLd0ceLI1UdNhFtpQb/dTTHyKmZXdClkzaS3Z8uNYJBq2MNzTHx0TKGAHrDhVc4dcNuxEuidAGovU8ONdXNEBeaqObfn2QAixjQhZ08t6JIwyh+WsQYufbHKED0Z+xHt0X6B4Xg2xUCSaT9cRU6pVq7yDv0Id4v8ljcNOrobKRzoXz7Dj75LvG5DuALMmHLI1GLKewo4P/izgFFXkbI3zizYXAWG80sRWkibgIxUUq+1LNziJpITwFSm5EbrooUMRg9W3Eng7WPKOo8EelP1GPFwteaggFqiS366p4II1C44oWB3Z3ACHxRUH6PUe2Jlh2bd3XFdtPO6ofZTNxmZazBnPOxa1/TLQUhboCr0KMMZbH8Ffsph5RX6sjP+bIIQZ7KshabSpaoMCIRIL1uIC5GCMbdaMwaQ7oeXKyvl5Xg32JfTcSp8PfqFbdM+C3ZWZ01VRYEO7zlb4q2ApiUC78x61coJ3iL8x7vvVsgSMTk1ECxaBgrCieadsbMB6kMzGhjmn8J7dHTJbFjum31xtaDrfa3ns5c89iuC/QiPZQeE7G6icbv+qtJYJXVOh6dbx3PEq4SOXaD6hn2dgRFJoexAkkcY+e8QegoESu8wz/NrdZHNzPRkOYLZeK4ig0rjTQnljO6qQeN5ZtEPvh7THexodQndHauYr2Eo1T1bJJssTZ3R2vs2nGjU49R5WJ5SMYQ+JRu8QDbaRzdaQOMI92mpCYKrP/rMmo8nLdD7KCncAZe/vA0vFynwO6TiPf/3DDw55bSY1ebN3QSSj4G7EuIRrrIjqje0er3UmJMN0qSXhR3Gy8AIyBmMqTEDJs+WTqfhSVH6Qu3QNevRiYV7/AcLViOMh1FYt3NQAfI0XdQZBDuI6 sIOtpR68 oQWQpkY6LDFv9+RhqTsoGPBd/M5RP5Qeu5CGEiK9l93KXwQ0OB5wCe63Vputz6f8bBUzqRIHHfHTAFkGIzhxJ4ZyGWHrmEgu1ivM75+gmQ9BIidKZVy6+xC6Ph3+FTms+NQxWKd/t8RihW4GLC5QsmOIM0k1Sng2aCiJq3VXxL2z90vzdhCedpaJhgb169ByQN2+Ji8pI7wUErs5SiMOAMnbitSSdCXbVVszMO8U0+Bz6/O1S0umNil88rY4jRaN+cJt4ceKfgKPM4ZnlZYUTsWdACDr1uRRdjCwEkNnJW+vgsMQVr6MvpNeIsBgFpdgZZgrleCVykDMyW0zWu+sN/GugfiCcu51b+QakNyojTRXIje7mdXqdehaAxPfycNCTpeXO5MqkKao7skq2is7vtGlsWq6ladmhPkyOAo24K9irZRx4b+qgblgXQOrVYkaZVdxDuNyvEHLPvaa6bHuMfBwFJmD8tTqSaCqTX2j39GPhQVdwl6ZGkuWkyBiylO/EqffURr5cw85W4QGIODAlytpsjGzwzGYSb6t/NnVByt43QiBlTzDYPdQdhI1Gy5gDvEVa3ukSttHQi9d+V9j6TLE2PUvbSGqh56CUWwAzDszfvCx4LuhQvIasdc2UXQapqE7kL6NtLlti8vluGn/w0MF99kZt2nIcd0At/iXHkDMQH0IEEiaAA4d3gQiuFYVvA1j9 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 3a7ec98ef123..e722a9982647 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 Tue Feb 18 17:25:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13980320 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 CB5DEC021AD for ; Tue, 18 Feb 2025 17:25:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AEF5128016C; Tue, 18 Feb 2025 12:25:27 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A73C6280169; Tue, 18 Feb 2025 12:25:27 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A0DA28016C; Tue, 18 Feb 2025 12:25:27 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 65AB8280169 for ; Tue, 18 Feb 2025 12:25:27 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 214D41601BD for ; Tue, 18 Feb 2025 17:25:27 +0000 (UTC) X-FDA: 83133741894.27.5D3C760 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf21.hostedemail.com (Postfix) with ESMTP id 430191C000C for ; Tue, 18 Feb 2025 17:25:25 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=KpGEm8AJ; spf=pass (imf21.hostedemail.com: domain of 3g8K0ZwUKCCAP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3g8K0ZwUKCCAP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739899525; 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=9GhkdiTtGRQx7HkZyWp1aLkTAfBUArmMth/ZSf0dJkM=; b=Gik45tvY6DA8RtHi682sqBKbehsi3lvfpPe3LnmHzeNR7mB1dA9kVF55dy6TPvedMNbu2K 9zdFLzLO1546jRPOHLEY/FXBqLI4kRAbqLsivyONSRGYW1442lBaiLb3KuUbhUF94Yh/fi ABcNsXReUYsfIPLneA4nU/97UTXpy00= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=KpGEm8AJ; spf=pass (imf21.hostedemail.com: domain of 3g8K0ZwUKCCAP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3g8K0ZwUKCCAP6776CKKCHA.8KIHEJQT-IIGR68G.KNC@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739899525; a=rsa-sha256; cv=none; b=pTf61i08HccuOa0Irz2tRDAGc3FDRmNWMK/19FaETd+J4MudI5bzK46Jc6MW2SoJarXUP4 aNUVEKCxlXNlNqGKcPH6aKLn51wQFhOh41IbPID7xqPcFyYaXrR/tiicYHWDqzXPznU/qS 5t7jQBbCQVlOQNVI+FG5PcCRXIzZ/Rg= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-4394c489babso30553775e9.1 for ; Tue, 18 Feb 2025 09:25:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739899524; x=1740504324; 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=9GhkdiTtGRQx7HkZyWp1aLkTAfBUArmMth/ZSf0dJkM=; b=KpGEm8AJ8lIEo4Ls/UReJmslWxw3kJWM26SwxleVhXK1V2gOWjL1OjCbUMS1at9kb3 joZUBnCbVoghI6vsRHqyRsY5PAYo4UUn8KLWsCbTsnBmoGbUH4KWjhfiVT5jeCV7yDuz GrHkN3M6s7CttZ2qG+EJ7oL78zOtA4Q1Qex2ZFqsX0cdmCAfNam/g6PjwzSktTniflAz LvXCmME02Bp9s2FfQkjjTCgBYR25stvrrGaFa1W/3BgMTPndEwpp4F6lIpmtmyPYiPvd vviUXtEwCfj4hoDosirOzrEm4wscycpBp/p+I+QkRIeocODc95tK3nwzFEFd8iV8lxn2 l0Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739899524; x=1740504324; 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=9GhkdiTtGRQx7HkZyWp1aLkTAfBUArmMth/ZSf0dJkM=; b=Q8ahKOC1kUXZTtc4rrTCAkLWucnWTZ0Qwb1Zk1ZDuY7v5iBq0PWQjWy3d+Fh06Zm7R qdcdO+EwlJJOYx6ExYzfnvQH6cSCdDRHAEzhnZ4Tm6z7dgVLSeeYcX9XEfcDol6C6vvL jXocIplZ+BHmgJ/EIu7bb2M/LzFDcfdUyqFiy8AGIyq+osPhdIshV0z3wOo6VvNK0n+R L3HIucTXxHng6R1y4Sa3Wi1HrRy2hPoZc5WJW6iWzUoYymTo3wXfCDAt1J8dwwYEynDC Zmq0lMLxi5ACljuol2J3TwFpx46YAVw767PrSypmjIX4eBXHE42d9n4YmgEy9bLbNP39 miAw== X-Forwarded-Encrypted: i=1; AJvYcCUBgnhuw3VEhkcsK4gdhv8OaVX/lgpOx0PDhQ34C/HEJZGekyaIDN7MnveK6uyrvlKw0KSsdgwMcg==@kvack.org X-Gm-Message-State: AOJu0YyhFcp9MtEx6cCRFQuXgmCjjLbu5CSm8J6DFI6ZBhy/c/YNEVM4 owwuMbBekoRh2AlREbX62oOOpWXalb1j2h6FD/fiuT/uShPUWL2s6dAdij7p5tnEYQDoK4eDeA= = X-Google-Smtp-Source: AGHT+IEV4feF4d+8DAbHzGAlutoYlJf9k+yhRtIv1D+yKbeY7XS93jwvPa8IZZ9GBcPiztNTCq3yl8l6ig== X-Received: from wmbec10.prod.google.com ([2002:a05:600c:610a:b0:439:9379:38c7]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c83:b0:439:9828:c44b with SMTP id 5b1f17b1804b1-4399828c601mr19285985e9.14.1739899523888; Tue, 18 Feb 2025 09:25:23 -0800 (PST) Date: Tue, 18 Feb 2025 17:25:00 +0000 In-Reply-To: <20250218172500.807733-1-tabba@google.com> Mime-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218172500.807733-11-tabba@google.com> Subject: [PATCH v4 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, tabba@google.com X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 430191C000C X-Stat-Signature: mham3yxgazcndahprzfbiwonfqyu3hgd X-HE-Tag: 1739899525-428370 X-HE-Meta: U2FsdGVkX18ZnW6wiS8IOzeAY2HxJ//wHNCTCuIs4tXd0gLAypb8QCasKYgSrCxghSMfNkJj9djn7X3PGqf2XsxLtmF2cmldVHUHkTiwJubxRIDS1VfKFc0q1SKuYkW8YPfbqPbYazGXgvwKxin963tTicxKk24ErEBVeLDUmrGy7FBFwhFJdWujT6LMfS3NSZIJGJ48HZV8lfgkOmiDrn4UY7n7t+YhqTuaE4mg6JihzEj5tBVp82COWP/HWSxSe9k4QeUHjmqX4kDl7uRm70P2gsbC4FmuzS1jjh3I7AYR6NTbyKlanxejUtgkuIi7N7AJmNHTgU69wAUuEbtEb8OQiyYaMeG6pvZWGTO3c/sHVxACszAfLebsWwqkcpO4ZkD9d4RAY2IhTCsL29M+1iKAinhtk6U1EI6uRjyXOPI3/aX3+PqrOyvJ68oW0CHlgd+GQLB6l7yyt5bRmrMN4n575NQwDzJs1rVoIY/M3N4X4wAAEVzyfMJ5SSvRa+kg8yYXmqYATERv9qVX2hpNJmQdqn53wFhJo9hfDqvxgCrtIMlJkijui3uz3EbEGdNRbdBr3QibPSIpow3AYDxuv0K587Clsxs4nCPux1RnXvPnC30aKMdW2Iz7bZeVBzDCSxjSdoaj2XlE6pxmQdICNklSuFZk9/L6mbHAxYma4EAtATkgeYl8nWwLfvLVzIRoqxWKVZmxuV7WhrUTdBVoEj87DR1eBBg3NFJN/wo4zTZeRHhQ8CSfHtG0yXxxxnSiTjYk6JsceobJjhhav1RE8vyIfL3RChJJzgRBTUoPX1mBbCeX9YmvKoXeUAupAjhxGmdIFM6IPMOEQP1sUUIdjAZSFPQqiJsImcJv5Jliky8HCKcPPOoOmmTrD/Jz5ayV1uOUL0ItusOhEfxdPW6DLaiv4gMmz9+6dOfecsg9fBub5mw24geV0nuJDYgtat1wuDPhePd1NtOr6kDVheU 0AfjGumv IFDYXTLqHySfAhjb8wiMM8MMmCfJZeP5UPCtyLtkwBmEH6dnqujZc2vfT0crgTqNPixPcsBaA62w+8wW6Stq1BH3BgepIPnx/pwM8xD9s3phTWfJw7XgVGXd0IDbzj4Exma2zm3ZzL6+PqSJz866SMMHjXIXQPZWk4BVMcYjZ8os6boolZYLTx1omAu3Op3OoC+0KcuRgoS+vSqZQ8slwuyWhgLXdIrhYP0Srhutu2FHWFU01TdVjY82ayWjg0zHEjQeDgmJlFuNfdDok8yHufmyiMoBG+ZT16XuswLlg7E+gTkiq7ws6od94xk3N8vxcKaxgf9M11tzG9jqKzuhlBejQgHXC3HoTlIYAYw2sHpG3YTrmMYrur1hL6jBkk77QIcsaXYufEN0UxklROTN5RDriRUYspxXpgL1Lc9Mfh0mHE1lUrwbodLyHNG+8EQaDU3iH7JV0uNk9z7onLiRUa+AN+R+csPRPwlX36y29xU3lXSWy27g482KCJZ14EzPB8frxPwUC901beLVI+kD5kCFNfUP2A3c6oOwZcsIaPPgIE9QFdTvyR4PHlZGRnI059QmSXKf98QHATzedUPz7m9A/W74BDpBjQohbmuHChL2ZR6HNoI3XbZOLnkZWmTbaCstU75aiOGAeI0b32mMsyHpqXh87IiYTz3LmL02WMA44u0SAAe3Et+Iy25edwAjy7LMw 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; }