relocate set_access_required domctl into common
authorTamas K Lengyel <tklengyel@sec.in.tum.de>
Fri, 26 Sep 2014 14:26:58 +0000 (16:26 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 26 Sep 2014 14:26:58 +0000 (16:26 +0200)
Signed-off-by: Tamas K Lengyel <tklengyel@sec.in.tum.de>
Acked-by: Tim Deegan <tim@xen.org>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/domctl.c
xen/common/domctl.c
xen/include/asm-arm/p2m.h

index 26a3ea10be31b5b976b25ed4710c95b086d3e9ef..8731e7f03626bc41e6893c58048d8585568c47ff 100644 (file)
@@ -1163,20 +1163,6 @@ long arch_do_domctl(
     break;
 #endif /* P2M_AUDIT */
 
-    case XEN_DOMCTL_set_access_required:
-    {
-        struct p2m_domain* p2m;
-        
-        ret = -EPERM;
-        if ( current->domain == d )
-            break;
-
-        ret = 0;
-        p2m = p2m_get_hostp2m(d);
-        p2m->access_required = domctl->u.access_required.access_required;
-    }
-    break;
-
     case XEN_DOMCTL_set_broken_page_p2m:
     {
         p2m_type_t pt;
index 1ad072970d8c9a2e421e2f63337f08e8d04f08e8..a4318a058dfc497419fc60a7d4451e34c092005c 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/current.h>
 #include <asm/irq.h>
 #include <asm/page.h>
+#include <asm/p2m.h>
 #include <public/domctl.h>
 #include <xsm/xsm.h>
 
@@ -1116,6 +1117,22 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
     }
     break;
 
+#ifdef HAS_MEM_ACCESS
+    case XEN_DOMCTL_set_access_required:
+    {
+        struct p2m_domain* p2m;
+
+        ret = -EPERM;
+        if ( current->domain == d )
+            break;
+
+        ret = 0;
+        p2m = p2m_get_hostp2m(d);
+        p2m->access_required = op->u.access_required.access_required;
+    }
+    break;
+#endif
+
     case XEN_DOMCTL_set_virq_handler:
     {
         uint32_t virq = op->u.set_virq_handler.virq;
index 38e32e632b2ddce33377a54b28dcca63dbc0e0fb..4d5570a5c087e02c7ffcbba977147c638e4b22ad 100644 (file)
@@ -44,6 +44,10 @@ struct p2m_domain {
          * at each p2m tree level. */
         unsigned long shattered[4];
     } stats;
+
+    /* If true, and an access fault comes in and there is no mem_event listener,
+     * pause domain. Otherwise, remove access restrictions. */
+    bool_t access_required;
 };
 
 /* List of possible type for each page in the p2m entry.
@@ -208,6 +212,9 @@ int arch_grant_map_page_identity(struct domain *d, unsigned long frame,
                                  bool_t writeable);
 int arch_grant_unmap_page_identity(struct domain *d, unsigned long frame);
 
+/* get host p2m table */
+#define p2m_get_hostp2m(d) (&(d)->arch.p2m)
+
 #endif /* _XEN_P2M_H */
 
 /*