From a1b8c62792a256678a2041971f59ac80db45a6a7 Mon Sep 17 00:00:00 2001 From: Joao Martins Date: Fri, 21 Sep 2018 11:19:09 -0400 Subject: [PATCH] i386/xen: refactor add_to_physmap for more map spaces This allows more cleanly adding additional map spaces such as grant table and such. Signed-off-by: Joao Martins --- target/i386/trace-events | 1 + target/i386/xen.c | 23 ++++++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/target/i386/trace-events b/target/i386/trace-events index 138401a259..4b1ef0f71a 100644 --- a/target/i386/trace-events +++ b/target/i386/trace-events @@ -24,3 +24,4 @@ kvm_xen_set_callback(int cpu, int virq, int vector, int via) "callback vcpu %d v kvm_xen_evtchn_set(int flags, unsigned int port, int port_type) "flags 0x%x port %u port_type %d" kvm_xen_evtchn_send(int cpu, int dest, unsigned int port) "cpu %d notify_cpu %d port %u" kvm_xen_set_domid(unsigned int domid) "assigned with domid %u" +kvm_xen_add_to_physmap(unsigned int space, unsigned int idx, uint64_t gfn) "add frame space %u idx %u gfn 0x%" PRIx64 diff --git a/target/i386/xen.c b/target/i386/xen.c index 1916ddcb98..0acaf76cf9 100644 --- a/target/i386/xen.c +++ b/target/i386/xen.c @@ -260,12 +260,12 @@ static int kvm_xen_hcall_memory_op(struct kvm_xen_exit *exit, int cmd, uint64_t arg, X86CPU *cpu) { CPUState *cs = CPU(cpu); - int err = 0; + int err = -ENOSYS; switch (cmd) { case XENMEM_add_to_physmap: { struct xen_add_to_physmap *xatp; - struct shared_info *shi; + void *hva; xatp = gva_to_hva(cs, arg); if (!xatp) { @@ -273,21 +273,22 @@ static int kvm_xen_hcall_memory_op(struct kvm_xen_exit *exit, break; } - switch (xatp->space) { - case XENMAPSPACE_shared_info: - break; - default: - err = -ENOSYS; + hva = gpa_to_hva(xatp->gpfn << PAGE_SHIFT); + if (!hva) { + err = -EFAULT; break; } - shi = gpa_to_hva(xatp->gpfn << PAGE_SHIFT); - if (!shi) { - err = -EFAULT; + switch (xatp->space) { + case XENMAPSPACE_shared_info: { + err = xen_set_shared_info(cs, hva, xatp->gpfn); + break; + } + default: break; } - err = xen_set_shared_info(cs, shi, xatp->gpfn); + trace_kvm_xen_add_to_physmap(xatp->space, xatp->idx, xatp->gpfn); break; } } -- 2.50.1