[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 18/18] xen: remove rcu_lock_target_domain_by_id
Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> --- xen/arch/x86/physdev.c | 20 +++++++++++++------- xen/common/domain.c | 34 ---------------------------------- xen/include/xen/sched.h | 14 -------------- 3 files changed, 13 insertions(+), 55 deletions(-) diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c index 0841a7a..37a4a29 100644 --- a/xen/arch/x86/physdev.c +++ b/xen/arch/x86/physdev.c @@ -87,9 +87,12 @@ int physdev_map_pirq(domid_t domid, int type, int *index, int *pirq_p, int pirq, irq, ret = 0; void *map_data = NULL; - ret = rcu_lock_target_domain_by_id(domid, &d); - if ( ret ) - return ret; + d = rcu_lock_domain_by_id(domid); + if ( d == NULL ) + return -ESRCH; + + if ( d != current->domain && !IS_PRIV_FOR(current->domain, d) ) + return -EPERM; if ( domid == DOMID_SELF && is_hvm_domain(d) ) { @@ -213,11 +216,14 @@ int physdev_map_pirq(domid_t domid, int type, int *index, int *pirq_p, int physdev_unmap_pirq(domid_t domid, int pirq) { struct domain *d; - int ret; + int ret = 0; - ret = rcu_lock_target_domain_by_id(domid, &d); - if ( ret ) - return ret; + d = rcu_lock_domain_by_id(domid); + if ( d == NULL ) + return -ESRCH; + + if ( d != current->domain && !IS_PRIV_FOR(current->domain, d) ) + return -EPERM; if ( is_hvm_domain(d) ) { diff --git a/xen/common/domain.c b/xen/common/domain.c index dbbc414..8989fa6 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -421,40 +421,6 @@ struct domain *rcu_lock_domain_by_id(domid_t dom) return d; } -int rcu_lock_target_domain_by_id(domid_t dom, struct domain **d) -{ - if ( dom == DOMID_SELF ) - { - *d = rcu_lock_current_domain(); - return 0; - } - - if ( (*d = rcu_lock_domain_by_id(dom)) == NULL ) - return -ESRCH; - - if ( !IS_PRIV_FOR(current->domain, *d) ) - { - rcu_unlock_domain(*d); - return -EPERM; - } - - return 0; -} - -int rcu_lock_remote_target_domain_by_id(domid_t dom, struct domain **d) -{ - if ( (*d = rcu_lock_domain_by_id(dom)) == NULL ) - return -ESRCH; - - if ( (*d == current->domain) || !IS_PRIV_FOR(current->domain, *d) ) - { - rcu_unlock_domain(*d); - return -EPERM; - } - - return 0; -} - int domain_kill(struct domain *d) { int rc = 0; diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 53804c8..73d82a8 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -446,20 +446,6 @@ struct domain *domain_create( */ struct domain *rcu_lock_domain_by_id(domid_t dom); -/* - * As above function, but accounts for current domain context: - * - Translates target DOMID_SELF into caller's domain id; and - * - Checks that caller has permission to act on the target domain. - */ -int rcu_lock_target_domain_by_id(domid_t dom, struct domain **d); - -/* - * As rcu_lock_target_domain_by_id(), but will fail EPERM rather than resolve - * to local domain. Successful return always resolves to a remote domain that - * the local domain is privileged to control. - */ -int rcu_lock_remote_target_domain_by_id(domid_t dom, struct domain **d); - /* Finish a RCU critical region started by rcu_lock_domain_by_id(). */ static inline void rcu_unlock_domain(struct domain *d) { -- 1.7.11.2 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |