On 8/7/26 23:52, Ackerley Tng via B4 Relay wrote: > From: Ackerley Tng <[email protected]> > > Make gmem_in_place_conversion a module parameter so that userspace can > configure enable or disable the use of VM-level memory attributes. The > module parameter is only available if CONFIG_KVM_VM_MEMORY_ATTRIBUTES is > enabled. > > To avoid inconsistencies in the way memory attributes are tracked in KVM > and guest_memfd, the vm_memory_attributes module_param is made > read-only (0444). > > Since selecting CONFIG_KVM_VM_MEMORY_ATTRIBUTES disables in-place > conversion, actually make CONFIG_KVM_VM_MEMORY_ATTRIBUTES selectable. Make > the config only selectable for (CoCo) VM types that might use > vm_memory_attributes. > > Since memory attributes are trackable in guest_memfd, the concept of having > private memory is no longer dependent on > CONFIG_KVM_VM_MEMORY_ATTRIBUTES. Define kvm_arch_has_private_mem() based on > platform config, so that having private memory is dependent on (CoCo) VM > type. > > Signed-off-by: Sean Christopherson <[email protected]> > Reviewed-by: Fuad Tabba <[email protected]> > Tested-by: Shivank Garg <[email protected]> > [Define module_param only if CONFIG_KVM_VM_MEMORY_ATTRIBUTES is enabled] > Suggested-by: Xiaoyao Li <[email protected]> > Reviewed-by: Xiaoyao Li <[email protected]> > Signed-off-by: Ackerley Tng <[email protected]> > --- > arch/x86/include/asm/kvm_host.h | 4 +++- > arch/x86/kvm/Kconfig | 14 ++++++++++---- > virt/kvm/kvm_main.c | 5 ++++- > 3 files changed, 17 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 497da6aaf2942..bb2c1ade62cf9 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -1851,7 +1851,9 @@ enum kvm_intr_type { > ((vcpu) && (vcpu)->arch.handling_intr_from_guest && \ > (!!in_nmi() == ((vcpu)->arch.handling_intr_from_guest == > KVM_HANDLING_NMI))) > > -#ifdef CONFIG_KVM_VM_MEMORY_ATTRIBUTES > +#if defined(CONFIG_KVM_SW_PROTECTED_VM) || \ > + defined(CONFIG_KVM_INTEL_TDX) || \ > + defined(CONFIG_KVM_AMD_SEV) > #define kvm_arch_has_private_mem(kvm) ((kvm)->arch.has_private_mem) > #endif > > diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig > index abb108886733a..2c3c22aeafa54 100644 > --- a/arch/x86/kvm/Kconfig > +++ b/arch/x86/kvm/Kconfig > @@ -81,13 +81,21 @@ config KVM_WERROR > If in doubt, say "N". > > config KVM_VM_MEMORY_ATTRIBUTES > - bool > + bool "Enable per-VM PRIVATE vs. SHARED attributes (for CoCo VMs)" > + depends on KVM_SW_PROTECTED_VM || KVM_INTEL_TDX || KVM_AMD_SEV > + help > + Enable support for tracking PRIVATE vs. SHARED memory using per-VM > + memory attributes. Using per-VM attributes is deprecated in favor of > + tracking PRIVATE state in guest_memfd. Select this if you need to run > + CoCo VMs using a VMM that doesn't support guest_memfd memory > + attributes. > + > + If unsure, say N.
Hm, does that imply that a distribution that must support both, cannot ship a single kernel? -- Cheers, David
