struct ib_ucm_event *uevent;  down(&ctx_id_mutex);  ctx->ref--; if (!ctx->ref) idr_remove(&ctx_id_table, ctx->id);  up(&ctx_id_mutex);  if (ctx->ref) return;  down(&ctx->file->mutex);  list_del(&ctx->file_list); while (!list_empty(&ctx->events)) {  uevent = list_entry(ctx->events.next, struct ib_ucm_event, ctx_list); list_del(&uevent->file_list); list_del(&uevent->ctx_list);  /* clear incoming connections. */ if (uevent->cm_id) ib_destroy_cm_id(uevent->cm_id);  kfree(uevent); }  up(&ctx->file->mutex);  ucm_dbg("Destroyed CM ID <%d>\n", ctx->id);  ib_destroy_cm_id(ctx->cm_id); kfree(ctx); 
if (atomic_dec_and_test(&ctx->ref)) wake_up(&ctx->wait); 
static void ib_ucm_ctx_put(struct ib_ucm_context *ctx){	struct ib_ucm_event *uevent;	down(&ctx_id_mutex);	ctx->ref--;	if (!ctx->ref)		idr_remove(&ctx_id_table, ctx->id);	up(&ctx_id_mutex);	if (ctx->ref)		return;	down(&ctx->file->mutex);	list_del(&ctx->file_list);	while (!list_empty(&ctx->events)) {		uevent = list_entry(ctx->events.next,				    struct ib_ucm_event, ctx_list);		list_del(&uevent->file_list);		list_del(&uevent->ctx_list);		/* clear incoming connections. */		if (uevent->cm_id)			ib_destroy_cm_id(uevent->cm_id);		kfree(uevent);	}	up(&ctx->file->mutex);	ucm_dbg("Destroyed CM ID <%d>\n", ctx->id);	ib_destroy_cm_id(ctx->cm_id);	kfree(ctx);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b9ef520f9caf20aba8ac7cb2bbba45b52ff19d53/ucm.c/clean/drivers/infiniband/core/ucm.c