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

Reply via email to