]> xenbits.xensource.com Git - xen.git/commitdiff
relocate mem_event_op domctl and access_op memop into common
authorTamas K Lengyel <tklengyel@sec.in.tum.de>
Fri, 26 Sep 2014 14:27:57 +0000 (16:27 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 26 Sep 2014 14:27:57 +0000 (16:27 +0200)
Signed-off-by: Tamas K Lengyel <tklengyel@sec.in.tum.de>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Tim Deegan <tim@xen.org>
xen/arch/x86/domctl.c
xen/arch/x86/mm/p2m.c
xen/arch/x86/x86_64/compat/mm.c
xen/arch/x86/x86_64/mm.c
xen/common/compat/memory.c
xen/common/domctl.c
xen/common/mem_event.c
xen/common/memory.c
xen/include/asm-arm/p2m.h
xen/include/asm-x86/p2m.h

index 8731e7f03626bc41e6893c58048d8585568c47ff..ec775559be1de37679de0b18e84dd8fc616bf840 100644 (file)
@@ -1131,14 +1131,6 @@ long arch_do_domctl(
     }
     break;
 
-    case XEN_DOMCTL_mem_event_op:
-    {
-        ret = mem_event_domctl(d, &domctl->u.mem_event_op,
-                              guest_handle_cast(u_domctl, void));
-        copyback = 1;
-    }
-    break;
-
     case XEN_DOMCTL_mem_sharing_op:
     {
         ret = mem_sharing_domctl(d, &domctl->u.mem_sharing_op);
index 4822517379f2fedae4a5960eaa8285f53fc81eec..efa49dd79629032af2e41280e29612527ec82f98 100644 (file)
@@ -1435,6 +1435,15 @@ void p2m_mem_event_emulate_check(struct vcpu *v, const mem_event_response_t *rsp
     }
 }
 
+void p2m_setup_introspection(struct domain *d)
+{
+    if ( hvm_funcs.enable_msr_exit_interception )
+    {
+        d->arch.hvm_domain.introspection_enabled = 1;
+        hvm_funcs.enable_msr_exit_interception(d);
+    }
+}
+
 bool_t p2m_mem_access_check(paddr_t gpa, unsigned long gla,
                             struct npfec npfec,
                             mem_event_request_t **req_ptr)
index c0797029951f1e6568c5cd3c71106598859f3661..54f25b75f07e3018d0d8981ca03e7a2f5d427c31 100644 (file)
@@ -198,10 +198,6 @@ int compat_arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         break;
     }
 
-    case XENMEM_access_op:
-        rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t));
-        break;
-
     case XENMEM_sharing_op:
     {
         xen_mem_sharing_op_t mso;
index cce14060354eb709e7577bce7ca9831da1c600a5..8e5a1a18290bed258bdc8c68b4e5d5c4773bae30 100644 (file)
@@ -995,10 +995,6 @@ long subarch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         break;
     }
 
-    case XENMEM_access_op:
-        rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t));
-        break;
-
     case XENMEM_sharing_op:
     {
         xen_mem_sharing_op_t mso;
index 25dc01685cf2b781365057185a3f5c9d2fac826c..43d02bcca6280e7121ecdde6f62376491052bb6d 100644 (file)
@@ -4,6 +4,7 @@
 #include <xen/guest_access.h>
 #include <xen/sched.h>
 #include <xen/event.h>
+#include <xen/mem_access.h>
 #include <asm/current.h>
 #include <compat/memory.h>
 
@@ -381,6 +382,10 @@ int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) compat)
             break;
         }
 
+        case XENMEM_access_op:
+            rc = mem_access_memop(cmd, guest_handle_cast(compat, xen_mem_access_op_t));
+            break;
+
         case XENMEM_add_to_physmap_batch:
             start_extent = end_extent;
             break;
index a4318a058dfc497419fc60a7d4451e34c092005c..b6f9708c25da32512cc6226feac7642817176b8d 100644 (file)
@@ -24,6 +24,7 @@
 #include <xen/bitmap.h>
 #include <xen/paging.h>
 #include <xen/hypercall.h>
+#include <xen/mem_event.h>
 #include <asm/current.h>
 #include <asm/irq.h>
 #include <asm/page.h>
@@ -1111,6 +1112,12 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
     }
     break;
 
+    case XEN_DOMCTL_mem_event_op:
+        ret = mem_event_domctl(d, &op->u.mem_event_op,
+                               guest_handle_cast(u_domctl, void));
+        copyback = 1;
+        break;
+
     case XEN_DOMCTL_disable_migrate:
     {
         d->disable_migrate = op->u.disable_migrate.disable;
index a179cbcb3ae9d3c893f6ef3514d1731f82d682a6..04e3b0e299e4b232e19b07ed8b176c34bceebff5 100644 (file)
@@ -628,12 +628,10 @@ int mem_event_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
                                     HVM_PARAM_ACCESS_RING_PFN,
                                     mem_access_notification);
 
-            if ( mec->op != XEN_DOMCTL_MEM_EVENT_OP_ACCESS_ENABLE &&
-                 rc == 0 && hvm_funcs.enable_msr_exit_interception )
-            {
-                d->arch.hvm_domain.introspection_enabled = 1;
-                hvm_funcs.enable_msr_exit_interception(d);
-            }
+            if ( mec->op == XEN_DOMCTL_MEM_EVENT_OP_ACCESS_ENABLE_INTROSPECTION
+                 && !rc )
+                p2m_setup_introspection(d);
+
         }
         break;
 
index bad50cb4050da81b8656b107d9abfd52d426ff4d..cc36e394de4aa56139c69c7a0582b6ee989918fd 100644 (file)
 #include <xen/errno.h>
 #include <xen/tmem.h>
 #include <xen/tmem_xen.h>
+#include <xen/numa.h>
+#include <xen/mem_access.h>
+#include <xen/trace.h>
 #include <asm/current.h>
 #include <asm/hardirq.h>
 #include <asm/p2m.h>
-#include <xen/numa.h>
 #include <public/memory.h>
 #include <xsm/xsm.h>
-#include <xen/trace.h>
 
 struct memop_args {
     /* INPUT */
@@ -939,6 +940,10 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         break;
     }
 
+    case XENMEM_access_op:
+        rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t));
+        break;
+
     case XENMEM_claim_pages:
         if ( copy_from_guest(&reservation, arg, 1) )
             return -EFAULT;
index 4d5570a5c087e02c7ffcbba977147c638e4b22ad..10bf111cc0a690f48136b46c8f9d2d48eb033594 100644 (file)
@@ -77,6 +77,12 @@ void p2m_mem_event_emulate_check(struct vcpu *v,
     /* Not supported on ARM. */
 };
 
+static inline
+void p2m_setup_introspection(struct domain *d)
+{
+    /* No special setup on ARM. */
+}
+
 #define p2m_is_foreign(_t)  ((_t) == p2m_map_foreign)
 #define p2m_is_ram(_t)      ((_t) == p2m_ram_rw || (_t) == p2m_ram_ro)
 
index 5c16fb112e9fc5ecd657a56e1bac9535e2359eb4..f2842e53780c1d98f9db361513d8e95c7e0550d9 100644 (file)
@@ -589,6 +589,9 @@ int p2m_get_mem_access(struct domain *d, unsigned long pfn,
 void p2m_mem_event_emulate_check(struct vcpu *v,
                                  const mem_event_response_t *rsp);
 
+/* Enable arch specific introspection options (such as MSR interception). */
+void p2m_setup_introspection(struct domain *d);
+
 /* 
  * Internal functions, only called by other p2m code
  */