[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen arm: add XSM hooks to arch_memory_op
On Thu, 2013-01-17 at 17:02 +0000, Ian Campbell wrote: > Treat XENMEM_add_to_physmap_range the same as XENMEM_add_to_physmap. Does this patch look OK? Since it fixes a build failure on ARM I'd like to get it in ASAP. > > Reported-by: Lars Rasmusson <Lars.Rasmusson@xxxxxxx> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > Cc: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> > --- > v4: > - Just fix FLASK_ENABLED=n here, leave build issues with > FLASK_ENABLE=y till the next patch > v3: > - ppropage errors from xsm_*_*_physmap. > - refactor MSI support into arch specific functions > v2: > - move the hooks in hooks.c and dummy.c too. > - make XSM actually build on arm. > --- > xen/arch/arm/mm.c | 15 +++++++++++++++ > xen/include/xsm/dummy.h | 24 ++++++++++++------------ > xen/include/xsm/xsm.h | 12 ++++++------ > xen/xsm/dummy.c | 5 +++-- > xen/xsm/flask/hooks.c | 25 +++++++++++++------------ > 5 files changed, 49 insertions(+), 32 deletions(-) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index 945e7ac..eb5213e 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -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_HANDLE_PARAM(void) > arg) > 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_HANDLE_PARAM(void) > arg) > 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 --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h > index 1ca82b0..870bd67 100644 > --- a/xen/include/xsm/dummy.h > +++ b/xen/include/xsm/dummy.h > @@ -443,6 +443,18 @@ static XSM_INLINE int > xsm_pci_config_permission(XSM_DEFAULT_ARG struct domain *d > 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_mapping(XSM_DEFAULT_ARG struct domain *d, st > 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 --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h > index 8947372..5048344 100644 > --- a/xen/include/xsm/xsm.h > +++ b/xen/include/xsm/xsm.h > @@ -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(xsm_default_t def, > struct domain *d1, stru > 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(xsm_default_t > def, struct domain *d, str > 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 --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c > index 529a724..5031e16 100644 > --- a/xen/xsm/dummy.c > +++ b/xen/xsm/dummy.c > @@ -101,6 +101,9 @@ void xsm_fixup_ops (struct xsm_operations *ops) > > 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_operations *ops) > 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 --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c > index ba67502..2a13549 100644 > --- a/xen/xsm/flask/hooks.c > +++ b/xen/xsm/flask/hooks.c > @@ -1055,6 +1055,16 @@ static inline int flask_tmem_control(void) > 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(struct domain *d, > struct domain *f, > 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-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |