From mboxrd@z Thu Jan 1 00:00:00 1970 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 0D941C677C4 for ; Wed, 11 Jun 2025 13:34:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2A63E6B00AE; Wed, 11 Jun 2025 09:34:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2577F6B00AF; Wed, 11 Jun 2025 09:34:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 148BC6B00B0; Wed, 11 Jun 2025 09:34:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id E1D686B00AE for ; Wed, 11 Jun 2025 09:34:08 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id A352880D06 for ; Wed, 11 Jun 2025 13:34:08 +0000 (UTC) X-FDA: 83543213376.30.3759995 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf07.hostedemail.com (Postfix) with ESMTP id C30BE40002 for ; Wed, 11 Jun 2025 13:34:06 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="hL4rV/II"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf07.hostedemail.com: domain of 3zYVJaAUKCEg3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3zYVJaAUKCEg3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749648846; 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=1XR59PTGuiW1gb55TNwkuIBSMjZG1XsBaxGQqCed/os=; b=7v2kNEZtpm3pisTJe8MZ9qZFLn5Yd1z3YhMLY4rv8NY1yplhKHL5pIMLPu0T/BNyvLw8a+ nHIj5gTFHGp2mOGVkxLArNOJnAUBw3cd4bPc5o87bsGpno34zGNgz8r9e8jxdDQCrB7O6g YQPHRwOVOt1XF58GFJfAg9/yjVFvEgI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1749648846; a=rsa-sha256; cv=none; b=ztBCBxX3CHRQS8ibFom9kfdYAO/NCvLm1z/wvWWLh3StIaLSW7Xp++Laz76dYeHbqcasPQ LrQPx2Zn/VJW17hPnB6hyxUhKE2F/NKMhQxISYYaGorkrWJt6avas8SdkxkJY0Vj0V9s3m wDOcX2hfEfIRwtXE4Zo7gXSI+LU4TME= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="hL4rV/II"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf07.hostedemail.com: domain of 3zYVJaAUKCEg3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=3zYVJaAUKCEg3kllkqyyqvo.mywvsx47-wwu5kmu.y1q@flex--tabba.bounces.google.com Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-450df53d461so57766525e9.1 for ; Wed, 11 Jun 2025 06:34:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749648845; x=1750253645; 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=1XR59PTGuiW1gb55TNwkuIBSMjZG1XsBaxGQqCed/os=; b=hL4rV/IInOWUwd4wO8zBjXMIslWGv8WOnz0eMpKD9upMGgkXWwl20gNnzN5FoALPlo Bksac7ahgQuGUmqaNzDowEgXvLvUGOR90ldjnQtA6uVXHQtk9h8fAe77hdkgP6eLUa1M faq+EFP9YojigWqYPkb247/1Mnd/ejOvoU0WW9ghoAu7slBsPhv6tgyukX4bk9U1xFju G9ysdP2lbBd1fPH9sJpctw5A8qMs/0F2UcIQQ5c+Ji+8aWqM434If8F1j0WpOmRlVMo3 9EkfqKkmVCMhKVNHsxi+m5GutPt6umtvChDKjxjeNWr7R8819ie+78O9x6eCl6yGfnSj NS7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749648845; x=1750253645; 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=1XR59PTGuiW1gb55TNwkuIBSMjZG1XsBaxGQqCed/os=; b=DfsFnxeSVE8huVDowslMjR0Iv++FFSFjsR0jIBj5uIaqRu1wE/23LnxQO+cja16YX+ gSEEJVYBbHZP6BW4DBsYo+mjZJc/pB2ugPxN8OeHHC1IMakjL4bCF2xwOc8HapM4hP4i ZIF1B2q+wTZDaw/V2E92apy6iRMQi5Sit2t9P/mb8MrKWnE7B7wfF1K16APmWf1sg2ff iopu3lD2P7kDd/RKhWWuqUrGANFyr8aBN0bQus0duuDwBx34AOPSoKrAQ2rNmXTJIXL3 ycuGAJzkHbZula8Zc+ZVyvheuzuHPDINiXtcS1zI4KY6zajOLl1dnLYCHV/SpW0O/mIT QOdg== X-Forwarded-Encrypted: i=1; AJvYcCWO7TD5hJF/2yv8fGJXEkkLgQ+luz8QZrhSHYWqjLnWmIuKv0/b1h/cknuJHSNuQDovUGy8YyXe8Q==@kvack.org X-Gm-Message-State: AOJu0Ywa+RBRx7S033yRoIvQ7qykFje9ZcnQlZzXqvADkOGBOxNJS0O6 woFrIddxEcMikC4dze9wmfWMSZXKrRLLV6C4pLY7s9UgDnwvVcym82Q4PBVTGFooGU+1UCFsPWR b0A== X-Google-Smtp-Source: AGHT+IEfAr/l95Kf+rwSAj9mppIOYExWAEsd3FitYHNfOu71BGp8Mi+xQZ98YDO3SYy4dT9bCQ1C1E+czA== X-Received: from wmbep25.prod.google.com ([2002:a05:600c:8419:b0:442:ea0c:c453]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:6986:b0:439:9424:1b70 with SMTP id 5b1f17b1804b1-45324f6a144mr26676635e9.30.1749648845441; Wed, 11 Jun 2025 06:34:05 -0700 (PDT) Date: Wed, 11 Jun 2025 14:33:28 +0100 In-Reply-To: <20250611133330.1514028-1-tabba@google.com> Mime-Version: 1.0 References: <20250611133330.1514028-1-tabba@google.com> X-Mailer: git-send-email 2.50.0.rc0.642.g800a2b2222-goog Message-ID: <20250611133330.1514028-17-tabba@google.com> Subject: [PATCH v12 16/18] KVM: Introduce the KVM capability KVM_CAP_GMEM_SHARED_MEM From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, kvmarm@lists.linux.dev Cc: pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com, pankaj.gupta@amd.com, ira.weiny@intel.com, tabba@google.com Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: 7jbsd7rbngcfmmuddypi74orss3ikrnk X-Rspamd-Queue-Id: C30BE40002 X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1749648846-677389 X-HE-Meta: U2FsdGVkX18bulrz6nNEmDtSeAlbFlIrsVkS4Uf3Dn3ZG8HLmJKKueKhgVs20QIJ8NWYEGvTVgC1F+IwKAlHFSOo2DUKK6DTQ5mm8cPsgVg+g8D/D3IFUZbYNzo3j4tfuxoCDas6A2ABuk+D8Wt06tg/OYDyXrgNhVACQhxy3+YcY+QkxZr8wIu/rDBW0UeqOdwd6i0oLYrv3Xo37Gmcj7h/1CV+0Kc5uUQzz0EqP/xFoLr6EypR1XhWTGkQsXLyewloMg1Ah8NMftyURN7R3zYHQt9VzDOdVGWUtaSGxkzRsLQsYA09F/NSbE1ZB5sHJJF4lb1J+eeBN+MLkmKH/WNtACzN2/q0+eJOmDO3zoEFzGhhaXZY2WGmpidWPv0SPvu1C7lfoePFvubNSrd1y27AVpCFOUKKCsmzcoStNmte7013uYwIOsAQU+9MESkQNc/J+oMx1Ujho8DjGLWhtMdIxltYYfH4UX0yKQ/QMBp4+nXx7ZDD3qpHUmFhuk08xDmTTME9qY0VHkoQ6mR81KmUIp91aBw0XDf6+q4PkQKxuUsqcqn+XzyEIJB/pgh0ktREEEuYIQ0wX1Cgfr5rgf3vmh0+XE18U1ZbkEaYUU7kITASNYeQqSbZbUBGqV6PoWRfyhw/jB5ofaLDwRqxYewLXmRdKamqLdDClVlZAnVOeD4GbX+fR7swaw1u64O6Co2wZDT4d8tTRL5uXnUe6LxhoJtwT6kCSflbcK985wVEEyWcHXkcbnjPfbH0ZfTpsb8NhIhBdSmwuW8YwaKrHEvtNFI7tAyNGJZ9AnF251sVDSCpyPsQ9Y3UtWlodLJaYTBEw3IsfBSBH6/9V3qASGbvo3MVOLWIYtAksxCV7DdT346kBWhXO3qg+swUmEdgmyN3Lqb8KhrOsJjgycSpFR/NkhKQEYfo8p6usEjULNg03nD+H8GXMgpV0t/OsG2QNLhMtYaSYqZCtb0deun 7YzJ5LxG C3qzz+xLaHE7o65R7MR6Dj4zlNx/C4Vxt2KBTkfZ55LDloYetvHLWLBBwcAlJNzUXvz6KUFgExkZOF2ojiUxz91Es9CrVSrqw8Mgf3PaUPVmPue/Le8z2ohCLZvXqJ+qjHFljEkJslfjrTDBautjMNdkRMnT893upWbmTAF/IyK1HcgkXOv5wkfRIg81VgyZWIvacy2d8ux2QLdMEZWszUn8QcBzEQXSFMGsbXKB/1FS1LKqNs5HwdRmMDhB5hVS7Xq/6trt3azVbOgYJgY3aU2+GjQ90Y9VTvLKYsUz3x1LCSQG8PfB+/LXqJE0lxRSolQjuX6G/SPtV8jL1TA4eEg2iE9FbpPfqRxIDomI7SHEQSzPq5VdUE5GPJQhTNttx232me2e28vKiQugcje/5wPKSFY0788iecrGNQ/LfTfhLQTs0gB2mX7vzFw+f1q5+bSsDqXFIqjYiudrYVjT0O+wM/SLJAKqpsj1lNE2kiAyWWon2ABcDDmIvJ0WsAcVc8esuDTv522qfO20vRlT9bwOYnLSIPyBxq0H+jRqC1/54LSTmpd6W4gnTeQ7hjxA1QrX3RO7VSAkNj4LUPxf0OCzXkfY+D+3WEeWqEDJti3tixx+vXG1Ee2M6zLCBrPRP3M3ELu+Winyd7g+PaILkYv8J0jDeYN3+rApppGzvrjL6jxY= 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: This patch introduces the KVM capability KVM_CAP_GMEM_SHARED_MEM, which indicates that guest_memfd supports shared memory (when enabled by the flag). This support is limited to certain VM types, determined per architecture. This patch also updates the KVM documentation with details on the new capability, flag, and other information about support for shared memory in guest_memfd. Reviewed-by: David Hildenbrand Reviewed-by: Gavin Shan Signed-off-by: Fuad Tabba --- Documentation/virt/kvm/api.rst | 9 +++++++++ include/uapi/linux/kvm.h | 1 + virt/kvm/kvm_main.c | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index 1bd2d42e6424..4ef3d8482000 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -6407,6 +6407,15 @@ most one mapping per page, i.e. binding multiple memory regions to a single guest_memfd range is not allowed (any number of memory regions can be bound to a single guest_memfd file, but the bound ranges must not overlap). +When the capability KVM_CAP_GMEM_SHARED_MEM is supported, the 'flags' field +supports GUEST_MEMFD_FLAG_SUPPORT_SHARED. Setting this flag on guest_memfd +creation enables mmap() and faulting of guest_memfd memory to host userspace. + +When the KVM MMU performs a PFN lookup to service a guest fault and the backing +guest_memfd has the GUEST_MEMFD_FLAG_SUPPORT_SHARED set, then the fault will +always be consumed from guest_memfd, regardless of whether it is a shared or a +private fault. + See KVM_SET_USER_MEMORY_REGION2 for additional details. 4.143 KVM_PRE_FAULT_MEMORY diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index cb19150fd595..c74cf8f73337 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -934,6 +934,7 @@ struct kvm_enable_cap { #define KVM_CAP_ARM_EL2 240 #define KVM_CAP_ARM_EL2_E2H0 241 #define KVM_CAP_RISCV_MP_STATE_RESET 242 +#define KVM_CAP_GMEM_SHARED_MEM 243 struct kvm_irq_routing_irqchip { __u32 irqchip; diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index d41bcc6a78b0..441c9b53b876 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4913,6 +4913,10 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #ifdef CONFIG_KVM_GMEM case KVM_CAP_GUEST_MEMFD: return !kvm || kvm_arch_supports_gmem(kvm); +#endif +#ifdef CONFIG_KVM_GMEM_SHARED_MEM + case KVM_CAP_GMEM_SHARED_MEM: + return !kvm || kvm_arch_supports_gmem_shared_mem(kvm); #endif default: break; -- 2.50.0.rc0.642.g800a2b2222-goog