|
[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 |