[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] argo: don't pointlessly use get_domain_by_id()
commit ff20706cd7da8de9282cb6c0d37bde80630b0b86 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Jan 14 13:02:35 2021 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Jan 14 13:02:35 2021 +0100 argo: don't pointlessly use get_domain_by_id() For short-lived references rcu_lock_domain_by_id() is the better (slightly cheaper) alternative. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Christopher Clark <christopher.w.clark@xxxxxxxxx> --- xen/common/argo.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/xen/common/argo.c b/xen/common/argo.c index aa3443a377..49be715f63 100644 --- a/xen/common/argo.c +++ b/xen/common/argo.c @@ -445,13 +445,13 @@ signal_domain(struct domain *d) static void signal_domid(domid_t domain_id) { - struct domain *d = get_domain_by_id(domain_id); + struct domain *d = rcu_lock_domain_by_id(domain_id); if ( !d ) return; signal_domain(d); - put_domain(d); + rcu_unlock_domain(d); } static void @@ -983,7 +983,7 @@ ringbuf_insert(const struct domain *d, struct argo_ring_info *ring_info, static void wildcard_pending_list_remove(domid_t domain_id, struct pending_ent *ent) { - struct domain *d = get_domain_by_id(domain_id); + struct domain *d = rcu_lock_domain_by_id(domain_id); if ( !d ) return; @@ -996,13 +996,13 @@ wildcard_pending_list_remove(domid_t domain_id, struct pending_ent *ent) list_del(&ent->wildcard_node); spin_unlock(&d->argo->wildcard_L2_lock); } - put_domain(d); + rcu_unlock_domain(d); } static void wildcard_pending_list_insert(domid_t domain_id, struct pending_ent *ent) { - struct domain *d = get_domain_by_id(domain_id); + struct domain *d = rcu_lock_domain_by_id(domain_id); if ( !d ) return; @@ -1015,7 +1015,7 @@ wildcard_pending_list_insert(domid_t domain_id, struct pending_ent *ent) list_add(&ent->wildcard_node, &d->argo->wildcard_pend_list); spin_unlock(&d->argo->wildcard_L2_lock); } - put_domain(d); + rcu_unlock_domain(d); } static void @@ -1283,7 +1283,7 @@ partner_rings_remove(struct domain *src_d) struct argo_send_info, node)) ) { - struct domain *dst_d = get_domain_by_id(send_info->id.domain_id); + struct domain *dst_d = rcu_lock_domain_by_id(send_info->id.domain_id); if ( dst_d && dst_d->argo ) { @@ -1302,7 +1302,7 @@ partner_rings_remove(struct domain *src_d) ASSERT_UNREACHABLE(); if ( dst_d ) - put_domain(dst_d); + rcu_unlock_domain(dst_d); list_del(&send_info->node); xfree(send_info); @@ -1330,7 +1330,7 @@ fill_ring_data(const struct domain *currd, ent.flags = 0; - dst_d = get_domain_by_id(ent.ring.domain_id); + dst_d = rcu_lock_domain_by_id(ent.ring.domain_id); if ( !dst_d || !dst_d->argo ) goto out; @@ -1340,10 +1340,7 @@ fill_ring_data(const struct domain *currd, */ ret = xsm_argo_send(currd, dst_d); if ( ret ) - { - put_domain(dst_d); - return ret; - } + goto out; read_lock(&dst_d->argo->rings_L2_rwlock); @@ -1405,7 +1402,7 @@ fill_ring_data(const struct domain *currd, out: if ( dst_d ) - put_domain(dst_d); + rcu_unlock_domain(dst_d); if ( !ret && (__copy_field_to_guest(data_ent_hnd, &ent, flags) || __copy_field_to_guest(data_ent_hnd, &ent, max_message_size)) ) @@ -1569,7 +1566,7 @@ unregister_ring(struct domain *currd, if ( ring_id.partner_id == XEN_ARGO_DOMID_ANY ) goto out; - dst_d = get_domain_by_id(ring_id.partner_id); + dst_d = rcu_lock_domain_by_id(ring_id.partner_id); if ( !dst_d || !dst_d->argo ) { ASSERT_UNREACHABLE(); @@ -1592,7 +1589,7 @@ unregister_ring(struct domain *currd, read_unlock(&L1_global_argo_rwlock); if ( dst_d ) - put_domain(dst_d); + rcu_unlock_domain(dst_d); xfree(send_info); @@ -1663,7 +1660,7 @@ register_ring(struct domain *currd, } else { - dst_d = get_domain_by_id(reg.partner_id); + dst_d = rcu_lock_domain_by_id(reg.partner_id); if ( !dst_d ) { argo_dprintk("!dst_d, ESRCH\n"); @@ -1845,7 +1842,7 @@ register_ring(struct domain *currd, out: if ( dst_d ) - put_domain(dst_d); + rcu_unlock_domain(dst_d); if ( ret ) xfree(send_info); @@ -1988,7 +1985,7 @@ sendv(struct domain *src_d, xen_argo_addr_t *src_addr, src_id.domain_id = src_d->domain_id; src_id.partner_id = dst_addr->domain_id; - dst_d = get_domain_by_id(dst_addr->domain_id); + dst_d = rcu_lock_domain_by_id(dst_addr->domain_id); if ( !dst_d ) return -ESRCH; @@ -1998,7 +1995,7 @@ sendv(struct domain *src_d, xen_argo_addr_t *src_addr, gprintk(XENLOG_ERR, "argo: XSM REJECTED %i -> %i\n", src_d->domain_id, dst_d->domain_id); - put_domain(dst_d); + rcu_unlock_domain(dst_d); return ret; } @@ -2068,7 +2065,7 @@ sendv(struct domain *src_d, xen_argo_addr_t *src_addr, signal_domain(dst_d); if ( dst_d ) - put_domain(dst_d); + rcu_unlock_domain(dst_d); return ( ret < 0 ) ? ret : len; } -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |