# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1179715685 -32400 # Node ID 28bedbf25847525732c9cee91017196c28de6a93 # Parent 1f567858b31f3694658def5bbae7c0289682b7f7 use rcu_lock_domain_by_id() and its variants if possible. PATCHNAME: use_rcu Signed-off-by: Isaku Yamahata diff -r 1f567858b31f -r 28bedbf25847 xen/arch/ia64/vmx/vmx_hypercall.c --- a/xen/arch/ia64/vmx/vmx_hypercall.c Thu May 24 17:14:55 2007 +0900 +++ b/xen/arch/ia64/vmx/vmx_hypercall.c Mon May 21 11:48:05 2007 +0900 @@ -53,7 +53,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; @@ -65,7 +65,7 @@ static int hvmop_set_isa_irq_level( viosapic_set_irq(d, op.isa_irq, op.level); out: - put_domain(d); + rcu_unlock_domain(d); return rc; } @@ -85,7 +85,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; @@ -97,7 +97,7 @@ static int hvmop_set_pci_intx_level( viosapic_set_pci_irq(d, op.device, op.intx, op.level); out: - put_domain(d); + rcu_unlock_domain(d); return rc; } @@ -122,10 +122,10 @@ do_hvm_op(unsigned long op, XEN_GUEST_HA return -EINVAL; if (a.domid == DOMID_SELF) { - d = get_current_domain(); + d = rcu_lock_current_domain(); } 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; } @@ -141,7 +141,7 @@ do_hvm_op(unsigned long op, XEN_GUEST_HA rc = copy_to_guest(arg, &a, 1) ? -EFAULT : 0; } - put_domain(d); + rcu_unlock_domain(d); break; } diff -r 1f567858b31f -r 28bedbf25847 xen/arch/ia64/xen/dom0_ops.c --- a/xen/arch/ia64/xen/dom0_ops.c Thu May 24 17:14:55 2007 +0900 +++ b/xen/arch/ia64/xen/dom0_ops.c Mon May 21 11:48:05 2007 +0900 @@ -40,7 +40,7 @@ long arch_do_domctl(xen_domctl_t *op, XE case XEN_DOMCTL_getmemlist: { unsigned long i; - struct domain *d = get_domain_by_id(op->domain); + struct domain *d = rcu_lock_domain_by_id(op->domain); unsigned long start_page = op->u.getmemlist.start_pfn; unsigned long nr_pages = op->u.getmemlist.max_pfns; uint64_t mfn; @@ -68,15 +68,14 @@ long arch_do_domctl(xen_domctl_t *op, XE op->u.getmemlist.num_pfns = i; if (copy_to_guest(u_domctl, op, 1)) ret = -EFAULT; - - put_domain(d); + rcu_unlock_domain(d); } break; case XEN_DOMCTL_arch_setup: { xen_domctl_arch_setup_t *ds = &op->u.arch_setup; - struct domain *d = get_domain_by_id(op->domain); + struct domain *d = rcu_lock_domain_by_id(op->domain); if ( d == NULL) { ret = -EINVAL; @@ -133,7 +132,7 @@ long arch_do_domctl(xen_domctl_t *op, XE } } - put_domain(d); + rcu_unlock_domain(d); } break; @@ -141,11 +140,11 @@ long arch_do_domctl(xen_domctl_t *op, XE { struct domain *d; ret = -ESRCH; - d = get_domain_by_id(op->domain); + d = rcu_lock_domain_by_id(op->domain); if ( d != NULL ) { ret = shadow_mode_control(d, &op->u.shadow_op); - put_domain(d); + rcu_unlock_domain(d); copy_to_guest(u_domctl, op, 1); } } @@ -159,7 +158,7 @@ long arch_do_domctl(xen_domctl_t *op, XE unsigned int lp = fp + np - 1; ret = -ESRCH; - d = get_domain_by_id(op->domain); + d = rcu_lock_domain_by_id(op->domain); if (unlikely(d == NULL)) break; @@ -172,7 +171,7 @@ long arch_do_domctl(xen_domctl_t *op, XE ret = ioports_deny_access(d, fp, lp); } - put_domain(d); + rcu_unlock_domain(d); } break; @@ -182,7 +181,7 @@ long arch_do_domctl(xen_domctl_t *op, XE struct vcpu *v; ret = -ESRCH; - d = get_domain_by_id(op->domain); + d = rcu_lock_domain_by_id(op->domain); if ( d == NULL ) break; @@ -211,7 +210,7 @@ long arch_do_domctl(xen_domctl_t *op, XE } sendtrigger_out: - put_domain(d); + rcu_unlock_domain(d); } break; diff -r 1f567858b31f -r 28bedbf25847 xen/arch/ia64/xen/mm.c --- a/xen/arch/ia64/xen/mm.c Thu May 24 17:14:55 2007 +0900 +++ b/xen/arch/ia64/xen/mm.c Mon May 21 11:48:05 2007 +0900 @@ -1305,7 +1305,7 @@ __dom0vp_add_physmap(struct domain* d, u if (flags & (ASSIGN_nocache | ASSIGN_pgc_allocated)) return -EINVAL; - rd = get_domain_by_id(domid); + rd = rcu_lock_domain_by_id(domid); if (unlikely(rd == NULL)) { switch (domid) { case DOMID_XEN: @@ -1321,7 +1321,7 @@ __dom0vp_add_physmap(struct domain* d, u return -ESRCH; } BUG_ON(rd == NULL); - get_knownalive_domain(rd); + rcu_lock_domain(rd); } if (unlikely(rd == d)) @@ -1344,7 +1344,7 @@ __dom0vp_add_physmap(struct domain* d, u //don't update p2m table because this page belongs to rd, not d. perfc_incr(dom0vp_add_physmap); out1: - put_domain(rd); + rcu_unlock_domain(rd); return error; } @@ -2078,17 +2078,16 @@ arch_memory_op(int op, XEN_GUEST_HANDLE( if (copy_from_guest(&xatp, arg, 1)) return -EFAULT; - if (xatp.domid == DOMID_SELF) { - d = get_current_domain(); - } + if (xatp.domid == DOMID_SELF) + d = rcu_lock_current_domain(); 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; /* This hypercall is used for VT-i domain only */ if (!VMX_DOMAIN(d->vcpu[0])) { - put_domain(d); + rcu_unlock_domain(d); return -ENOSYS; } @@ -2114,7 +2113,7 @@ arch_memory_op(int op, XEN_GUEST_HANDLE( } if (mfn == 0) { - put_domain(d); + rcu_unlock_domain(d); return -EINVAL; } @@ -2146,7 +2145,7 @@ arch_memory_op(int op, XEN_GUEST_HANDLE( out: UNLOCK_BIGLOCK(d); - put_domain(d); + rcu_unlock_domain(d); break; }