]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
i386/xen: refactor add_to_physmap for more map spaces
authorJoao Martins <joao.m.martins@oracle.com>
Fri, 21 Sep 2018 15:19:09 +0000 (11:19 -0400)
committerJoao Martins <joao.m.martins@oracle.com>
Tue, 19 Feb 2019 14:00:57 +0000 (09:00 -0500)
This allows more cleanly adding additional map spaces such
as grant table and such.

Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
target/i386/trace-events
target/i386/xen.c

index 138401a259537abd24d64322ac4c5ecd9f721f1e..4b1ef0f71ae2674bba129322cd39e81440c3f44c 100644 (file)
@@ -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
index 1916ddcb98356e450062e0844e4cbceeec44559b..0acaf76cf98bbf5ab0a6217d7bebb5068ca9a348 100644 (file)
@@ -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;
          }
     }