From: Sean Christopherson seanjc@google.com
Now that guest_memfd supports tracking private vs. shared within gmem itself, allow userspace to specify INIT_SHARED on a guest_memfd instance for x86 Confidential Computing (CoCo) VMs, so long as per-VM attributes are disabled, i.e. when it's actually possible for a guest_memfd instance to contain shared memory.
Signed-off-by: Sean Christopherson seanjc@google.com --- arch/x86/kvm/x86.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 5e38c4c9cf63c..4ad451982380e 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -13941,14 +13941,13 @@ bool kvm_arch_no_poll(struct kvm_vcpu *vcpu) }
#ifdef CONFIG_KVM_GUEST_MEMFD -/* - * KVM doesn't yet support initializing guest_memfd memory as shared for VMs - * with private memory (the private vs. shared tracking needs to be moved into - * guest_memfd). - */ bool kvm_arch_supports_gmem_init_shared(struct kvm *kvm) { - return !kvm_arch_has_private_mem(kvm); + /* + * INIT_SHARED isn't supported if the memory attributes are per-VM, + * in which case guest_memfd can _only_ be used for private memory. + */ + return !vm_memory_attributes || !kvm_arch_has_private_mem(kvm); }
#ifdef CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE