|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RESEND 2/4] xen/arm: remove rcu_lock_target_domain_by_id users
On Fri, 2013-05-03 at 15:09 +0100, Daniel De Graaf wrote:
> This function has been replaced with rcu_lock_domain_by_any_id and an
> XSM check. Two callers already had an XSM check; add a check to the
> third.
>
> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
> Acked-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> (for 4.3 release)
For the ARM stuff:
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Since the bulk of the series is elsewhere I expect someone else will be
applying?
> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
> Cc: Tim Deegan <tim@xxxxxxx>
> ---
> xen/arch/arm/mm.c | 23 +++++++++++++++--------
> xen/include/xsm/dummy.h | 8 ++++++++
> xen/include/xsm/xsm.h | 11 +++++++++++
> xen/xsm/dummy.c | 3 +++
> xen/xsm/flask/hooks.c | 10 ++++++++++
> 5 files changed, 47 insertions(+), 8 deletions(-)
>
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 03492df..bd6d5f3 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -753,9 +753,16 @@ static int xenmem_add_to_physmap_one(
> {
> paddr_t maddr;
> struct domain *od;
> - rc = rcu_lock_target_domain_by_id(foreign_domid, &od);
> - if ( rc < 0 )
> + od = rcu_lock_domain_by_any_id(foreign_domid);
> + if ( od == NULL )
> + return -ESRCH;
> +
> + rc = xsm_map_gmfn_foreign(XSM_TARGET, d, od);
> + if ( rc )
> + {
> + rcu_unlock_domain(od);
> return rc;
> + }
>
> maddr = p2m_lookup(od, idx << PAGE_SHIFT);
> if ( maddr == INVALID_PADDR )
> @@ -847,9 +854,9 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void)
> arg)
> if ( xatp.space == XENMAPSPACE_gmfn_foreign )
> return -EINVAL;
>
> - rc = rcu_lock_target_domain_by_id(xatp.domid, &d);
> - if ( rc != 0 )
> - return rc;
> + d = rcu_lock_domain_by_any_id(xatp.domid);
> + if ( d == NULL )
> + return -ESRCH;
>
> rc = xsm_add_to_physmap(XSM_TARGET, current->domain, d);
> if ( rc )
> @@ -878,9 +885,9 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void)
> arg)
> if ( xatpr.space == XENMAPSPACE_gmfn_range )
> return -EINVAL;
>
> - rc = rcu_lock_target_domain_by_id(xatpr.domid, &d);
> - if ( rc != 0 )
> - return rc;
> + d = rcu_lock_domain_by_any_id(xatpr.domid);
> + if ( d == NULL )
> + return -ESRCH;
>
> rc = xsm_add_to_physmap(XSM_TARGET, current->domain, d);
> if ( rc )
> diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
> index 9bfe596..3912bd9 100644
> --- a/xen/include/xsm/dummy.h
> +++ b/xen/include/xsm/dummy.h
> @@ -616,4 +616,12 @@ static XSM_INLINE int xsm_ioport_mapping(XSM_DEFAULT_ARG
> struct domain *d, uint3
> return xsm_default_action(action, current->domain, d);
> }
>
> +#endif /* CONFIG_X86 */
> +
> +#ifdef CONFIG_ARM
> +static XSM_INLINE int xsm_map_gmfn_foreign(XSM_DEFAULT_ARG struct domain *d,
> struct domain *t)
> +{
> + XSM_ASSERT_ACTION(XSM_TARGET);
> + return xsm_default_action(action, d, t);
> +}
> #endif
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index 69fe64a..58a4fbb 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -162,6 +162,9 @@ struct xsm_operations {
> int (*ioport_permission) (struct domain *d, uint32_t s, uint32_t e,
> uint8_t allow);
> int (*ioport_mapping) (struct domain *d, uint32_t s, uint32_t e, uint8_t
> allow);
> #endif
> +#ifdef CONFIG_ARM
> + int (*map_gmfn_foreign) (struct domain *d, struct domain *t);
> +#endif
> };
>
> #ifdef XSM_ENABLE
> @@ -622,6 +625,14 @@ static inline int xsm_ioport_mapping (xsm_default_t def,
> struct domain *d, uint3
> return xsm_ops->ioport_mapping(d, s, e, allow);
> }
> #endif /* CONFIG_X86 */
> +
> +#ifdef CONFIG_ARM
> +static inline int xsm_map_gmfn_foreign (struct domain *d, struct domain *t)
> +{
> + return xsm_ops->map_gmfn_foreign(d, t);
> +}
> +#endif /* CONFIG_ARM */
> +
> #endif /* XSM_NO_WRAPPERS */
>
> extern int xsm_init(unsigned long *module_map, const multiboot_info_t *mbi,
> diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
> index 3d84e73..937761f 100644
> --- a/xen/xsm/dummy.c
> +++ b/xen/xsm/dummy.c
> @@ -132,4 +132,7 @@ void xsm_fixup_ops (struct xsm_operations *ops)
> set_to_dummy_if_null(ops, ioport_permission);
> set_to_dummy_if_null(ops, ioport_mapping);
> #endif
> +#ifdef CONFIG_ARM
> + set_to_dummy_if_null(ops, map_gmfn_foreign);
> +#endif
> }
> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
> index 3291aa2..bb10de3 100644
> --- a/xen/xsm/flask/hooks.c
> +++ b/xen/xsm/flask/hooks.c
> @@ -1454,6 +1454,13 @@ static int flask_unbind_pt_irq (struct domain *d,
> struct xen_domctl_bind_pt_irq
> {
> return current_has_perm(d, SECCLASS_RESOURCE, RESOURCE__REMOVE);
> }
> +#endif /* CONFIG_X86 */
> +
> +#ifdef CONFIG_ARM
> +static int flask_map_gmfn_foreign(struct domain *d, struct domain *t)
> +{
> + return domain_has_perm(d, t, SECCLASS_MMU, MMU__MAP_READ |
> MMU__MAP_WRITE);
> +}
> #endif
>
> long do_flask_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_flask_op);
> @@ -1562,6 +1569,9 @@ static struct xsm_operations flask_ops = {
> .ioport_permission = flask_ioport_permission,
> .ioport_mapping = flask_ioport_mapping,
> #endif
> +#ifdef CONFIG_ARM
> + .map_gmfn_foreign = flask_map_gmfn_foreign,
> +#endif
> };
>
> static __init int flask_init(void)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |