[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xen arm: add XSM hooks to arch_memory_op


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-unstable <patchbot@xxxxxxx>
  • Date: Tue, 22 Jan 2013 05:11:07 +0000
  • Delivery-date: Tue, 22 Jan 2013 05:11:20 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1358787790 0
# Node ID 4b476378fc35e776196c29dc0e24b71529393a4c
# Parent  0369fd99e9529bedcd72539575cd04a279765137
xen arm: add XSM hooks to arch_memory_op

Treat XENMEM_add_to_physmap_range the same as XENMEM_add_to_physmap.

Reported-by: Lars Rasmusson <Lars.Rasmusson@xxxxxxx>
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Acked-by: Keir Fraser <keir@xxxxxxx>
Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---


diff -r 0369fd99e952 -r 4b476378fc35 xen/arch/arm/mm.c
--- a/xen/arch/arm/mm.c Mon Jan 21 16:04:56 2013 +0000
+++ b/xen/arch/arm/mm.c Mon Jan 21 17:03:10 2013 +0000
@@ -35,6 +35,7 @@
 #include <asm/current.h>
 #include <public/memory.h>
 #include <xen/sched.h>
+#include <xsm/xsm.h>
 
 struct domain *dom_xen, *dom_io, *dom_cow;
 
@@ -655,6 +656,13 @@ long arch_memory_op(int op, XEN_GUEST_HA
         if ( rc != 0 )
             return rc;
 
+        rc = xsm_add_to_physmap(XSM_TARGET, current->domain, d);
+        if ( rc )
+        {
+            rcu_unlock_domain(d);
+            return rc;
+        }
+
         rc = xenmem_add_to_physmap_one(d, xatp.space, DOMID_INVALID,
                                        xatp.idx, xatp.gpfn);
 
@@ -675,6 +683,13 @@ long arch_memory_op(int op, XEN_GUEST_HA
         if ( rc != 0 )
             return rc;
 
+        rc = xsm_add_to_physmap(XSM_TARGET, current->domain, d);
+        if ( rc )
+        {
+            rcu_unlock_domain(d);
+            return rc;
+        }
+
         rc = xenmem_add_to_physmap_range(d, &xatpr);
 
         rcu_unlock_domain(d);
diff -r 0369fd99e952 -r 4b476378fc35 xen/include/xsm/dummy.h
--- a/xen/include/xsm/dummy.h   Mon Jan 21 16:04:56 2013 +0000
+++ b/xen/include/xsm/dummy.h   Mon Jan 21 17:03:10 2013 +0000
@@ -443,6 +443,18 @@ static XSM_INLINE int xsm_pci_config_per
     return xsm_default_action(action, current->domain, d);
 }
 
+static XSM_INLINE int xsm_add_to_physmap(XSM_DEFAULT_ARG struct domain *d1, 
struct domain *d2)
+{
+    XSM_ASSERT_ACTION(XSM_TARGET);
+    return xsm_default_action(action, d1, d2);
+}
+
+static XSM_INLINE int xsm_remove_from_physmap(XSM_DEFAULT_ARG struct domain 
*d1, struct domain *d2)
+{
+    XSM_ASSERT_ACTION(XSM_TARGET);
+    return xsm_default_action(action, d1, d2);
+}
+
 #ifdef CONFIG_X86
 static XSM_INLINE int xsm_shadow_control(XSM_DEFAULT_ARG struct domain *d, 
uint32_t op)
 {
@@ -544,18 +556,6 @@ static XSM_INLINE int xsm_update_va_mapp
     return xsm_default_action(action, d, f);
 }
 
-static XSM_INLINE int xsm_add_to_physmap(XSM_DEFAULT_ARG struct domain *d1, 
struct domain *d2)
-{
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
-}
-
-static XSM_INLINE int xsm_remove_from_physmap(XSM_DEFAULT_ARG struct domain 
*d1, struct domain *d2)
-{
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
-}
-
 static XSM_INLINE int xsm_bind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct 
xen_domctl_bind_pt_irq *bind)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
diff -r 0369fd99e952 -r 4b476378fc35 xen/include/xsm/xsm.h
--- a/xen/include/xsm/xsm.h     Mon Jan 21 16:04:56 2013 +0000
+++ b/xen/include/xsm/xsm.h     Mon Jan 21 17:03:10 2013 +0000
@@ -90,6 +90,7 @@ struct xsm_operations {
     int (*memory_adjust_reservation) (struct domain *d1, struct domain *d2);
     int (*memory_stat_reservation) (struct domain *d1, struct domain *d2);
     int (*memory_pin_page) (struct domain *d1, struct domain *d2, struct 
page_info *page);
+    int (*add_to_physmap) (struct domain *d1, struct domain *d2);
     int (*remove_from_physmap) (struct domain *d1, struct domain *d2);
 
     int (*console_io) (struct domain *d, int cmd);
@@ -149,7 +150,6 @@ struct xsm_operations {
                        struct domain *f, uint32_t flags);
     int (*mmuext_op) (struct domain *d, struct domain *f);
     int (*update_va_mapping) (struct domain *d, struct domain *f, l1_pgentry_t 
pte);
-    int (*add_to_physmap) (struct domain *d1, struct domain *d2);
     int (*bind_pt_irq) (struct domain *d, struct xen_domctl_bind_pt_irq *bind);
     int (*unbind_pt_irq) (struct domain *d, struct xen_domctl_bind_pt_irq 
*bind);
     int (*ioport_permission) (struct domain *d, uint32_t s, uint32_t e, 
uint8_t allow);
@@ -335,6 +335,11 @@ static inline int xsm_memory_pin_page(xs
     return xsm_ops->memory_pin_page(d1, d2, page);
 }
 
+static inline int xsm_add_to_physmap(xsm_default_t def, struct domain *d1, 
struct domain *d2)
+{
+    return xsm_ops->add_to_physmap(d1, d2);
+}
+
 static inline int xsm_remove_from_physmap(xsm_default_t def, struct domain 
*d1, struct domain *d2)
 {
     return xsm_ops->remove_from_physmap(d1, d2);
@@ -558,11 +563,6 @@ static inline int xsm_update_va_mapping(
     return xsm_ops->update_va_mapping(d, f, pte);
 }
 
-static inline int xsm_add_to_physmap(xsm_default_t def, struct domain *d1, 
struct domain *d2)
-{
-    return xsm_ops->add_to_physmap(d1, d2);
-}
-
 static inline int xsm_bind_pt_irq(xsm_default_t def, struct domain *d,
                                                 struct xen_domctl_bind_pt_irq 
*bind)
 {
diff -r 0369fd99e952 -r 4b476378fc35 xen/xsm/dummy.c
--- a/xen/xsm/dummy.c   Mon Jan 21 16:04:56 2013 +0000
+++ b/xen/xsm/dummy.c   Mon Jan 21 17:03:10 2013 +0000
@@ -101,6 +101,9 @@ void xsm_fixup_ops (struct xsm_operation
 
     set_to_dummy_if_null(ops, do_xsm_op);
 
+    set_to_dummy_if_null(ops, add_to_physmap);
+    set_to_dummy_if_null(ops, remove_from_physmap);
+
 #ifdef CONFIG_X86
     set_to_dummy_if_null(ops, shadow_control);
     set_to_dummy_if_null(ops, hvm_param);
@@ -118,8 +121,6 @@ void xsm_fixup_ops (struct xsm_operation
     set_to_dummy_if_null(ops, mmu_update);
     set_to_dummy_if_null(ops, mmuext_op);
     set_to_dummy_if_null(ops, update_va_mapping);
-    set_to_dummy_if_null(ops, add_to_physmap);
-    set_to_dummy_if_null(ops, remove_from_physmap);
     set_to_dummy_if_null(ops, bind_pt_irq);
     set_to_dummy_if_null(ops, unbind_pt_irq);
     set_to_dummy_if_null(ops, ioport_permission);
diff -r 0369fd99e952 -r 4b476378fc35 xen/xsm/flask/hooks.c
--- a/xen/xsm/flask/hooks.c     Mon Jan 21 16:04:56 2013 +0000
+++ b/xen/xsm/flask/hooks.c     Mon Jan 21 17:03:10 2013 +0000
@@ -1055,6 +1055,16 @@ static inline int flask_tmem_control(voi
     return domain_has_xen(current->domain, XEN__TMEM_CONTROL);
 }
 
+static int flask_add_to_physmap(struct domain *d1, struct domain *d2)
+{
+    return domain_has_perm(d1, d2, SECCLASS_MMU, MMU__PHYSMAP);
+}
+
+static int flask_remove_from_physmap(struct domain *d1, struct domain *d2)
+{
+    return domain_has_perm(d1, d2, SECCLASS_MMU, MMU__PHYSMAP);
+}
+
 #ifdef CONFIG_X86
 static int flask_shadow_control(struct domain *d, uint32_t op)
 {
@@ -1325,16 +1335,6 @@ static int flask_update_va_mapping(struc
     return domain_has_perm(d, f, SECCLASS_MMU, map_perms);
 }
 
-static int flask_add_to_physmap(struct domain *d1, struct domain *d2)
-{
-    return domain_has_perm(d1, d2, SECCLASS_MMU, MMU__PHYSMAP);
-}
-
-static int flask_remove_from_physmap(struct domain *d1, struct domain *d2)
-{
-    return domain_has_perm(d1, d2, SECCLASS_MMU, MMU__PHYSMAP);
-}
-
 static int flask_get_device_group(uint32_t machine_bdf)
 {
     u32 rsid;
@@ -1501,6 +1501,9 @@ static struct xsm_operations flask_ops =
 
     .do_xsm_op = do_flask_op,
 
+    .add_to_physmap = flask_add_to_physmap,
+    .remove_from_physmap = flask_remove_from_physmap,
+
 #ifdef CONFIG_X86
     .shadow_control = flask_shadow_control,
     .hvm_param = flask_hvm_param,
@@ -1518,8 +1521,6 @@ static struct xsm_operations flask_ops =
     .mmu_update = flask_mmu_update,
     .mmuext_op = flask_mmuext_op,
     .update_va_mapping = flask_update_va_mapping,
-    .add_to_physmap = flask_add_to_physmap,
-    .remove_from_physmap = flask_remove_from_physmap,
     .get_device_group = flask_get_device_group,
     .test_assign_device = flask_test_assign_device,
     .assign_device = flask_assign_device,

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.