Message ID | 20231105163040.14904-27-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: guest_memfd() and per-page attributes | expand |
On Sun, Nov 5, 2023 at 4:34 PM Paolo Bonzini <pbonzini@redhat.com> wrote: > > From: Vishal Annapurve <vannapurve@google.com> > > Add helpers for x86 guests to invoke the KVM_HC_MAP_GPA_RANGE hypercall, > which KVM will forward to userspace and thus can be used by tests to > coordinate private<=>shared conversions between host userspace code and > guest code. > > Signed-off-by: Vishal Annapurve <vannapurve@google.com> > [sean: drop shared/private helpers (let tests specify flags)] > Signed-off-by: Sean Christopherson <seanjc@google.com> > Message-Id: <20231027182217.3615211-29-seanjc@google.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- Reviewed-by: Fuad Tabba <tabba@google.com> Tested-by: Fuad Tabba <tabba@google.com> Cheers, /fuad > .../selftests/kvm/include/x86_64/processor.h | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools/testing/selftests/kvm/include/x86_64/processor.h > index 25bc61dac5fb..a84863503fcb 100644 > --- a/tools/testing/selftests/kvm/include/x86_64/processor.h > +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h > @@ -15,6 +15,7 @@ > #include <asm/msr-index.h> > #include <asm/prctl.h> > > +#include <linux/kvm_para.h> > #include <linux/stringify.h> > > #include "../kvm_util.h" > @@ -1194,6 +1195,20 @@ uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2, > uint64_t __xen_hypercall(uint64_t nr, uint64_t a0, void *a1); > void xen_hypercall(uint64_t nr, uint64_t a0, void *a1); > > +static inline uint64_t __kvm_hypercall_map_gpa_range(uint64_t gpa, > + uint64_t size, uint64_t flags) > +{ > + return kvm_hypercall(KVM_HC_MAP_GPA_RANGE, gpa, size >> PAGE_SHIFT, flags, 0); > +} > + > +static inline void kvm_hypercall_map_gpa_range(uint64_t gpa, uint64_t size, > + uint64_t flags) > +{ > + uint64_t ret = __kvm_hypercall_map_gpa_range(gpa, size, flags); > + > + GUEST_ASSERT(!ret); > +} > + > void __vm_xsave_require_permission(uint64_t xfeature, const char *name); > > #define vm_xsave_require_permission(xfeature) \ > -- > 2.39.1 > >
diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools/testing/selftests/kvm/include/x86_64/processor.h index 25bc61dac5fb..a84863503fcb 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -15,6 +15,7 @@ #include <asm/msr-index.h> #include <asm/prctl.h> +#include <linux/kvm_para.h> #include <linux/stringify.h> #include "../kvm_util.h" @@ -1194,6 +1195,20 @@ uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2, uint64_t __xen_hypercall(uint64_t nr, uint64_t a0, void *a1); void xen_hypercall(uint64_t nr, uint64_t a0, void *a1); +static inline uint64_t __kvm_hypercall_map_gpa_range(uint64_t gpa, + uint64_t size, uint64_t flags) +{ + return kvm_hypercall(KVM_HC_MAP_GPA_RANGE, gpa, size >> PAGE_SHIFT, flags, 0); +} + +static inline void kvm_hypercall_map_gpa_range(uint64_t gpa, uint64_t size, + uint64_t flags) +{ + uint64_t ret = __kvm_hypercall_map_gpa_range(gpa, size, flags); + + GUEST_ASSERT(!ret); +} + void __vm_xsave_require_permission(uint64_t xfeature, const char *name); #define vm_xsave_require_permission(xfeature) \