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
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;
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;
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
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 )
{
ASSERT_UNREACHABLE();
if ( dst_d )
- put_domain(dst_d);
+ rcu_unlock_domain(dst_d);
list_del(&send_info->node);
xfree(send_info);
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;
*/
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);
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)) )
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();
read_unlock(&L1_global_argo_rwlock);
if ( dst_d )
- put_domain(dst_d);
+ rcu_unlock_domain(dst_d);
xfree(send_info);
}
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");
out:
if ( dst_d )
- put_domain(dst_d);
+ rcu_unlock_domain(dst_d);
if ( ret )
xfree(send_info);
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;
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;
}
signal_domain(dst_d);
if ( dst_d )
- put_domain(dst_d);
+ rcu_unlock_domain(dst_d);
return ( ret < 0 ) ? ret : len;
}