[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] Merge



# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
# Date 1172747085 0
# Node ID 8939727a9d93b625b405c9e5391db562a4083ca0
# Parent  1966270d89d73cd44c1996c91c4c698c4004a730
# Parent  09a9b6d6c35684cdcf9cb0afa7ad6b5183a37b38
Merge
---
 tools/ioemu/hw/ide.c                        |    4 -
 xen/acm/acm_core.c                          |    8 +--
 xen/acm/acm_simple_type_enforcement_hooks.c |   24 ++++-----
 xen/arch/x86/domain.c                       |    9 ++-
 xen/arch/x86/domctl.c                       |   44 +++++++++---------
 xen/arch/x86/hvm/hvm.c                      |   16 +++---
 xen/arch/x86/mm.c                           |   10 ++--
 xen/common/acm_ops.c                        |   46 +++++++++---------
 xen/common/domain.c                         |    2 
 xen/common/domctl.c                         |   68 ++++++++++++++--------------
 xen/common/event_channel.c                  |   16 +++---
 xen/common/grant_table.c                    |   42 ++++++++---------
 xen/common/memory.c                         |   20 ++++----
 xen/include/acm/acm_hooks.h                 |    6 +-
 xen/include/xen/sched.h                     |   14 ++---
 15 files changed, 165 insertions(+), 164 deletions(-)

diff -r 1966270d89d7 -r 8939727a9d93 tools/ioemu/hw/ide.c
--- a/tools/ioemu/hw/ide.c      Thu Mar 01 11:04:23 2007 +0000
+++ b/tools/ioemu/hw/ide.c      Thu Mar 01 11:04:45 2007 +0000
@@ -504,7 +504,7 @@ buffered_pio_write(IDEState *s, uint32_t
 buffered_pio_write(IDEState *s, uint32_t addr, int size)
 {
     struct pio_buffer *piobuf = piobuf_by_addr(addr);
-    uint32_t data_end;
+    int data_end;
 
     if (!piobuf)
         return;
@@ -523,7 +523,7 @@ buffered_pio_read(IDEState *s, uint32_t 
 buffered_pio_read(IDEState *s, uint32_t addr, int size)
 {
     struct pio_buffer *piobuf = piobuf_by_addr(addr);
-    uint32_t data_end;
+    int data_end;
 
     if (!piobuf)
         return;
diff -r 1966270d89d7 -r 8939727a9d93 xen/acm/acm_core.c
--- a/xen/acm/acm_core.c        Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/acm/acm_core.c        Thu Mar 01 11:04:45 2007 +0000
@@ -260,7 +260,7 @@ acm_init_domain_ssid(domid_t id, ssidref
 acm_init_domain_ssid(domid_t id, ssidref_t ssidref)
 {
     struct acm_ssid_domain *ssid;
-    struct domain *subj = get_domain_by_id(id);
+    struct domain *subj = rcu_lock_domain_by_id(id);
     int ret1, ret2;
  
     if (subj == NULL)
@@ -270,7 +270,7 @@ acm_init_domain_ssid(domid_t id, ssidref
     }
     if ((ssid = xmalloc(struct acm_ssid_domain)) == NULL)
     {
-        put_domain(subj);
+        rcu_unlock_domain(subj);
         return ACM_INIT_SSID_ERROR;
     }
 
@@ -302,12 +302,12 @@ acm_init_domain_ssid(domid_t id, ssidref
         printk("%s: ERROR instantiating individual ssids for domain 0x%02x.\n",
                __func__, subj->domain_id);
         acm_free_domain_ssid(ssid);
-        put_domain(subj);
+        rcu_unlock_domain(subj);
         return ACM_INIT_SSID_ERROR;
     }
     printkd("%s: assigned domain %x the ssidref=%x.\n",
            __func__, id, ssid->ssidref);
-    put_domain(subj);
+    rcu_unlock_domain(subj);
     return ACM_OK;
 }
 
diff -r 1966270d89d7 -r 8939727a9d93 xen/acm/acm_simple_type_enforcement_hooks.c
--- a/xen/acm/acm_simple_type_enforcement_hooks.c       Thu Mar 01 11:04:23 
2007 +0000
+++ b/xen/acm/acm_simple_type_enforcement_hooks.c       Thu Mar 01 11:04:45 
2007 +0000
@@ -230,7 +230,7 @@ ste_init_state(struct acm_ste_policy_buf
                         __func__, d->domain_id, i, sha_copy.flags, 
sha_copy.domid, 
                         (unsigned long)sha_copy.frame);
                 rdomid = sha_copy.domid;
-                if ((rdom = get_domain_by_id(rdomid)) == NULL) {
+                if ((rdom = rcu_lock_domain_by_id(rdomid)) == NULL) {
                     spin_unlock(&d->grant_table->lock);
                     printkd("%s: domain not found ERROR!\n", __func__);
                     goto out;
@@ -239,7 +239,7 @@ ste_init_state(struct acm_ste_policy_buf
                 ste_rssid = GET_SSIDP(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY, 
                                       (struct acm_ssid_domain *)(rdom->ssid));
                 ste_rssidref = ste_rssid->ste_ssidref;
-                put_domain(rdom);
+                rcu_unlock_domain(rdom);
                 if (!have_common_type(ste_ssidref, ste_rssidref)) {
                     spin_unlock(&d->grant_table->lock);
                     printkd("%s: Policy violation in grant table sharing 
domain %x -> domain %x.\n",
@@ -494,8 +494,8 @@ ste_pre_eventchannel_unbound(domid_t id1
     if (id1 == DOMID_SELF) id1 = current->domain->domain_id;
     if (id2 == DOMID_SELF) id2 = current->domain->domain_id;
 
-    subj = get_domain_by_id(id1);
-    obj  = get_domain_by_id(id2);
+    subj = rcu_lock_domain_by_id(id1);
+    obj  = rcu_lock_domain_by_id(id2);
     if ((subj == NULL) || (obj == NULL)) {
         ret = ACM_ACCESS_DENIED;
         goto out;
@@ -517,9 +517,9 @@ ste_pre_eventchannel_unbound(domid_t id1
     }
   out:
     if (obj != NULL)
-        put_domain(obj);
+        rcu_unlock_domain(obj);
     if (subj != NULL)
-        put_domain(subj);
+        rcu_unlock_domain(subj);
     return ret;
 }
 
@@ -539,7 +539,7 @@ ste_pre_eventchannel_interdomain(domid_t
     if (id == DOMID_SELF) id = current->domain->domain_id;
 
     subj = current->domain;
-    obj  = get_domain_by_id(id);
+    obj  = rcu_lock_domain_by_id(id);
     if (obj == NULL) {
         ret = ACM_ACCESS_DENIED;
         goto out;
@@ -563,7 +563,7 @@ ste_pre_eventchannel_interdomain(domid_t
     }
  out:
     if (obj != NULL)
-        put_domain(obj);
+        rcu_unlock_domain(obj);
     return ret;
 }
 
@@ -582,7 +582,7 @@ ste_pre_grant_map_ref (domid_t id) {
     }
     atomic_inc(&ste_bin_pol.gt_eval_count);
     subj = current->domain;
-    obj = get_domain_by_id(id);
+    obj = rcu_lock_domain_by_id(id);
 
     if (share_common_type(subj, obj)) {
         cache_result(subj, obj);
@@ -593,7 +593,7 @@ ste_pre_grant_map_ref (domid_t id) {
         ret = ACM_ACCESS_DENIED;
     }
     if (obj != NULL)
-        put_domain(obj);
+        rcu_unlock_domain(obj);
     return ret;
 }
 
@@ -620,7 +620,7 @@ ste_pre_grant_setup (domid_t id) {
     }
     /* b) check types */
     subj = current->domain;
-    obj = get_domain_by_id(id);
+    obj = rcu_lock_domain_by_id(id);
 
     if (share_common_type(subj, obj)) {
         cache_result(subj, obj);
@@ -630,7 +630,7 @@ ste_pre_grant_setup (domid_t id) {
         ret = ACM_ACCESS_DENIED;
     }
     if (obj != NULL)
-        put_domain(obj);
+        rcu_unlock_domain(obj);
     return ret;
 }
 
diff -r 1966270d89d7 -r 8939727a9d93 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/arch/x86/domain.c     Thu Mar 01 11:04:45 2007 +0000
@@ -501,9 +501,12 @@ int arch_set_info_guest(
     unsigned long flags;
     int i, rc = 0, compat;
 
-    /* The context is a compat-mode one if the target domain is compat-mode;
-     * we expect the tools to DTRT even in compat-mode callers. */
-    compat = IS_COMPAT(d);
+    /*
+     * HVM domain builder always builds caller-bitsize vcpu context.
+     * The PV builder is smarter and builds the appropriate type of context for
+     * the target domain. So the compat check here differs in the two cases.
+     */
+    compat = is_hvm_domain(d) ? IS_COMPAT(current->domain) : IS_COMPAT(d);
 
 #ifdef CONFIG_COMPAT
 #define c(fld) (compat ? (c.cmp->fld) : (c.nat->fld))
diff -r 1966270d89d7 -r 8939727a9d93 xen/arch/x86/domctl.c
--- a/xen/arch/x86/domctl.c     Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/arch/x86/domctl.c     Thu Mar 01 11:04:45 2007 +0000
@@ -39,13 +39,13 @@ long arch_do_domctl(
     {
         struct domain *d;
         ret = -ESRCH;
-        d = get_domain_by_id(domctl->domain);
+        d = rcu_lock_domain_by_id(domctl->domain);
         if ( d != NULL )
         {
             ret = paging_domctl(d,
                                 &domctl->u.shadow_op,
                                 guest_handle_cast(u_domctl, void));
-            put_domain(d);
+            rcu_unlock_domain(d);
             copy_to_guest(u_domctl, domctl, 1);
         } 
     }
@@ -62,7 +62,7 @@ long arch_do_domctl(
             break;
 
         ret = -ESRCH;
-        if ( unlikely((d = get_domain_by_id(domctl->domain)) == NULL) )
+        if ( unlikely((d = rcu_lock_domain_by_id(domctl->domain)) == NULL) )
             break;
 
         if ( np == 0 )
@@ -72,7 +72,7 @@ long arch_do_domctl(
         else
             ret = ioports_deny_access(d, fp, fp + np - 1);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -86,7 +86,7 @@ long arch_do_domctl(
         ret = -EINVAL;
 
         if ( unlikely(!mfn_valid(mfn)) ||
-             unlikely((d = get_domain_by_id(dom)) == NULL) )
+             unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
             break;
 
         page = mfn_to_page(mfn);
@@ -119,7 +119,7 @@ long arch_do_domctl(
             put_page(page);
         }
 
-        put_domain(d);
+        rcu_unlock_domain(d);
 
         copy_to_guest(u_domctl, domctl, 1);
     }
@@ -134,13 +134,13 @@ long arch_do_domctl(
         uint32_t *arr32;
         ret = -ESRCH;
 
-        if ( unlikely((d = get_domain_by_id(dom)) == NULL) )
+        if ( unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
             break;
 
         if ( unlikely(num > 1024) )
         {
             ret = -E2BIG;
-            put_domain(d);
+            rcu_unlock_domain(d);
             break;
         }
 
@@ -210,14 +210,14 @@ long arch_do_domctl(
 
         free_xenheap_page(arr32);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
     case XEN_DOMCTL_getmemlist:
     {
         int i;
-        struct domain *d = get_domain_by_id(domctl->domain);
+        struct domain *d = rcu_lock_domain_by_id(domctl->domain);
         unsigned long max_pfns = domctl->u.getmemlist.max_pfns;
         uint64_t mfn;
         struct list_head *list_ent;
@@ -248,14 +248,14 @@ long arch_do_domctl(
             domctl->u.getmemlist.num_pfns = i;
             copy_to_guest(u_domctl, domctl, 1);
 
-            put_domain(d);
+            rcu_unlock_domain(d);
         }
     }
     break;
 
     case XEN_DOMCTL_hypercall_init:
     {
-        struct domain *d = get_domain_by_id(domctl->domain);
+        struct domain *d = rcu_lock_domain_by_id(domctl->domain);
         unsigned long gmfn = domctl->u.hypercall_init.gmfn;
         unsigned long mfn;
         void *hypercall_page;
@@ -270,7 +270,7 @@ long arch_do_domctl(
         if ( !mfn_valid(mfn) ||
              !get_page_and_type(mfn_to_page(mfn), d, PGT_writable_page) )
         {
-            put_domain(d);
+            rcu_unlock_domain(d);
             break;
         }
 
@@ -282,7 +282,7 @@ long arch_do_domctl(
 
         put_page_and_type(mfn_to_page(mfn));
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -296,7 +296,7 @@ long arch_do_domctl(
         c.data = NULL;
         
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
             break;
 
         ret = -EINVAL;
@@ -317,7 +317,7 @@ long arch_do_domctl(
         if ( c.data != NULL )
             xfree(c.data);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -327,7 +327,7 @@ long arch_do_domctl(
         struct domain             *d;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
             break;
 
         ret = -EINVAL;
@@ -369,7 +369,7 @@ long arch_do_domctl(
         if ( c.data != NULL )
             xfree(c.data);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -378,7 +378,7 @@ long arch_do_domctl(
         struct domain *d;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
             break;
 
         switch ( domctl->u.address_size.size )
@@ -396,7 +396,7 @@ long arch_do_domctl(
             break;
         }
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -405,13 +405,13 @@ long arch_do_domctl(
         struct domain *d;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
             break;
 
         domctl->u.address_size.size = BITS_PER_GUEST_LONG(d);
 
         ret = 0;
-        put_domain(d);
+        rcu_unlock_domain(d);
 
         if ( copy_to_guest(u_domctl, domctl, 1) )
             ret = -EFAULT;
diff -r 1966270d89d7 -r 8939727a9d93 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c    Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/arch/x86/hvm/hvm.c    Thu Mar 01 11:04:45 2007 +0000
@@ -711,7 +711,7 @@ static int hvmop_set_pci_intx_level(
     if ( (op.domain > 0) || (op.bus > 0) || (op.device > 31) || (op.intx > 3) )
         return -EINVAL;
 
-    d = get_domain_by_id(op.domid);
+    d = rcu_lock_domain_by_id(op.domid);
     if ( d == NULL )
         return -ESRCH;
 
@@ -734,7 +734,7 @@ static int hvmop_set_pci_intx_level(
     }
 
  out:
-    put_domain(d);
+    rcu_unlock_domain(d);
     return rc;
 }
 
@@ -754,7 +754,7 @@ static int hvmop_set_isa_irq_level(
     if ( op.isa_irq > 15 )
         return -EINVAL;
 
-    d = get_domain_by_id(op.domid);
+    d = rcu_lock_domain_by_id(op.domid);
     if ( d == NULL )
         return -ESRCH;
 
@@ -777,7 +777,7 @@ static int hvmop_set_isa_irq_level(
     }
 
  out:
-    put_domain(d);
+    rcu_unlock_domain(d);
     return rc;
 }
 
@@ -797,7 +797,7 @@ static int hvmop_set_pci_link_route(
     if ( (op.link > 3) || (op.isa_irq > 15) )
         return -EINVAL;
 
-    d = get_domain_by_id(op.domid);
+    d = rcu_lock_domain_by_id(op.domid);
     if ( d == NULL )
         return -ESRCH;
 
@@ -809,7 +809,7 @@ static int hvmop_set_pci_link_route(
     hvm_set_pci_link_route(d, op.link, op.isa_irq);
 
  out:
-    put_domain(d);
+    rcu_unlock_domain(d);
     return rc;
 }
 
@@ -842,7 +842,7 @@ long do_hvm_op(unsigned long op, XEN_GUE
         }
         else if ( IS_PRIV(current->domain) )
         {
-            d = get_domain_by_id(a.domid);
+            d = rcu_lock_domain_by_id(a.domid);
             if ( d == NULL )
                 return -ESRCH;
         }
@@ -899,7 +899,7 @@ long do_hvm_op(unsigned long op, XEN_GUE
         }
 
     param_fail:
-        put_domain(d);
+        rcu_unlock_domain(d);
         break;
     }
 
diff -r 1966270d89d7 -r 8939727a9d93 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/arch/x86/mm.c Thu Mar 01 11:04:45 2007 +0000
@@ -2966,7 +2966,7 @@ long arch_memory_op(int op, XEN_GUEST_HA
         }
         else if ( !IS_PRIV(current->domain) )
             return -EPERM;
-        else if ( (d = get_domain_by_id(xatp.domid)) == NULL )
+        else if ( (d = rcu_lock_domain_by_id(xatp.domid)) == NULL )
             return -ESRCH;
 
         switch ( xatp.space )
@@ -2993,7 +2993,7 @@ long arch_memory_op(int op, XEN_GUEST_HA
 
         if ( !paging_mode_translate(d) || (mfn == 0) )
         {
-            put_domain(d);
+            rcu_unlock_domain(d);
             return -EINVAL;
         }
 
@@ -3021,7 +3021,7 @@ long arch_memory_op(int op, XEN_GUEST_HA
 
         UNLOCK_BIGLOCK(d);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
 
         break;
     }
@@ -3045,14 +3045,14 @@ long arch_memory_op(int op, XEN_GUEST_HA
         }
         else if ( !IS_PRIV(current->domain) )
             return -EPERM;
-        else if ( (d = get_domain_by_id(fmap.domid)) == NULL )
+        else if ( (d = rcu_lock_domain_by_id(fmap.domid)) == NULL )
             return -ESRCH;
 
         rc = copy_from_guest(&d->arch.e820[0], fmap.map.buffer,
                              fmap.map.nr_entries) ? -EFAULT : 0;
         d->arch.nr_e820 = fmap.map.nr_entries;
 
-        put_domain(d);
+        rcu_unlock_domain(d);
         return rc;
     }
 
diff -r 1966270d89d7 -r 8939727a9d93 xen/common/acm_ops.c
--- a/xen/common/acm_ops.c      Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/common/acm_ops.c      Thu Mar 01 11:04:45 2007 +0000
@@ -115,20 +115,20 @@ ret_t do_acm_op(int cmd, XEN_GUEST_HANDL
             ssidref = getssid.id.ssidref;
         else if (getssid.get_ssid_by == ACM_GETBY_domainid)
         {
-            struct domain *subj = get_domain_by_id(getssid.id.domainid);
-            if (!subj)
-            {
-                rc = -ESRCH; /* domain not found */
-                break;
-            }
-            if (subj->ssid == NULL)
-            {
-                put_domain(subj);
+            struct domain *subj = rcu_lock_domain_by_id(getssid.id.domainid);
+            if (!subj)
+            {
+                rc = -ESRCH; /* domain not found */
+                break;
+            }
+            if (subj->ssid == NULL)
+            {
+                rcu_unlock_domain(subj);
                 rc = -ESRCH;
                 break;
             }
             ssidref = ((struct acm_ssid_domain *)(subj->ssid))->ssidref;
-            put_domain(subj);
+            rcu_unlock_domain(subj);
         }
         else
         {
@@ -152,20 +152,20 @@ ret_t do_acm_op(int cmd, XEN_GUEST_HANDL
             ssidref1 = getdecision.id1.ssidref;
         else if (getdecision.get_decision_by1 == ACM_GETBY_domainid)
         {
-            struct domain *subj = get_domain_by_id(getdecision.id1.domainid);
-            if (!subj)
-            {
-                rc = -ESRCH; /* domain not found */
-                break;
-            }
-            if (subj->ssid == NULL)
-            {
-                put_domain(subj);
+            struct domain *subj = 
rcu_lock_domain_by_id(getdecision.id1.domainid);
+            if (!subj)
+            {
+                rc = -ESRCH; /* domain not found */
+                break;
+            }
+            if (subj->ssid == NULL)
+            {
+                rcu_unlock_domain(subj);
                 rc = -ESRCH;
                 break;
             }
             ssidref1 = ((struct acm_ssid_domain *)(subj->ssid))->ssidref;
-            put_domain(subj);
+            rcu_unlock_domain(subj);
         }
         else
         {
@@ -176,7 +176,7 @@ ret_t do_acm_op(int cmd, XEN_GUEST_HANDL
             ssidref2 = getdecision.id2.ssidref;
         else if (getdecision.get_decision_by2 == ACM_GETBY_domainid)
         {
-            struct domain *subj = get_domain_by_id(getdecision.id2.domainid);
+            struct domain *subj = 
rcu_lock_domain_by_id(getdecision.id2.domainid);
             if (!subj)
             {
                 rc = -ESRCH; /* domain not found */
@@ -184,12 +184,12 @@ ret_t do_acm_op(int cmd, XEN_GUEST_HANDL
             }
             if (subj->ssid == NULL)
             {
-                put_domain(subj);
+                rcu_unlock_domain(subj);
                 rc = -ESRCH;
                 break;
             }
             ssidref2 = ((struct acm_ssid_domain *)(subj->ssid))->ssidref;
-            put_domain(subj);
+            rcu_unlock_domain(subj);
         }
         else
         {
diff -r 1966270d89d7 -r 8939727a9d93 xen/common/domain.c
--- a/xen/common/domain.c       Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/common/domain.c       Thu Mar 01 11:04:45 2007 +0000
@@ -236,7 +236,7 @@ struct domain *get_domain_by_id(domid_t 
 }
 
 
-struct domain *find_domain_rcu_lock(domid_t dom)
+struct domain *rcu_lock_domain_by_id(domid_t dom)
 {
     struct domain *d;
 
diff -r 1966270d89d7 -r 8939727a9d93 xen/common/domctl.c
--- a/xen/common/domctl.c       Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/common/domctl.c       Thu Mar 01 11:04:45 2007 +0000
@@ -74,10 +74,10 @@ static inline int is_free_domid(domid_t 
     if ( dom >= DOMID_FIRST_RESERVED )
         return 0;
 
-    if ( (d = get_domain_by_id(dom)) == NULL )
+    if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
         return 1;
 
-    put_domain(d);
+    rcu_unlock_domain(d);
     return 0;
 }
 
@@ -197,7 +197,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
 
     case XEN_DOMCTL_setvcpucontext:
     {
-        struct domain *d = get_domain_by_id(op->domain);
+        struct domain *d = rcu_lock_domain_by_id(op->domain);
         vcpu_guest_context_u c = { .nat = NULL };
         unsigned int vcpu = op->u.vcpucontext.vcpu;
         struct vcpu *v;
@@ -243,13 +243,13 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
 
     svc_out:
         xfree(c.nat);
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
     case XEN_DOMCTL_pausedomain:
     {
-        struct domain *d = get_domain_by_id(op->domain);
+        struct domain *d = rcu_lock_domain_by_id(op->domain);
         ret = -ESRCH;
         if ( d != NULL )
         {
@@ -259,14 +259,14 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
                 domain_pause_by_systemcontroller(d);
                 ret = 0;
             }
-            put_domain(d);
+            rcu_unlock_domain(d);
         }
     }
     break;
 
     case XEN_DOMCTL_unpausedomain:
     {
-        struct domain *d = get_domain_by_id(op->domain);
+        struct domain *d = rcu_lock_domain_by_id(op->domain);
         ret = -ESRCH;
         if ( d != NULL )
         {
@@ -277,14 +277,14 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
                 domain_unpause_by_systemcontroller(d);
                 ret = 0;
             }
-            put_domain(d);
+            rcu_unlock_domain(d);
         }
     }
     break;
 
     case XEN_DOMCTL_resumedomain:
     {
-        struct domain *d = get_domain_by_id(op->domain);
+        struct domain *d = rcu_lock_domain_by_id(op->domain);
         struct vcpu *v;
 
         ret = -ESRCH;
@@ -294,7 +294,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
             if ( test_and_clear_bit(_DOMF_shutdown, &d->domain_flags) )
                 for_each_vcpu ( d, v )
                     vcpu_wake(v);
-            put_domain(d);
+            rcu_unlock_domain(d);
         }
     }
     break;
@@ -363,7 +363,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
             break;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(op->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
             break;
 
         /* Needed, for example, to ensure writable p.t. state is synced. */
@@ -392,13 +392,13 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
 
     maxvcpu_out:
         domain_unpause(d);
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
     case XEN_DOMCTL_destroydomain:
     {
-        struct domain *d = get_domain_by_id(op->domain);
+        struct domain *d = rcu_lock_domain_by_id(op->domain);
         ret = -ESRCH;
         if ( d != NULL )
         {
@@ -408,7 +408,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
                 domain_kill(d);
                 ret = 0;
             }
-            put_domain(d);
+            rcu_unlock_domain(d);
         }
     }
     break;
@@ -417,7 +417,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
     case XEN_DOMCTL_getvcpuaffinity:
     {
         domid_t dom = op->domain;
-        struct domain *d = get_domain_by_id(dom);
+        struct domain *d = rcu_lock_domain_by_id(dom);
         struct vcpu *v;
         cpumask_t new_affinity;
 
@@ -447,7 +447,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         }
 
     vcpuaffinity_out:
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -456,14 +456,14 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         struct domain *d;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(op->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
             break;
 
         ret = sched_adjust(d, &op->u.scheduler_op);
         if ( copy_to_guest(u_domctl, op, 1) )
             ret = -EFAULT;
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -510,7 +510,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         struct vcpu         *v;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(op->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
             break;
 
         ret = -EINVAL;
@@ -555,7 +555,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
 
     getvcpucontext_out:
         xfree(c.nat);
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -566,7 +566,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         struct vcpu_runstate_info runstate;
 
         ret = -ESRCH;
-        if ( (d = get_domain_by_id(op->domain)) == NULL )
+        if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
             break;
 
         ret = -EINVAL;
@@ -590,7 +590,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
             ret = -EFAULT;
 
     getvcpuinfo_out:
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -600,7 +600,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         unsigned long new_max;
 
         ret = -ESRCH;
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if ( d == NULL )
             break;
 
@@ -615,7 +615,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         }
         spin_unlock(&d->page_alloc_lock);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -623,12 +623,12 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
     {
         struct domain *d;
         ret = -ESRCH;
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if ( d != NULL )
         {
             memcpy(d->handle, op->u.setdomainhandle.handle,
                    sizeof(xen_domain_handle_t));
-            put_domain(d);
+            rcu_unlock_domain(d);
             ret = 0;
         }
     }
@@ -638,14 +638,14 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
     {
         struct domain *d;
         ret = -ESRCH;
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if ( d != NULL )
         {
             if ( op->u.setdebugging.enable )
                 set_bit(_DOMF_debugging, &d->domain_flags);
             else
                 clear_bit(_DOMF_debugging, &d->domain_flags);
-            put_domain(d);
+            rcu_unlock_domain(d);
             ret = 0;
         }
     }
@@ -661,7 +661,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
             break;
 
         ret = -ESRCH;
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if ( d == NULL )
             break;
 
@@ -670,7 +670,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         else
             ret = irq_deny_access(d, pirq);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -685,7 +685,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
             break;
 
         ret = -ESRCH;
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if ( d == NULL )
             break;
 
@@ -694,7 +694,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         else
             ret = iomem_deny_access(d, mfn, mfn + nr_mfns - 1);
 
-        put_domain(d);
+        rcu_unlock_domain(d);
     }
     break;
 
@@ -703,11 +703,11 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         struct domain *d;
 
         ret = -ESRCH;
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if ( d != NULL )
         {
             d->time_offset_seconds = op->u.settimeoffset.time_offset_seconds;
-            put_domain(d);
+            rcu_unlock_domain(d);
             ret = 0;
         }
     }
diff -r 1966270d89d7 -r 8939727a9d93 xen/common/event_channel.c
--- a/xen/common/event_channel.c        Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/common/event_channel.c        Thu Mar 01 11:04:45 2007 +0000
@@ -112,7 +112,7 @@ static long evtchn_alloc_unbound(evtchn_
     else if ( !IS_PRIV(current->domain) )
         return -EPERM;
 
-    if ( (d = get_domain_by_id(dom)) == NULL )
+    if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
         return -ESRCH;
 
     spin_lock(&d->evtchn_lock);
@@ -130,7 +130,7 @@ static long evtchn_alloc_unbound(evtchn_
  out:
     spin_unlock(&d->evtchn_lock);
 
-    put_domain(d);
+    rcu_unlock_domain(d);
 
     return rc;
 }
@@ -150,7 +150,7 @@ static long evtchn_bind_interdomain(evtc
     if ( rdom == DOMID_SELF )
         rdom = current->domain->domain_id;
 
-    if ( (rd = get_domain_by_id(rdom)) == NULL )
+    if ( (rd = rcu_lock_domain_by_id(rdom)) == NULL )
         return -ESRCH;
 
     /* Avoid deadlock by first acquiring lock of domain with smaller id. */
@@ -198,7 +198,7 @@ static long evtchn_bind_interdomain(evtc
     if ( ld != rd )
         spin_unlock(&rd->evtchn_lock);
     
-    put_domain(rd);
+    rcu_unlock_domain(rd);
 
     return rc;
 }
@@ -598,7 +598,7 @@ static long evtchn_status(evtchn_status_
     else if ( !IS_PRIV(current->domain) )
         return -EPERM;
 
-    if ( (d = get_domain_by_id(dom)) == NULL )
+    if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
         return -ESRCH;
 
     spin_lock(&d->evtchn_lock);
@@ -645,7 +645,7 @@ static long evtchn_status(evtchn_status_
 
  out:
     spin_unlock(&d->evtchn_lock);
-    put_domain(d);
+    rcu_unlock_domain(d);
     return rc;
 }
 
@@ -746,13 +746,13 @@ static long evtchn_reset(evtchn_reset_t 
     else if ( !IS_PRIV(current->domain) )
         return -EPERM;
 
-    if ( (d = get_domain_by_id(dom)) == NULL )
+    if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
         return -ESRCH;
 
     for ( i = 0; port_is_valid(d, i); i++ )
         (void)__evtchn_close(d, i);
 
-    put_domain(d);
+    rcu_unlock_domain(d);
 
     return 0;
 }
diff -r 1966270d89d7 -r 8939727a9d93 xen/common/grant_table.c
--- a/xen/common/grant_table.c  Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/common/grant_table.c  Thu Mar 01 11:04:45 2007 +0000
@@ -227,10 +227,8 @@ __gnttab_map_grant_ref(
         return;
     }
 
-    if ( unlikely((rd = get_domain_by_id(op->dom)) == NULL) )
-    {
-        if ( rd != NULL )
-            put_domain(rd);
+    if ( unlikely((rd = rcu_lock_domain_by_id(op->dom)) == NULL) )
+    {
         gdprintk(XENLOG_INFO, "Could not find domain %d\n", op->dom);
         op->status = GNTST_bad_domain;
         return;
@@ -238,7 +236,7 @@ __gnttab_map_grant_ref(
 
     if ( unlikely((handle = get_maptrack_handle(ld->grant_table)) == -1) )
     {
-        put_domain(rd);
+        rcu_unlock_domain(rd);
         gdprintk(XENLOG_INFO, "Failed to obtain maptrack handle.\n");
         op->status = GNTST_no_device_space;
         return;
@@ -368,7 +366,7 @@ __gnttab_map_grant_ref(
     op->handle       = handle;
     op->status       = GNTST_okay;
 
-    put_domain(rd);
+    rcu_unlock_domain(rd);
     return;
 
  undo_out:
@@ -395,7 +393,7 @@ __gnttab_map_grant_ref(
     spin_unlock(&rd->grant_table->lock);
     op->status = rc;
     put_maptrack_handle(ld->grant_table, handle);
-    put_domain(rd);
+    rcu_unlock_domain(rd);
 }
 
 static long
@@ -455,7 +453,7 @@ __gnttab_unmap_grant_ref(
     ref   = map->ref;
     flags = map->flags;
 
-    if ( unlikely((rd = get_domain_by_id(dom)) == NULL) )
+    if ( unlikely((rd = rcu_lock_domain_by_id(dom)) == NULL) )
     {
         /* This can happen when a grant is implicitly unmapped. */
         gdprintk(XENLOG_INFO, "Could not find domain %d\n", dom);
@@ -536,7 +534,7 @@ __gnttab_unmap_grant_ref(
  unmap_out:
     op->status = rc;
     spin_unlock(&rd->grant_table->lock);
-    put_domain(rd);
+    rcu_unlock_domain(rd);
 }
 
 static long
@@ -658,7 +656,7 @@ gnttab_setup_table(
         goto out;
     }
 
-    if ( unlikely((d = get_domain_by_id(dom)) == NULL) )
+    if ( unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
     {
         gdprintk(XENLOG_INFO, "Bad domid %d.\n", dom);
         op.status = GNTST_bad_domain;
@@ -689,7 +687,7 @@ gnttab_setup_table(
  setup_unlock_out:
     spin_unlock(&d->grant_table->lock);
 
-    put_domain(d);
+    rcu_unlock_domain(d);
 
  out:
     if ( unlikely(copy_to_guest(uop, &op, 1)) )
@@ -726,7 +724,7 @@ gnttab_query_size(
         goto query_out;
     }
 
-    if ( unlikely((d = get_domain_by_id(dom)) == NULL) )
+    if ( unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
     {
         gdprintk(XENLOG_INFO, "Bad domid %d.\n", dom);
         op.status = GNTST_bad_domain;
@@ -741,7 +739,7 @@ gnttab_query_size(
 
     spin_unlock(&d->grant_table->lock);
 
-    put_domain(d);
+    rcu_unlock_domain(d);
 
  query_out:
     if ( unlikely(copy_to_guest(uop, &op, 1)) )
@@ -869,7 +867,7 @@ gnttab_transfer(
         }
 
         /* Find the target domain. */
-        if ( unlikely((e = get_domain_by_id(gop.domid)) == NULL) )
+        if ( unlikely((e = rcu_lock_domain_by_id(gop.domid)) == NULL) )
         {
             gdprintk(XENLOG_INFO, "gnttab_transfer: can't find domain %d\n",
                     gop.domid);
@@ -897,7 +895,7 @@ gnttab_transfer(
                         "or is dying (%lx)\n",
                         e->tot_pages, e->max_pages, gop.ref, e->domain_flags);
             spin_unlock(&e->page_alloc_lock);
-            put_domain(e);
+            rcu_unlock_domain(e);
             page->count_info &= ~(PGC_count_mask|PGC_allocated);
             free_domheap_page(page);
             gop.status = GNTST_general_error;
@@ -925,7 +923,7 @@ gnttab_transfer(
 
         spin_unlock(&e->grant_table->lock);
 
-        put_domain(e);
+        rcu_unlock_domain(e);
 
         gop.status = GNTST_okay;
 
@@ -1092,7 +1090,7 @@ __gnttab_copy(
         sd = current->domain;
         get_knownalive_domain(sd);
     }
-    else if ( (sd = get_domain_by_id(op->source.domid)) == NULL )
+    else if ( (sd = rcu_lock_domain_by_id(op->source.domid)) == NULL )
     {
         PIN_FAIL(error_out, GNTST_bad_domain,
                  "couldn't find %d\n", op->source.domid);
@@ -1103,7 +1101,7 @@ __gnttab_copy(
         dd = current->domain;
         get_knownalive_domain(dd);
     }
-    else if ( (dd = get_domain_by_id(op->dest.domid)) == NULL )
+    else if ( (dd = rcu_lock_domain_by_id(op->dest.domid)) == NULL )
     {
         PIN_FAIL(error_out, GNTST_bad_domain,
                  "couldn't find %d\n", op->dest.domid);
@@ -1173,9 +1171,9 @@ __gnttab_copy(
     if ( have_d_grant )
         __release_grant_for_copy(dd, op->dest.u.ref, 0);
     if ( sd )
-        put_domain(sd);
+        rcu_unlock_domain(sd);
     if ( dd )
-        put_domain(dd);
+        rcu_unlock_domain(dd);
     op->status = rc;
 }
 
@@ -1397,7 +1395,7 @@ gnttab_release_mappings(
                 "flags:(%x) dom:(%hu)\n",
                 handle, ref, map->flags, map->domid);
 
-        rd = get_domain_by_id(map->domid);
+        rd = rcu_lock_domain_by_id(map->domid);
         if ( rd == NULL )
         {
             /* Nothing to clear up... */
@@ -1453,7 +1451,7 @@ gnttab_release_mappings(
 
         spin_unlock(&rd->grant_table->lock);
 
-        put_domain(rd);
+        rcu_unlock_domain(rd);
 
         map->flags = 0;
     }
diff -r 1966270d89d7 -r 8939727a9d93 xen/common/memory.c
--- a/xen/common/memory.c       Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/common/memory.c       Thu Mar 01 11:04:45 2007 +0000
@@ -244,12 +244,12 @@ static long translate_gpfn_list(
     else if ( !IS_PRIV(current->domain) )
         return -EPERM;
 
-    if ( (d = get_domain_by_id(op.domid)) == NULL )
+    if ( (d = rcu_lock_domain_by_id(op.domid)) == NULL )
         return -ESRCH;
 
     if ( !shadow_mode_translate(d) )
     {
-        put_domain(d);
+        rcu_unlock_domain(d);
         return -EINVAL;
     }
 
@@ -257,14 +257,14 @@ static long translate_gpfn_list(
     {
         if ( hypercall_preempt_check() )
         {
-            put_domain(d);
+            rcu_unlock_domain(d);
             *progress = i;
             return -EAGAIN;
         }
 
         if ( unlikely(__copy_from_guest_offset(&gpfn, op.gpfn_list, i, 1)) )
         {
-            put_domain(d);
+            rcu_unlock_domain(d);
             return -EFAULT;
         }
 
@@ -272,12 +272,12 @@ static long translate_gpfn_list(
 
         if ( unlikely(__copy_to_guest_offset(op.mfn_list, i, &mfn, 1)) )
         {
-            put_domain(d);
+            rcu_unlock_domain(d);
             return -EFAULT;
         }
     }
 
-    put_domain(d);
+    rcu_unlock_domain(d);
     return 0;
 }
 
@@ -545,7 +545,7 @@ long do_memory_op(unsigned long cmd, XEN
         if ( likely(reservation.domid == DOMID_SELF) )
             d = current->domain;
         else if ( !IS_PRIV(current->domain) ||
-                  ((d = get_domain_by_id(reservation.domid)) == NULL) )
+                  ((d = rcu_lock_domain_by_id(reservation.domid)) == NULL) )
             return start_extent;
         args.domain = d;
 
@@ -563,7 +563,7 @@ long do_memory_op(unsigned long cmd, XEN
         }
 
         if ( unlikely(reservation.domid != DOMID_SELF) )
-            put_domain(d);
+            rcu_unlock_domain(d);
 
         rc = args.nr_done;
 
@@ -591,13 +591,13 @@ long do_memory_op(unsigned long cmd, XEN
             d = current->domain;
         else if ( !IS_PRIV(current->domain) )
             return -EPERM;
-        else if ( (d = get_domain_by_id(domid)) == NULL )
+        else if ( (d = rcu_lock_domain_by_id(domid)) == NULL )
             return -ESRCH;
 
         rc = (op == XENMEM_current_reservation) ? d->tot_pages : d->max_pages;
 
         if ( unlikely(domid != DOMID_SELF) )
-            put_domain(d);
+            rcu_unlock_domain(d);
 
         break;
 
diff -r 1966270d89d7 -r 8939727a9d93 xen/include/acm/acm_hooks.h
--- a/xen/include/acm/acm_hooks.h       Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/include/acm/acm_hooks.h       Thu Mar 01 11:04:45 2007 +0000
@@ -241,18 +241,18 @@ static inline int acm_pre_domctl(struct 
                     __func__);
             return -EACCES;
         }
-        d = get_domain_by_id(op->domain);
+        d = rcu_lock_domain_by_id(op->domain);
         if (d != NULL) {
             *ssid = d->ssid; /* save for post destroy when d is gone */
             if (*ssid == NULL) {
                 printk("%s: Warning. Destroying domain without ssid 
pointer.\n", 
                        __func__);
-                put_domain(d);
+                domain_rcu_lock(d);
                 return -EACCES;
             }
             d->ssid = NULL; /* make sure it's not used any more */
              /* no policy-specific hook */
-            put_domain(d);
+            domain_rcu_lock(d);
             ret = 0;
         }
         break;
diff -r 1966270d89d7 -r 8939727a9d93 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h   Thu Mar 01 11:04:23 2007 +0000
+++ b/xen/include/xen/sched.h   Thu Mar 01 11:04:45 2007 +0000
@@ -270,16 +270,16 @@ int construct_dom0(
     char *cmdline);
 
 /*
- * find_domain_rcu_lock() is more efficient than get_domain_by_id().
+ * rcu_lock_domain_by_id() is more efficient than get_domain_by_id().
  * This is the preferred function if the returned domain reference
  * is short lived,  but it cannot be used if the domain reference needs 
  * to be kept beyond the current scope (e.g., across a softirq).
- * The returned domain reference must be discarded using domain_rcu_unlock().
- */
-struct domain *find_domain_rcu_lock(domid_t dom);
-
-/* Finish a RCU critical region started by find_domain_rcu_lock(). */
-static inline void domain_rcu_unlock(struct domain *d)
+ * The returned domain reference must be discarded using rcu_unlock_domain().
+ */
+struct domain *rcu_lock_domain_by_id(domid_t dom);
+
+/* Finish a RCU critical region started by rcu_lock_domain_by_id(). */
+static inline void rcu_unlock_domain(struct domain *d)
 {
     rcu_read_unlock(&domlist_read_lock);
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.