Lines Matching defs:uobj

87 static void init_uobj(struct ib_uobject *uobj, u64 user_handle,
90 uobj->user_handle = user_handle;
91 uobj->context = context;
92 kref_init(&uobj->ref);
93 init_rwsem(&uobj->mutex);
94 lockdep_set_class(&uobj->mutex, key);
95 uobj->live = 0;
103 static void put_uobj(struct ib_uobject *uobj)
105 kref_put(&uobj->ref, release_uobj);
108 static void put_uobj_read(struct ib_uobject *uobj)
110 up_read(&uobj->mutex);
111 put_uobj(uobj);
114 static void put_uobj_write(struct ib_uobject *uobj)
116 up_write(&uobj->mutex);
117 put_uobj(uobj);
120 static int idr_add_uobj(struct idr *idr, struct ib_uobject *uobj)
129 ret = idr_get_new(idr, uobj, &uobj->id);
138 void idr_remove_uobj(struct idr *idr, struct ib_uobject *uobj)
141 idr_remove(idr, uobj->id);
148 struct ib_uobject *uobj;
151 uobj = idr_find(idr, id);
152 if (uobj) {
153 if (uobj->context == context)
154 kref_get(&uobj->ref);
156 uobj = NULL;
160 return uobj;
166 struct ib_uobject *uobj;
168 uobj = __idr_get_uobj(idr, id, context);
169 if (!uobj)
173 down_read_nested(&uobj->mutex, SINGLE_DEPTH_NESTING);
175 down_read(&uobj->mutex);
176 if (!uobj->live) {
177 put_uobj_read(uobj);
181 return uobj;
187 struct ib_uobject *uobj;
189 uobj = __idr_get_uobj(idr, id, context);
190 if (!uobj)
193 down_write(&uobj->mutex);
194 if (!uobj->live) {
195 put_uobj_write(uobj);
199 return uobj;
205 struct ib_uobject *uobj;
207 uobj = idr_read_uobj(idr, id, context, nested);
208 return uobj ? uobj->object : NULL;
263 struct ib_uobject **uobj)
265 *uobj = idr_read_uobj(&ib_uverbs_xrc_domain_idr, xrcd_handle,
267 return *uobj ? (*uobj)->object : NULL;
270 static void put_xrcd_read(struct ib_uobject *uobj)
272 put_uobj_read(uobj);
490 struct ib_uobject *uobj;
504 uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
505 if (!uobj)
508 init_uobj(uobj, 0, file->ucontext, &pd_lock_key);
509 down_write(&uobj->mutex);
519 pd->uobject = uobj;
522 uobj->object = pd;
523 ret = idr_add_uobj(&ib_uverbs_pd_idr, uobj);
528 resp.pd_handle = uobj->id;
537 list_add_tail(&uobj->list, &file->ucontext->pd_list);
540 uobj->live = 1;
542 up_write(&uobj->mutex);
547 idr_remove_uobj(&ib_uverbs_pd_idr, uobj);
553 put_uobj_write(uobj);
562 struct ib_uobject *uobj;
568 uobj = idr_write_uobj(&ib_uverbs_pd_idr, cmd.pd_handle, file->ucontext);
569 if (!uobj)
572 ret = ib_dealloc_pd(uobj->object);
574 uobj->live = 0;
576 put_uobj_write(uobj);
581 idr_remove_uobj(&ib_uverbs_pd_idr, uobj);
584 list_del(&uobj->list);
587 put_uobj(uobj);
599 struct ib_uobject *uobj;
625 uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
626 if (!uobj)
629 init_uobj(uobj, 0, file->ucontext, &mr_lock_key);
630 down_write(&uobj->mutex);
647 mr->uobject = uobj;
651 uobj->object = mr;
652 ret = idr_add_uobj(&ib_uverbs_mr_idr, uobj);
659 resp.mr_handle = uobj->id;
670 list_add_tail(&uobj->list, &file->ucontext->mr_list);
673 uobj->live = 1;
675 up_write(&uobj->mutex);
680 idr_remove_uobj(&ib_uverbs_mr_idr, uobj);
689 put_uobj_write(uobj);
699 struct ib_uobject *uobj;
705 uobj = idr_write_uobj(&ib_uverbs_mr_idr, cmd.mr_handle, file->ucontext);
706 if (!uobj)
709 mr = uobj->object;
713 uobj->live = 0;
715 put_uobj_write(uobj);
720 idr_remove_uobj(&ib_uverbs_mr_idr, uobj);
723 list_del(&uobj->list);
726 put_uobj(uobj);
990 struct ib_uobject *uobj;
999 uobj = idr_write_uobj(&ib_uverbs_cq_idr, cmd.cq_handle, file->ucontext);
1000 if (!uobj)
1002 cq = uobj->object;
1008 uobj->live = 0;
1010 put_uobj_write(uobj);
1015 idr_remove_uobj(&ib_uverbs_cq_idr, uobj);
1018 list_del(&uobj->list);
1027 put_uobj(uobj);
1384 struct ib_uobject *uobj;
1394 uobj = idr_write_uobj(&ib_uverbs_qp_idr, cmd.qp_handle, file->ucontext);
1395 if (!uobj)
1397 qp = uobj->object;
1398 obj = container_of(uobj, struct ib_uqp_object, uevent.uobject);
1401 put_uobj_write(uobj);
1407 uobj->live = 0;
1409 put_uobj_write(uobj);
1414 idr_remove_uobj(&ib_uverbs_qp_idr, uobj);
1417 list_del(&uobj->list);
1424 put_uobj(uobj);
1778 struct ib_uobject *uobj;
1790 uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
1791 if (!uobj)
1794 init_uobj(uobj, cmd.user_handle, file->ucontext, &ah_lock_key);
1795 down_write(&uobj->mutex);
1821 ah->uobject = uobj;
1822 uobj->object = ah;
1824 ret = idr_add_uobj(&ib_uverbs_ah_idr, uobj);
1828 resp.ah_handle = uobj->id;
1839 list_add_tail(&uobj->list, &file->ucontext->ah_list);
1842 uobj->live = 1;
1844 up_write(&uobj->mutex);
1849 idr_remove_uobj(&ib_uverbs_ah_idr, uobj);
1858 put_uobj_write(uobj);
1867 struct ib_uobject *uobj;
1873 uobj = idr_write_uobj(&ib_uverbs_ah_idr, cmd.ah_handle, file->ucontext);
1874 if (!uobj)
1876 ah = uobj->object;
1880 uobj->live = 0;
1882 put_uobj_write(uobj);
1887 idr_remove_uobj(&ib_uverbs_ah_idr, uobj);
1890 list_del(&uobj->list);
1893 put_uobj(uobj);
2292 struct ib_uobject *uobj;
2300 uobj = idr_write_uobj(&ib_uverbs_srq_idr, cmd.srq_handle, file->ucontext);
2301 if (!uobj)
2303 srq = uobj->object;
2304 obj = container_of(uobj, struct ib_uevent_object, uobject);
2308 uobj->live = 0;
2310 put_uobj_write(uobj);
2315 idr_remove_uobj(&ib_uverbs_srq_idr, uobj);
2318 list_del(&uobj->list);
2326 put_uobj(uobj);
2435 struct ib_uobject *uobj;
2487 uobj = &xrcd_uobj->uobject;
2488 init_uobj(uobj, 0, file->ucontext, &pd_lock_key);
2489 down_write(&uobj->mutex);
2498 xrcd->uobject = (cmd.fd == -1) ? uobj : NULL;
2505 uobj->object = xrcd;
2506 ret = idr_add_uobj(&ib_uverbs_xrc_domain_idr, uobj);
2511 resp.xrcd_handle = uobj->id;
2534 list_add_tail(&uobj->list, &file->ucontext->xrcd_list);
2537 uobj->live = 1;
2539 up_write(&uobj->mutex);
2553 idr_remove_uobj(&ib_uverbs_xrc_domain_idr, uobj);
2559 put_uobj_write(uobj);
2574 struct ib_uobject *uobj, *t_uobj;
2584 uobj = idr_write_uobj(&ib_uverbs_xrc_domain_idr, cmd.xrcd_handle,
2586 if (!uobj) {
2595 if (qp->xrcd && qp->xrcd == uobj->object) {
2604 if (srq->ext.xrc.xrcd && srq->ext.xrc.xrcd == uobj->object) {
2612 put_uobj_write(uobj);
2616 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
2619 put_uobj_write(uobj);
2623 xrcd = (struct ib_xrcd *) (uobj->object);
2629 ret = ib_dealloc_xrcd(uobj->object);
2631 uobj->live = 0;
2633 put_uobj_write(uobj);
2641 idr_remove_uobj(&ib_uverbs_xrc_domain_idr, uobj);
2644 list_del(&uobj->list);
2647 put_uobj(uobj);
2681 struct ib_uobject *uobj;
2696 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2730 put_xrcd_read(uobj);
2733 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
2743 put_xrcd_read(uobj);
2756 struct ib_uobject *uobj;
2766 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2820 put_xrcd_read(uobj);
2834 struct ib_uobject *uobj;
2847 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2856 put_xrcd_read(uobj);
2933 struct ib_uobject *uobj;
2944 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2954 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
2960 put_xrcd_read(uobj);
2968 put_xrcd_read(uobj);
2972 put_xrcd_read(uobj);
2996 struct ib_uobject *uobj;
3003 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
3009 put_xrcd_read(uobj);
3014 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
3023 put_xrcd_read(uobj);