[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 Fri, 18 Jan 2013, Ian Campbell wrote: > 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. It looks OK to me. > > > > 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 |