Message ID | 20250527180245.1413463-15-tabba@google.com |
---|---|
State | Superseded |
Headers | show |
Series | KVM: Mapping guest_memfd backed memory at the host for software protected VMs | expand |
On 27.05.25 20:02, Fuad Tabba wrote: > Enable mapping guest_memfd backed memory at the host in arm64. For now, > it applies to all arm64 VM types in arm64 that use guest_memfd. In the > future, new VM types can restrict this via > kvm_arch_gmem_supports_shared_mem(). > > Signed-off-by: Fuad Tabba <tabba@google.com> > --- > arch/arm64/include/asm/kvm_host.h | 5 +++++ > arch/arm64/kvm/Kconfig | 1 + > arch/arm64/kvm/mmu.c | 7 +++++++ > 3 files changed, 13 insertions(+) > > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > index 08ba91e6fb03..8add94929711 100644 > --- a/arch/arm64/include/asm/kvm_host.h > +++ b/arch/arm64/include/asm/kvm_host.h > @@ -1593,4 +1593,9 @@ static inline bool kvm_arch_has_irq_bypass(void) > return true; > } > > +#ifdef CONFIG_KVM_GMEM > +#define kvm_arch_supports_gmem(kvm) true > +#define kvm_arch_supports_gmem_shared_mem(kvm) IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) > +#endif > + > #endif /* __ARM64_KVM_HOST_H__ */ > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig > index 096e45acadb2..8c1e1964b46a 100644 > --- a/arch/arm64/kvm/Kconfig > +++ b/arch/arm64/kvm/Kconfig > @@ -38,6 +38,7 @@ menuconfig KVM > select HAVE_KVM_VCPU_RUN_PID_CHANGE > select SCHED_INFO > select GUEST_PERF_EVENTS if PERF_EVENTS > + select KVM_GMEM_SHARED_MEM > help > Support hosting virtualized guest machines. > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index 896c56683d88..03da08390bf0 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -2264,6 +2264,13 @@ 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 shared memory, since > + * there aren't any CoCo VMs that support only private memory on arm64. > + */ > + if (kvm_slot_has_gmem(new) && !kvm_gmem_memslot_supports_shared(new)) > + return -EINVAL; > + Right, that can get lifted once we have such VMs. Acked-by: David Hildenbrand <david@redhat.com>
On Wed, 4 Jun 2025 at 14:17, David Hildenbrand <david@redhat.com> wrote: > > On 27.05.25 20:02, Fuad Tabba wrote: > > Enable mapping guest_memfd backed memory at the host in arm64. For now, > > it applies to all arm64 VM types in arm64 that use guest_memfd. In the > > future, new VM types can restrict this via > > kvm_arch_gmem_supports_shared_mem(). > > > > Signed-off-by: Fuad Tabba <tabba@google.com> > > --- > > arch/arm64/include/asm/kvm_host.h | 5 +++++ > > arch/arm64/kvm/Kconfig | 1 + > > arch/arm64/kvm/mmu.c | 7 +++++++ > > 3 files changed, 13 insertions(+) > > > > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > > index 08ba91e6fb03..8add94929711 100644 > > --- a/arch/arm64/include/asm/kvm_host.h > > +++ b/arch/arm64/include/asm/kvm_host.h > > @@ -1593,4 +1593,9 @@ static inline bool kvm_arch_has_irq_bypass(void) > > return true; > > } > > > > +#ifdef CONFIG_KVM_GMEM > > +#define kvm_arch_supports_gmem(kvm) true > > +#define kvm_arch_supports_gmem_shared_mem(kvm) IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) > > +#endif > > + > > #endif /* __ARM64_KVM_HOST_H__ */ > > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig > > index 096e45acadb2..8c1e1964b46a 100644 > > --- a/arch/arm64/kvm/Kconfig > > +++ b/arch/arm64/kvm/Kconfig > > @@ -38,6 +38,7 @@ menuconfig KVM > > select HAVE_KVM_VCPU_RUN_PID_CHANGE > > select SCHED_INFO > > select GUEST_PERF_EVENTS if PERF_EVENTS > > + select KVM_GMEM_SHARED_MEM > > help > > Support hosting virtualized guest machines. > > > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > > index 896c56683d88..03da08390bf0 100644 > > --- a/arch/arm64/kvm/mmu.c > > +++ b/arch/arm64/kvm/mmu.c > > @@ -2264,6 +2264,13 @@ 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 shared memory, since > > + * there aren't any CoCo VMs that support only private memory on arm64. > > + */ > > + if (kvm_slot_has_gmem(new) && !kvm_gmem_memslot_supports_shared(new)) > > + return -EINVAL; > > + > > Right, that can get lifted once we have such VMs. > > Acked-by: David Hildenbrand <david@redhat.com> Thanks! /fuad > -- > Cheers, > > David / dhildenb >
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 08ba91e6fb03..8add94929711 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -1593,4 +1593,9 @@ static inline bool kvm_arch_has_irq_bypass(void) return true; } +#ifdef CONFIG_KVM_GMEM +#define kvm_arch_supports_gmem(kvm) true +#define kvm_arch_supports_gmem_shared_mem(kvm) IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM) +#endif + #endif /* __ARM64_KVM_HOST_H__ */ diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index 096e45acadb2..8c1e1964b46a 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -38,6 +38,7 @@ menuconfig KVM select HAVE_KVM_VCPU_RUN_PID_CHANGE select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS + select KVM_GMEM_SHARED_MEM help Support hosting virtualized guest machines. diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 896c56683d88..03da08390bf0 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -2264,6 +2264,13 @@ 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 shared memory, since + * there aren't any CoCo VMs that support only private memory on arm64. + */ + if (kvm_slot_has_gmem(new) && !kvm_gmem_memslot_supports_shared(new)) + return -EINVAL; + hva = new->userspace_addr; reg_end = hva + (new->npages << PAGE_SHIFT);
Enable mapping guest_memfd backed memory at the host in arm64. For now, it applies to all arm64 VM types in arm64 that use guest_memfd. In the future, new VM types can restrict this via kvm_arch_gmem_supports_shared_mem(). Signed-off-by: Fuad Tabba <tabba@google.com> --- arch/arm64/include/asm/kvm_host.h | 5 +++++ arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/mmu.c | 7 +++++++ 3 files changed, 13 insertions(+)