Lines Matching defs:uobj

84 static void init_uobj(struct ib_uobject *uobj, u64 user_handle,
87 uobj->user_handle = user_handle;
88 uobj->context = context;
89 kref_init(&uobj->ref);
90 init_rwsem(&uobj->mutex);
91 lockdep_set_class(&uobj->mutex, key);
92 uobj->live = 0;
100 static void put_uobj(struct ib_uobject *uobj)
102 kref_put(&uobj->ref, release_uobj);
105 static void put_uobj_read(struct ib_uobject *uobj)
107 up_read(&uobj->mutex);
108 put_uobj(uobj);
111 static void put_uobj_write(struct ib_uobject *uobj)
113 up_write(&uobj->mutex);
114 put_uobj(uobj);
117 static int idr_add_uobj(struct idr *idr, struct ib_uobject *uobj)
126 ret = idr_get_new(idr, uobj, &uobj->id);
135 void idr_remove_uobj(struct idr *idr, struct ib_uobject *uobj)
138 idr_remove(idr, uobj->id);
145 struct ib_uobject *uobj;
148 uobj = idr_find(idr, id);
149 if (uobj) {
150 if (uobj->context == context)
151 kref_get(&uobj->ref);
153 uobj = NULL;
157 return uobj;
163 struct ib_uobject *uobj;
165 uobj = __idr_get_uobj(idr, id, context);
166 if (!uobj)
170 down_read_nested(&uobj->mutex, SINGLE_DEPTH_NESTING);
172 down_read(&uobj->mutex);
173 if (!uobj->live) {
174 put_uobj_read(uobj);
178 return uobj;
184 struct ib_uobject *uobj;
186 uobj = __idr_get_uobj(idr, id, context);
187 if (!uobj)
190 down_write(&uobj->mutex);
191 if (!uobj->live) {
192 put_uobj_write(uobj);
196 return uobj;
202 struct ib_uobject *uobj;
204 uobj = idr_read_uobj(idr, id, context, nested);
205 return uobj ? uobj->object : NULL;
260 struct ib_uobject **uobj)
262 *uobj = idr_read_uobj(&ib_uverbs_xrc_domain_idr, xrcd_handle,
264 return *uobj ? (*uobj)->object : NULL;
267 static void put_xrcd_read(struct ib_uobject *uobj)
269 put_uobj_read(uobj);
487 struct ib_uobject *uobj;
501 uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
502 if (!uobj)
505 init_uobj(uobj, 0, file->ucontext, &pd_lock_key);
506 down_write(&uobj->mutex);
516 pd->uobject = uobj;
519 uobj->object = pd;
520 ret = idr_add_uobj(&ib_uverbs_pd_idr, uobj);
525 resp.pd_handle = uobj->id;
534 list_add_tail(&uobj->list, &file->ucontext->pd_list);
537 uobj->live = 1;
539 up_write(&uobj->mutex);
544 idr_remove_uobj(&ib_uverbs_pd_idr, uobj);
550 put_uobj_write(uobj);
559 struct ib_uobject *uobj;
565 uobj = idr_write_uobj(&ib_uverbs_pd_idr, cmd.pd_handle, file->ucontext);
566 if (!uobj)
569 ret = ib_dealloc_pd(uobj->object);
571 uobj->live = 0;
573 put_uobj_write(uobj);
578 idr_remove_uobj(&ib_uverbs_pd_idr, uobj);
581 list_del(&uobj->list);
584 put_uobj(uobj);
596 struct ib_uobject *uobj;
622 uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
623 if (!uobj)
626 init_uobj(uobj, 0, file->ucontext, &mr_lock_key);
627 down_write(&uobj->mutex);
644 mr->uobject = uobj;
648 uobj->object = mr;
649 ret = idr_add_uobj(&ib_uverbs_mr_idr, uobj);
656 resp.mr_handle = uobj->id;
667 list_add_tail(&uobj->list, &file->ucontext->mr_list);
670 uobj->live = 1;
672 up_write(&uobj->mutex);
677 idr_remove_uobj(&ib_uverbs_mr_idr, uobj);
686 put_uobj_write(uobj);
696 struct ib_uobject *uobj;
702 uobj = idr_write_uobj(&ib_uverbs_mr_idr, cmd.mr_handle, file->ucontext);
703 if (!uobj)
706 mr = uobj->object;
710 uobj->live = 0;
712 put_uobj_write(uobj);
717 idr_remove_uobj(&ib_uverbs_mr_idr, uobj);
720 list_del(&uobj->list);
723 put_uobj(uobj);
987 struct ib_uobject *uobj;
996 uobj = idr_write_uobj(&ib_uverbs_cq_idr, cmd.cq_handle, file->ucontext);
997 if (!uobj)
999 cq = uobj->object;
1005 uobj->live = 0;
1007 put_uobj_write(uobj);
1012 idr_remove_uobj(&ib_uverbs_cq_idr, uobj);
1015 list_del(&uobj->list);
1024 put_uobj(uobj);
1381 struct ib_uobject *uobj;
1391 uobj = idr_write_uobj(&ib_uverbs_qp_idr, cmd.qp_handle, file->ucontext);
1392 if (!uobj)
1394 qp = uobj->object;
1395 obj = container_of(uobj, struct ib_uqp_object, uevent.uobject);
1398 put_uobj_write(uobj);
1404 uobj->live = 0;
1406 put_uobj_write(uobj);
1411 idr_remove_uobj(&ib_uverbs_qp_idr, uobj);
1414 list_del(&uobj->list);
1421 put_uobj(uobj);
1775 struct ib_uobject *uobj;
1787 uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
1788 if (!uobj)
1791 init_uobj(uobj, cmd.user_handle, file->ucontext, &ah_lock_key);
1792 down_write(&uobj->mutex);
1818 ah->uobject = uobj;
1819 uobj->object = ah;
1821 ret = idr_add_uobj(&ib_uverbs_ah_idr, uobj);
1825 resp.ah_handle = uobj->id;
1836 list_add_tail(&uobj->list, &file->ucontext->ah_list);
1839 uobj->live = 1;
1841 up_write(&uobj->mutex);
1846 idr_remove_uobj(&ib_uverbs_ah_idr, uobj);
1855 put_uobj_write(uobj);
1864 struct ib_uobject *uobj;
1870 uobj = idr_write_uobj(&ib_uverbs_ah_idr, cmd.ah_handle, file->ucontext);
1871 if (!uobj)
1873 ah = uobj->object;
1877 uobj->live = 0;
1879 put_uobj_write(uobj);
1884 idr_remove_uobj(&ib_uverbs_ah_idr, uobj);
1887 list_del(&uobj->list);
1890 put_uobj(uobj);
2289 struct ib_uobject *uobj;
2297 uobj = idr_write_uobj(&ib_uverbs_srq_idr, cmd.srq_handle, file->ucontext);
2298 if (!uobj)
2300 srq = uobj->object;
2301 obj = container_of(uobj, struct ib_uevent_object, uobject);
2305 uobj->live = 0;
2307 put_uobj_write(uobj);
2312 idr_remove_uobj(&ib_uverbs_srq_idr, uobj);
2315 list_del(&uobj->list);
2323 put_uobj(uobj);
2432 struct ib_uobject *uobj;
2484 uobj = &xrcd_uobj->uobject;
2485 init_uobj(uobj, 0, file->ucontext, &pd_lock_key);
2486 down_write(&uobj->mutex);
2495 xrcd->uobject = (cmd.fd == -1) ? uobj : NULL;
2502 uobj->object = xrcd;
2503 ret = idr_add_uobj(&ib_uverbs_xrc_domain_idr, uobj);
2508 resp.xrcd_handle = uobj->id;
2531 list_add_tail(&uobj->list, &file->ucontext->xrcd_list);
2534 uobj->live = 1;
2536 up_write(&uobj->mutex);
2550 idr_remove_uobj(&ib_uverbs_xrc_domain_idr, uobj);
2556 put_uobj_write(uobj);
2571 struct ib_uobject *uobj, *t_uobj;
2581 uobj = idr_write_uobj(&ib_uverbs_xrc_domain_idr, cmd.xrcd_handle,
2583 if (!uobj) {
2592 if (qp->xrcd && qp->xrcd == uobj->object) {
2601 if (srq->ext.xrc.xrcd && srq->ext.xrc.xrcd == uobj->object) {
2609 put_uobj_write(uobj);
2613 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
2616 put_uobj_write(uobj);
2620 xrcd = (struct ib_xrcd *) (uobj->object);
2626 ret = ib_dealloc_xrcd(uobj->object);
2628 uobj->live = 0;
2630 put_uobj_write(uobj);
2638 idr_remove_uobj(&ib_uverbs_xrc_domain_idr, uobj);
2641 list_del(&uobj->list);
2644 put_uobj(uobj);
2678 struct ib_uobject *uobj;
2693 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2727 put_xrcd_read(uobj);
2730 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
2740 put_xrcd_read(uobj);
2753 struct ib_uobject *uobj;
2763 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2817 put_xrcd_read(uobj);
2831 struct ib_uobject *uobj;
2844 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2853 put_xrcd_read(uobj);
2930 struct ib_uobject *uobj;
2941 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
2951 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
2957 put_xrcd_read(uobj);
2965 put_xrcd_read(uobj);
2969 put_xrcd_read(uobj);
2993 struct ib_uobject *uobj;
3000 xrcd = idr_read_xrcd(cmd.xrc_domain_handle, file->ucontext, &uobj);
3006 put_xrcd_read(uobj);
3011 xrcd_uobj = container_of(uobj, struct ib_uxrcd_object, uobject);
3020 put_xrcd_read(uobj);