Lines Matching refs:mc

106 	struct ucma_multicast	*mc;  member
176 struct ucma_multicast *mc; in ucma_alloc_multicast() local
178 mc = kzalloc(sizeof(*mc), GFP_KERNEL); in ucma_alloc_multicast()
179 if (!mc) in ucma_alloc_multicast()
183 mc->id = idr_alloc(&multicast_idr, mc, 0, 0, GFP_KERNEL); in ucma_alloc_multicast()
185 if (mc->id < 0) in ucma_alloc_multicast()
188 mc->ctx = ctx; in ucma_alloc_multicast()
189 list_add_tail(&mc->list, &ctx->mc_list); in ucma_alloc_multicast()
190 return mc; in ucma_alloc_multicast()
193 kfree(mc); in ucma_alloc_multicast()
233 uevent->mc = (struct ucma_multicast *) in ucma_set_event_context()
235 uevent->resp.uid = uevent->mc->uid; in ucma_set_event_context()
236 uevent->resp.id = uevent->mc->id; in ucma_set_event_context()
342 if (uevent->mc) in ucma_get_event()
343 uevent->mc->events_reported++; in ucma_get_event()
420 struct ucma_multicast *mc, *tmp; in ucma_cleanup_multicast() local
423 list_for_each_entry_safe(mc, tmp, &ctx->mc_list, list) { in ucma_cleanup_multicast()
424 list_del(&mc->list); in ucma_cleanup_multicast()
425 idr_remove(&multicast_idr, mc->id); in ucma_cleanup_multicast()
426 kfree(mc); in ucma_cleanup_multicast()
431 static void ucma_cleanup_mc_events(struct ucma_multicast *mc) in ucma_cleanup_mc_events() argument
435 list_for_each_entry_safe(uevent, tmp, &mc->ctx->file->event_list, list) { in ucma_cleanup_mc_events()
436 if (uevent->mc != mc) in ucma_cleanup_mc_events()
1230 struct ucma_multicast *mc; in ucma_process_join() local
1246 mc = ucma_alloc_multicast(ctx); in ucma_process_join()
1247 if (!mc) { in ucma_process_join()
1252 mc->uid = cmd->uid; in ucma_process_join()
1253 memcpy(&mc->addr, addr, cmd->addr_size); in ucma_process_join()
1254 ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr, mc); in ucma_process_join()
1258 resp.id = mc->id; in ucma_process_join()
1270 rdma_leave_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr); in ucma_process_join()
1271 ucma_cleanup_mc_events(mc); in ucma_process_join()
1274 idr_remove(&multicast_idr, mc->id); in ucma_process_join()
1276 list_del(&mc->list); in ucma_process_join()
1277 kfree(mc); in ucma_process_join()
1322 struct ucma_multicast *mc; in ucma_leave_multicast() local
1332 mc = idr_find(&multicast_idr, cmd.id); in ucma_leave_multicast()
1333 if (!mc) in ucma_leave_multicast()
1334 mc = ERR_PTR(-ENOENT); in ucma_leave_multicast()
1335 else if (mc->ctx->file != file) in ucma_leave_multicast()
1336 mc = ERR_PTR(-EINVAL); in ucma_leave_multicast()
1338 idr_remove(&multicast_idr, mc->id); in ucma_leave_multicast()
1339 atomic_inc(&mc->ctx->ref); in ucma_leave_multicast()
1343 if (IS_ERR(mc)) { in ucma_leave_multicast()
1344 ret = PTR_ERR(mc); in ucma_leave_multicast()
1348 rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr); in ucma_leave_multicast()
1349 mutex_lock(&mc->ctx->file->mut); in ucma_leave_multicast()
1350 ucma_cleanup_mc_events(mc); in ucma_leave_multicast()
1351 list_del(&mc->list); in ucma_leave_multicast()
1352 mutex_unlock(&mc->ctx->file->mut); in ucma_leave_multicast()
1354 ucma_put_ctx(mc->ctx); in ucma_leave_multicast()
1355 resp.events_reported = mc->events_reported; in ucma_leave_multicast()
1356 kfree(mc); in ucma_leave_multicast()