# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1200628526 -32400 # Node ID ac12c9a9a6b954b87a0c6499a9db1002d604cd02 # Parent 7643472d6b436a7433b98e8708979e2674fa9047 Use rcu where possible. This is for consistency. PATCHNAME: use_rcu Signed-off-by: Isaku Yamahata diff --git a/xen/arch/ia64/vmx/vmx_hypercall.c b/xen/arch/ia64/vmx/vmx_hypercall.c --- a/xen/arch/ia64/vmx/vmx_hypercall.c +++ b/xen/arch/ia64/vmx/vmx_hypercall.c @@ -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; } @@ -167,7 +167,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 --git a/xen/arch/ia64/xen/dom0_ops.c b/xen/arch/ia64/xen/dom0_ops.c --- a/xen/arch/ia64/xen/dom0_ops.c +++ b/xen/arch/ia64/xen/dom0_ops.c @@ -44,7 +44,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; @@ -72,15 +72,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; @@ -155,7 +154,7 @@ long arch_do_domctl(xen_domctl_t *op, XE } } - put_domain(d); + rcu_unlock_domain(d); } break; @@ -163,11 +162,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); if (copy_to_guest(u_domctl, op, 1)) ret = -EFAULT; } @@ -182,7 +181,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; @@ -195,7 +194,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; @@ -205,7 +204,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; @@ -234,7 +233,7 @@ long arch_do_domctl(xen_domctl_t *op, XE } sendtrigger_out: - put_domain(d); + rcu_unlock_domain(d); } break; @@ -347,7 +346,7 @@ long arch_do_domctl(xen_domctl_t *op, XE case XEN_DOMCTL_set_opt_feature: { struct xen_ia64_opt_feature *optf = &op->u.set_opt_feature.optf; - struct domain *d = get_domain_by_id(op->domain); + struct domain *d = rcu_lock_domain_by_id(op->domain); if (d == NULL) { ret = -EINVAL; @@ -355,7 +354,7 @@ long arch_do_domctl(xen_domctl_t *op, XE } ret = domain_opt_feature(d, optf); - put_domain(d); + rcu_unlock_domain(d); } break; diff --git a/xen/arch/ia64/xen/mm.c b/xen/arch/ia64/xen/mm.c --- a/xen/arch/ia64/xen/mm.c +++ b/xen/arch/ia64/xen/mm.c @@ -1473,7 +1473,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: @@ -1489,7 +1489,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)) @@ -1512,7 +1512,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; } @@ -2785,17 +2785,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; } @@ -2821,7 +2820,7 @@ arch_memory_op(int op, XEN_GUEST_HANDLE( } if (mfn == 0) { - put_domain(d); + rcu_unlock_domain(d); return -EINVAL; } @@ -2853,7 +2852,7 @@ arch_memory_op(int op, XEN_GUEST_HANDLE( out: UNLOCK_BIGLOCK(d); - put_domain(d); + rcu_unlock_domain(d); break; }