Lines Matching refs:mc

116 	struct ucma_multicast	*mc;  member
272 uevent->mc = (struct ucma_multicast *) in ucma_create_uevent()
274 uevent->resp.uid = uevent->mc->uid; in ucma_create_uevent()
275 uevent->resp.id = uevent->mc->id; in ucma_create_uevent()
411 if (uevent->mc) in ucma_get_event()
412 uevent->mc->events_reported++; in ucma_get_event()
490 struct ucma_multicast *mc, *tmp; in ucma_cleanup_multicast() local
493 list_for_each_entry_safe(mc, tmp, &ctx->mc_list, list) { in ucma_cleanup_multicast()
494 list_del(&mc->list); in ucma_cleanup_multicast()
499 __xa_erase(&multicast_table, mc->id); in ucma_cleanup_multicast()
500 kfree(mc); in ucma_cleanup_multicast()
505 static void ucma_cleanup_mc_events(struct ucma_multicast *mc) in ucma_cleanup_mc_events() argument
509 rdma_lock_handler(mc->ctx->cm_id); in ucma_cleanup_mc_events()
510 mutex_lock(&mc->ctx->file->mut); in ucma_cleanup_mc_events()
511 list_for_each_entry_safe(uevent, tmp, &mc->ctx->file->event_list, list) { in ucma_cleanup_mc_events()
512 if (uevent->mc != mc) in ucma_cleanup_mc_events()
518 mutex_unlock(&mc->ctx->file->mut); in ucma_cleanup_mc_events()
519 rdma_unlock_handler(mc->ctx->cm_id); in ucma_cleanup_mc_events()
1441 struct ucma_multicast *mc; in ucma_process_join() local
1464 mc = kzalloc(sizeof(*mc), GFP_KERNEL); in ucma_process_join()
1465 if (!mc) { in ucma_process_join()
1470 mc->ctx = ctx; in ucma_process_join()
1471 mc->join_state = join_state; in ucma_process_join()
1472 mc->uid = cmd->uid; in ucma_process_join()
1473 memcpy(&mc->addr, addr, cmd->addr_size); in ucma_process_join()
1476 if (__xa_alloc(&multicast_table, &mc->id, NULL, xa_limit_32b, in ucma_process_join()
1482 list_add_tail(&mc->list, &ctx->mc_list); in ucma_process_join()
1486 ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *)&mc->addr, in ucma_process_join()
1487 join_state, mc); in ucma_process_join()
1492 resp.id = mc->id; in ucma_process_join()
1499 xa_store(&multicast_table, mc->id, mc, 0); in ucma_process_join()
1506 rdma_leave_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr); in ucma_process_join()
1508 ucma_cleanup_mc_events(mc); in ucma_process_join()
1511 list_del(&mc->list); in ucma_process_join()
1512 __xa_erase(&multicast_table, mc->id); in ucma_process_join()
1515 kfree(mc); in ucma_process_join()
1565 struct ucma_multicast *mc; in ucma_leave_multicast() local
1575 mc = xa_load(&multicast_table, cmd.id); in ucma_leave_multicast()
1576 if (!mc) in ucma_leave_multicast()
1577 mc = ERR_PTR(-ENOENT); in ucma_leave_multicast()
1578 else if (READ_ONCE(mc->ctx->file) != file) in ucma_leave_multicast()
1579 mc = ERR_PTR(-EINVAL); in ucma_leave_multicast()
1580 else if (!refcount_inc_not_zero(&mc->ctx->ref)) in ucma_leave_multicast()
1581 mc = ERR_PTR(-ENXIO); in ucma_leave_multicast()
1583 if (IS_ERR(mc)) { in ucma_leave_multicast()
1585 ret = PTR_ERR(mc); in ucma_leave_multicast()
1589 list_del(&mc->list); in ucma_leave_multicast()
1590 __xa_erase(&multicast_table, mc->id); in ucma_leave_multicast()
1593 mutex_lock(&mc->ctx->mutex); in ucma_leave_multicast()
1594 rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr); in ucma_leave_multicast()
1595 mutex_unlock(&mc->ctx->mutex); in ucma_leave_multicast()
1597 ucma_cleanup_mc_events(mc); in ucma_leave_multicast()
1599 ucma_put_ctx(mc->ctx); in ucma_leave_multicast()
1600 resp.events_reported = mc->events_reported; in ucma_leave_multicast()
1601 kfree(mc); in ucma_leave_multicast()