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 4C635C83F1B for ; Fri, 11 Jul 2025 14:25:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF4BD6B0099; Fri, 11 Jul 2025 10:25:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CCC346B009C; Fri, 11 Jul 2025 10:25:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE1CB6B00A1; Fri, 11 Jul 2025 10:25:21 -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 AFEE06B0099 for ; Fri, 11 Jul 2025 10:25:21 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 9A36210C996 for ; Fri, 11 Jul 2025 14:25:20 +0000 (UTC) X-FDA: 83652206400.29.7ADAF41 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf09.hostedemail.com (Postfix) with ESMTP id 9C820140005 for ; Fri, 11 Jul 2025 14:25:18 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=edeIEV48; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of maz@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=maz@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752243918; a=rsa-sha256; cv=none; b=fP6udQgcfFfJuFmisfbZ5b4TRILXkzNM1OFgAI1kokNccxhtVaj5plL41fUA/j2zneyDBo LhDdsracbwB2xZx375oCzggZmEx0Zj9bahjCPVUrmKK+kIX+KFqhNAop3fzo14xS3uKi81 906HeW0uPEVIxNvDuyZ89Ark8h3E5nY= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=edeIEV48; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of maz@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=maz@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752243918; 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=cm6272yo6QmftmLrExn//DhppmoVqTeEHoULuWqvav8=; b=AVFwEoMWE7VmSyFAk69yq4+jyS9gI4Ydh1O1Kb0o+BBlpj5BmfZ+7SdccqYvl/5gOyhRiM VJ+AcFtgr5xWTQTXF+r0AF6AwGsWiFCZQrzclJWAJDcYGcXpkFsyJ3FSesFoJpPCPuNAr7 xycTACWEPbj8mYzgwpYSQpcYX1qsK9Y= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 94A705C550D; Fri, 11 Jul 2025 14:25:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6E4DC4CEED; Fri, 11 Jul 2025 14:25:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752243917; bh=mT92Yf1qT91lUyIxzQhq7R8nLdUDilbEyTBw9eze26A=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=edeIEV488UPbnlYE7PWZZWbOmUSjBS8wRFsDqD2aTeIr9m6LdZ1lnxG0DXFJfuWbC RAeA8al1VK+smMmAmWqjBJHhW2SiWIivOLgMN6pc8f+CjbIVb6pT3Vmo/86DsQ61k6 HhG59iKQMRWFDYchTY3Ww8GkWetdZfZl0OtMaBxLvgvaYtI+3LlXyzcVcLDsx7dQHO cppRrvXep/BfaFomrHZYAeUE5EKIbZk7lkuSJ0SLUATy9GRT/uMO7nZdbbkMTgJQuI YztNfC/M8HWkcoo3G/HvumY4fM/4fahY2Ian2ggRB0c/t50Ln7XVfVLqXgWvmyyzhZ XvuUi2yw1HLvg== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1uaEgc-00Eu7B-9D; Fri, 11 Jul 2025 15:25:14 +0100 Date: Fri, 11 Jul 2025 15:25:13 +0100 Message-ID: <868qkuajp2.wl-maz@kernel.org> From: Marc Zyngier To: Fuad Tabba Cc: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, kvmarm@lists.linux.dev, 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, 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 Subject: Re: [PATCH v13 17/20] KVM: arm64: Enable host mapping of shared guest_memfd memory In-Reply-To: <20250709105946.4009897-18-tabba@google.com> References: <20250709105946.4009897-1-tabba@google.com> <20250709105946.4009897-18-tabba@google.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/30.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: tabba@google.com, kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, kvmarm@lists.linux.dev, 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, qu ic_pderr in@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, 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 X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-Rspamd-Queue-Id: 9C820140005 X-Stat-Signature: 3uqq5fg3ya7tuzh356bxw1ys99e4w6b8 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1752243918-529903 X-HE-Meta: U2FsdGVkX19RFHk3279zhro6ZY4cso1H8+CjQQ2FdbB7TjozqS+D/5Ko0najpQbNf1MFc+VaOtAbrfKf2bKBdF/0g6TDWr8KQddZEGb48HZRrQpSnvpSfylfFDx0azp4q0yByR8wlZ+GsAb/saQLIRYNaB8gDAiSpC3kNheoqDAgGmJCC4UPPjHxtTS0vVGJ1HV0rtIcTkoeiXkrVaOh9koRHXUx7NsManmNOm6RWWaMlVD+Xdb85DTlohOVvr+6ZfCgglgbz4ZjBGst6safrsDVISeFMWrf8rxglG/TNWshLkP8VBCfxspCxAx4ynaZR9LkGGJNZS+g89m6O5Z+Q70M5JKKYhAh4U+XPiQrrk6Ben+9vqA0QbVUytyO7wwW8mHNwHpCFvVHgVROszDNcAS1C6wmhJcYy/Zu59mQq9QX/NiN76BO+op2CUTcVlRjEGnIP2HmztFa1UTVhX0XM5It0/mE8rqBuG05G46+oHfzekJtZGS5LC1gXGd7VoluXUB/7LfVJUxMtQFrUw3F+fWV59LlqILxr4PphaBmGAn9jwl0gZ3sdDE/1yiCqP2hXMYJQvp/McwUBLGN4tRcKYoDYqn/iV9ELfSH27ZET9jc30LdfpJTbdEBdoSq6gg+we4zriCPnWE9CJPBuAJXX0rWkm4L5dZHuh8pPx3ioKSCWxrDgdpyxpgMa2pUF35T0V6oXmP4RlIy0pxC0CXD4juphJ093ErKIGahYNo8T8fQeLPS7+sTdPQnDDHbKzrwrocUpjCkocOgWO39E0iyHB2u16syDx7yvAJOSharCXKtX96kJzznvUtlqbOndiFoHSWwnKL+uXSQukARkebxtEbOGrYsIpS6kaxBS5JZHhWQLWY+n+00rULR62A160Ubf7yzTFGDPv/vdgoyXEpj9ebzuTTmcwlPg6XlDdNJq6w3CdtAwJkPsmemxcA3n9fjCP+OY5RdrlKYMTBZRNd t83wMzAv ITjHTEojWW+2/8UtZqryacLWsEqwUlCmoBoQqGuoQ72iorBTlLUFjV+sd2lbjoFck3FBJ2QUdnRgNXhxf3lddamN7D/ESbOi0Ovw570owqmMrJTSXIM1FvkOitazDHUDdo+HMY7cATGgVDNacFJ5vPLuMyT1f2tXeBwv6xqOJ5vdWWoHNI3SAGd2SKJ/7kJvlP13CRmCKnobK3l0H6196/9yaslwTYykweUqvlQt12Zko4ESmSsmxYwgIMOdq8WPZEqxgcEaMLSWzG/P1Dn+AoJtOtLR2+E/FfrsnVdUKOcsacpEcQfBsXWcgGMTC9EQUrEBDVV4xYwG9Ow0Tu+iIW9Yiaq80P6ElC6XADGbF5QGZyiT4GGdF3gph2kkd3/e3Hf6p 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: On Wed, 09 Jul 2025 11:59:43 +0100, Fuad Tabba wrote: > > Enable host userspace mmap support for guest_memfd-backed memory on > arm64. This change provides arm64 with the capability to map guest > memory at the host directly from guest_memfd: > > * Define kvm_arch_supports_gmem_mmap() for arm64: The > kvm_arch_supports_gmem_mmap() macro is defined for arm64 to be true if > CONFIG_KVM_GMEM_SUPPORTS_MMAP is enabled. For existing arm64 KVM VM > types that support guest_memfd, this enables them to use guest_memfd > with host userspace mappings. This provides a consistent behavior as > there are currently no arm64 CoCo VMs that rely on guest_memfd solely > for private, non-mappable memory. Future arm64 VM types can override > or restrict this behavior via the kvm_arch_supports_gmem_mmap() hook > if needed. > > * Select CONFIG_KVM_GMEM_SUPPORTS_MMAP in arm64 Kconfig. > > * Enforce KVM_MEMSLOT_GMEM_ONLY for guest_memfd on arm64: Compile and > runtime checks are added to ensure that if guest_memfd is enabled on > arm64, KVM_GMEM_SUPPORTS_MMAP must also be enabled. This means > guest_memfd-backed memory slots on arm64 are currently only supported > if they are intended for shared memory use cases (i.e., > kvm_memslot_is_gmem_only() is true). This design reflects the current > arm64 KVM ecosystem where guest_memfd is primarily being introduced > for VMs that support shared memory. > > Reviewed-by: James Houghton > Reviewed-by: Gavin Shan > Acked-by: David Hildenbrand > Signed-off-by: Fuad Tabba > --- > arch/arm64/include/asm/kvm_host.h | 4 ++++ > arch/arm64/kvm/Kconfig | 1 + > arch/arm64/kvm/mmu.c | 8 ++++++++ > 3 files changed, 13 insertions(+) > > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > index d27079968341..bd2af5470c66 100644 > --- a/arch/arm64/include/asm/kvm_host.h > +++ b/arch/arm64/include/asm/kvm_host.h > @@ -1675,5 +1675,9 @@ void compute_fgu(struct kvm *kvm, enum fgt_group_id fgt); > void get_reg_fixed_bits(struct kvm *kvm, enum vcpu_sysreg reg, u64 *res0, u64 *res1); > void check_feature_map(void); > > +#ifdef CONFIG_KVM_GMEM > +#define kvm_arch_supports_gmem(kvm) true > +#define kvm_arch_supports_gmem_mmap(kvm) IS_ENABLED(CONFIG_KVM_GMEM_SUPPORTS_MMAP) > +#endif > > #endif /* __ARM64_KVM_HOST_H__ */ > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig > index 713248f240e0..28539479f083 100644 > --- a/arch/arm64/kvm/Kconfig > +++ b/arch/arm64/kvm/Kconfig > @@ -37,6 +37,7 @@ menuconfig KVM > select HAVE_KVM_VCPU_RUN_PID_CHANGE > select SCHED_INFO > select GUEST_PERF_EVENTS if PERF_EVENTS > + select KVM_GMEM_SUPPORTS_MMAP > help > Support hosting virtualized guest machines. > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index 71f8b53683e7..b92ce4d9b4e0 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -2274,6 +2274,14 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, > if ((new->base_gfn + new->npages) > (kvm_phys_size(&kvm->arch.mmu) >> PAGE_SHIFT)) > return -EFAULT; > > + /* > + * Only support guest_memfd backed memslots with mappable memory, since > + * there aren't any CoCo VMs that support only private memory on arm64. > + */ > + BUILD_BUG_ON(IS_ENABLED(CONFIG_KVM_GMEM) && !IS_ENABLED(CONFIG_KVM_GMEM_SUPPORTS_MMAP)); > + if (kvm_slot_has_gmem(new) && !kvm_memslot_is_gmem_only(new)) > + return -EINVAL; > + > hva = new->userspace_addr; > reg_end = hva + (new->npages << PAGE_SHIFT); > Honestly, I don't see the point in making CONFIG_KVM_GMEM a buy in. We have *no* configurability for KVM/arm64, the only exception being the PMU support, and that has been a pain at every step of the way. Either KVM is enabled, and it comes with "batteries included", or it's not. Either way, we know exactly what we're getting, and it makes reproducing problems much easier. Thanks, M. -- Without deviation from the norm, progress is not possible.