ib_umem_release_on_close(mr->device, &memobj->umem); 
ib_umem_release_on_close(mrdev, &memobj->umem); 
static int ib_dealloc_ucontext(struct ib_ucontext *context){	struct ib_uobject *uobj, *tmp;	if (!context)		return 0;	down(&ib_uverbs_idr_mutex);	/* XXX Free AHs */	list_for_each_entry_safe(uobj, tmp, &context->qp_list, list) {		struct ib_qp *qp = idr_find(&ib_uverbs_qp_idr, uobj->id);		idr_remove(&ib_uverbs_qp_idr, uobj->id);		ib_destroy_qp(qp);		list_del(&uobj->list);		kfree(uobj);	}	list_for_each_entry_safe(uobj, tmp, &context->cq_list, list) {		struct ib_cq *cq = idr_find(&ib_uverbs_cq_idr, uobj->id);		idr_remove(&ib_uverbs_cq_idr, uobj->id);		ib_destroy_cq(cq);		list_del(&uobj->list);		kfree(uobj);	}	/* XXX Free SRQs */	/* XXX Free MWs */	list_for_each_entry_safe(uobj, tmp, &context->mr_list, list) {		struct ib_mr *mr = idr_find(&ib_uverbs_mr_idr, uobj->id);		struct ib_umem_object *memobj;		idr_remove(&ib_uverbs_mr_idr, uobj->id);		ib_dereg_mr(mr);		memobj = container_of(uobj, struct ib_umem_object, uobject);		ib_umem_release_on_close(mr->device, &memobj->umem);		list_del(&uobj->list);		kfree(memobj);	}	list_for_each_entry_safe(uobj, tmp, &context->pd_list, list) {		struct ib_pd *pd = idr_find(&ib_uverbs_pd_idr, uobj->id);		idr_remove(&ib_uverbs_pd_idr, uobj->id);		ib_dealloc_pd(pd);		list_del(&uobj->list);		kfree(uobj);	}	up(&ib_uverbs_idr_mutex);	return context->device->dealloc_ucontext(context);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/e1bcfcaa0b3bec2a67b22c565a0bf508ea90db1d/uverbs_main.c/clean/drivers/infiniband/core/uverbs_main.c