From 456b03ecb38538b0b083a9a5ac6b02120d1d76d8 Mon Sep 17 00:00:00 2001 From: Joao Martins Date: Fri, 21 Sep 2018 11:29:25 -0400 Subject: [PATCH] i386/xen: handle GNTTABOP_query_size This allows guest to know how many frames are being used and how much more can its grant table grow. Signed-off-by: Joao Martins --- target/i386/xen.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/target/i386/xen.c b/target/i386/xen.c index b112c50e4b..c342f6f320 100644 --- a/target/i386/xen.c +++ b/target/i386/xen.c @@ -929,6 +929,7 @@ static int kvm_xen_hcall_gnttab_op(struct kvm_xen_exit *exit, X86CPU *cpu, int cmd, uint64_t arg, int count) { CPUState *cs = CPU(cpu); + XenState *xen = cs->xen_state; int err = -ENOSYS; switch (cmd) { @@ -950,6 +951,27 @@ static int kvm_xen_hcall_gnttab_op(struct kvm_xen_exit *exit, X86CPU *cpu, err = 0; break; } + case GNTTABOP_query_size: { + struct gnttab_query_size *gqs; + + gqs = gva_to_hva(cs, arg); + if (!gqs) { + err = -EFAULT; + break; + } + + if (gqs->dom != DOMID_SELF) { + err = 0; + gqs->status = GNTST_permission_denied; + break; + } + + gqs->nr_frames = xen->gnttab.nr_frames; + gqs->max_nr_frames = xen->gnttab.max_nr_frames; + gqs->status = GNTST_okay; + err = 0; + break; + } } exit->u.hcall.result = err; -- 2.50.1