Re: [PATCH v10 04/41] KVM: Enumerate support for PRIVATE memory iff kvm_arch_has_private_mem is defined
Xiaoyao Li <[email protected]>
| Newsgroups | dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-trace-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 8/8/2026 5:52 AM, Ackerley Tng via B4 Relay wrote: > From: Sean Christopherson <[email protected]> > > Explicitly guard reporting support for KVM_MEMORY_ATTRIBUTE_PRIVATE based > on kvm_arch_has_private_mem being #defined in anticipation of tracking > PRIVATE vs. SHARED state per-guest_memfd, not per-VM (to allow in-place > conversion). > > guest_memfd support for memory attributes is expected to be unconditional > to avoid yet more macros (all architectures that support guest_memfd are > expected to use per-gmem attributes at some point), at which point > enumerating support KVM_MEMORY_ATTRIBUTE_PRIVATE based solely on memory > attributes being supported by KVM at-large would result in a system-scope > check (NULL @kvm) over-reporting support on arm64. > > Give architectures full control over overriding the default definition of > kvm_arch_has_private_mem() by removing the coupling with > CONFIG_KVM_VM_MEMORY_ATTRIBUTES. > > In a later patch, kvm_arch_has_private_mem() will be defined based on > whether architectural features are compiled in, and made orthogonal to > CONFIG_KVM_VM_MEMORY_ATTRIBUTES. > > Signed-off-by: Sean Christopherson <[email protected]> > Reviewed-by: Fuad Tabba <[email protected]> > Reviewed-by: Binbin Wu <[email protected]> > Tested-by: Shivank Garg <[email protected]> > Signed-off-by: Ackerley Tng <[email protected]> Reviewed-by: Xiaoyao Li <[email protected]> > --- > include/linux/kvm_host.h | 2 +- > virt/kvm/kvm_main.c | 2 ++ > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 3e86cdd00e59b..e3666d0b40b74 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -722,7 +722,7 @@ static inline int kvm_arch_vcpu_memslots_id(struct kvm_vcpu *vcpu) > } > #endif > > -#ifndef CONFIG_KVM_VM_MEMORY_ATTRIBUTES > +#ifndef kvm_arch_has_private_mem > static inline bool kvm_arch_has_private_mem(struct kvm *kvm) > { > return false; > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index e3a77d1e6d8ae..560ff05e95959 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -2422,8 +2422,10 @@ static int kvm_vm_ioctl_clear_dirty_log(struct kvm *kvm, > #ifdef CONFIG_KVM_VM_MEMORY_ATTRIBUTES > static u64 kvm_supported_mem_attributes(struct kvm *kvm) > { > +#ifdef kvm_arch_has_private_mem > if (!kvm || kvm_arch_has_private_mem(kvm)) > return KVM_MEMORY_ATTRIBUTE_PRIVATE; > +#endif > > return 0; > } >