init_MUTEX(&ctx->mutex); 
static struct ib_ucm_context *ib_ucm_ctx_alloc(struct ib_ucm_file *file){	struct ib_ucm_context *ctx;	int result;	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);	if (!ctx)		return NULL;	ctx->ref  = 1; /* user reference */	ctx->file = file;	INIT_LIST_HEAD(&ctx->events);	init_MUTEX(&ctx->mutex);	list_add_tail(&ctx->file_list, &file->ctxs);	ctx_id_rover = (ctx_id_rover + 1) & INT_MAX;retry:	result = idr_pre_get(&ctx_id_table, GFP_KERNEL);	if (!result)		goto error;	down(&ctx_id_mutex);	result = idr_get_new_above(&ctx_id_table, ctx, ctx_id_rover, &ctx->id);	up(&ctx_id_mutex);	if (result == -EAGAIN)		goto retry;	if (result)		goto error;	ucm_dbg("Allocated CM ID <%d>\n", ctx->id);	return ctx;error:	list_del(&ctx->file_list);	kfree(ctx);	return NULL;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b9ef520f9caf20aba8ac7cb2bbba45b52ff19d53/ucm.c/clean/drivers/infiniband/core/ucm.c