Lines Matching refs:attrs
58 static int uverbs_response(struct uverbs_attr_bundle *attrs, const void *resp, in uverbs_response() argument
63 if (uverbs_attr_is_valid(attrs, UVERBS_ATTR_CORE_OUT)) in uverbs_response()
65 attrs, UVERBS_ATTR_CORE_OUT, resp, resp_len); in uverbs_response()
67 if (copy_to_user(attrs->ucore.outbuf, resp, in uverbs_response()
68 min(attrs->ucore.outlen, resp_len))) in uverbs_response()
71 if (resp_len < attrs->ucore.outlen) { in uverbs_response()
76 ret = clear_user(attrs->ucore.outbuf + resp_len, in uverbs_response()
77 attrs->ucore.outlen - resp_len); in uverbs_response()
91 static int uverbs_request(struct uverbs_attr_bundle *attrs, void *req, in uverbs_request() argument
94 if (copy_from_user(req, attrs->ucore.inbuf, in uverbs_request()
95 min(attrs->ucore.inlen, req_len))) in uverbs_request()
98 if (attrs->ucore.inlen < req_len) { in uverbs_request()
99 memset(req + attrs->ucore.inlen, 0, in uverbs_request()
100 req_len - attrs->ucore.inlen); in uverbs_request()
101 } else if (attrs->ucore.inlen > req_len) { in uverbs_request()
102 if (!ib_is_buffer_cleared(attrs->ucore.inbuf + req_len, in uverbs_request()
103 attrs->ucore.inlen - req_len)) in uverbs_request()
115 static u32 uverbs_response_length(struct uverbs_attr_bundle *attrs, in uverbs_response_length() argument
118 return min_t(size_t, attrs->ucore.outlen, resp_len); in uverbs_response_length()
130 static int uverbs_request_start(struct uverbs_attr_bundle *attrs, in uverbs_request_start() argument
135 if (attrs->ucore.inlen < req_len) in uverbs_request_start()
138 if (copy_from_user(req, attrs->ucore.inbuf, req_len)) in uverbs_request_start()
141 iter->cur = attrs->ucore.inbuf + req_len; in uverbs_request_start()
142 iter->end = attrs->ucore.inbuf + attrs->ucore.inlen; in uverbs_request_start()
182 struct ib_udata *uverbs_get_cleared_udata(struct uverbs_attr_bundle *attrs) in uverbs_get_cleared_udata() argument
184 attrs->driver_udata = (struct ib_udata){}; in uverbs_get_cleared_udata()
185 return &attrs->driver_udata; in uverbs_get_cleared_udata()
189 _ib_uverbs_lookup_comp_file(s32 fd, struct uverbs_attr_bundle *attrs) in _ib_uverbs_lookup_comp_file() argument
192 fd, attrs); in _ib_uverbs_lookup_comp_file()
206 int ib_alloc_ucontext(struct uverbs_attr_bundle *attrs) in ib_alloc_ucontext() argument
208 struct ib_uverbs_file *ufile = attrs->ufile; in ib_alloc_ucontext()
227 attrs->context = ucontext; in ib_alloc_ucontext()
231 int ib_init_ucontext(struct uverbs_attr_bundle *attrs) in ib_init_ucontext() argument
233 struct ib_ucontext *ucontext = attrs->context; in ib_init_ucontext()
234 struct ib_uverbs_file *file = attrs->ufile; in ib_init_ucontext()
251 &attrs->driver_udata); in ib_init_ucontext()
276 static int ib_uverbs_get_context(struct uverbs_attr_bundle *attrs) in ib_uverbs_get_context() argument
284 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_get_context()
288 ret = ib_alloc_ucontext(attrs); in ib_uverbs_get_context()
292 uobj = uobj_alloc(UVERBS_OBJECT_ASYNC_EVENT, attrs, &ib_dev); in ib_uverbs_get_context()
299 .num_comp_vectors = attrs->ufile->device->num_comp_vectors, in ib_uverbs_get_context()
302 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_get_context()
306 ret = ib_init_ucontext(attrs); in ib_uverbs_get_context()
312 rdma_alloc_commit_uobject(uobj, attrs); in ib_uverbs_get_context()
316 rdma_alloc_abort_uobject(uobj, attrs, false); in ib_uverbs_get_context()
318 rdma_restrack_put(&attrs->context->res); in ib_uverbs_get_context()
319 kfree(attrs->context); in ib_uverbs_get_context()
320 attrs->context = NULL; in ib_uverbs_get_context()
370 static int ib_uverbs_query_device(struct uverbs_attr_bundle *attrs) in ib_uverbs_query_device() argument
377 ucontext = ib_uverbs_get_ucontext(attrs); in ib_uverbs_query_device()
381 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_query_device()
386 copy_query_dev_fields(ucontext, &resp, &ucontext->device->attrs); in ib_uverbs_query_device()
388 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_query_device()
391 static int ib_uverbs_query_port(struct uverbs_attr_bundle *attrs) in ib_uverbs_query_port() argument
400 ucontext = ib_uverbs_get_ucontext(attrs); in ib_uverbs_query_port()
405 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_query_port()
416 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_query_port()
419 static int ib_uverbs_alloc_pd(struct uverbs_attr_bundle *attrs) in ib_uverbs_alloc_pd() argument
428 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_alloc_pd()
432 uobj = uobj_alloc(UVERBS_OBJECT_PD, attrs, &ib_dev); in ib_uverbs_alloc_pd()
449 ret = ib_dev->ops.alloc_pd(pd, &attrs->driver_udata); in ib_uverbs_alloc_pd()
455 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_alloc_pd()
458 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_alloc_pd()
464 uobj_alloc_abort(uobj, attrs); in ib_uverbs_alloc_pd()
468 static int ib_uverbs_dealloc_pd(struct uverbs_attr_bundle *attrs) in ib_uverbs_dealloc_pd() argument
473 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_dealloc_pd()
477 return uobj_perform_destroy(UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_dealloc_pd()
565 static int ib_uverbs_open_xrcd(struct uverbs_attr_bundle *attrs) in ib_uverbs_open_xrcd() argument
567 struct ib_uverbs_device *ibudev = attrs->ufile->device; in ib_uverbs_open_xrcd()
578 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_open_xrcd()
606 obj = (struct ib_uxrcd_object *)uobj_alloc(UVERBS_OBJECT_XRCD, attrs, in ib_uverbs_open_xrcd()
614 xrcd = ib_alloc_xrcd_user(ib_dev, inode, &attrs->driver_udata); in ib_uverbs_open_xrcd()
639 uobj_finalize_uobj_create(&obj->uobject, attrs); in ib_uverbs_open_xrcd()
642 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_open_xrcd()
645 ib_dealloc_xrcd_user(xrcd, uverbs_get_cleared_udata(attrs)); in ib_uverbs_open_xrcd()
648 uobj_alloc_abort(&obj->uobject, attrs); in ib_uverbs_open_xrcd()
659 static int ib_uverbs_close_xrcd(struct uverbs_attr_bundle *attrs) in ib_uverbs_close_xrcd() argument
664 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_close_xrcd()
668 return uobj_perform_destroy(UVERBS_OBJECT_XRCD, cmd.xrcd_handle, attrs); in ib_uverbs_close_xrcd()
673 struct uverbs_attr_bundle *attrs) in ib_uverbs_dealloc_xrcd() argument
677 struct ib_uverbs_device *dev = attrs->ufile->device; in ib_uverbs_dealloc_xrcd()
683 ret = ib_dealloc_xrcd_user(xrcd, &attrs->driver_udata); in ib_uverbs_dealloc_xrcd()
695 static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs) in ib_uverbs_reg_mr() argument
705 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_reg_mr()
712 uobj = uobj_alloc(UVERBS_OBJECT_MR, attrs, &ib_dev); in ib_uverbs_reg_mr()
720 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_reg_mr()
728 &attrs->driver_udata); in ib_uverbs_reg_mr()
750 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_reg_mr()
755 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_reg_mr()
760 uobj_alloc_abort(uobj, attrs); in ib_uverbs_reg_mr()
764 static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs) in ib_uverbs_rereg_mr() argument
777 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_rereg_mr()
791 uobj = uobj_get_write(UVERBS_OBJECT_MR, cmd.mr_handle, attrs); in ib_uverbs_rereg_mr()
811 attrs); in ib_uverbs_rereg_mr()
824 new_uobj = uobj_alloc(UVERBS_OBJECT_MR, attrs, &ib_dev); in ib_uverbs_rereg_mr()
832 &attrs->driver_udata); in ib_uverbs_rereg_mr()
853 rdma_assign_uobject(uobj, new_uobj, attrs); in ib_uverbs_rereg_mr()
854 rdma_alloc_commit_uobject(new_uobj, attrs); in ib_uverbs_rereg_mr()
875 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_rereg_mr()
879 uobj_alloc_abort(new_uobj, attrs); in ib_uverbs_rereg_mr()
891 static int ib_uverbs_dereg_mr(struct uverbs_attr_bundle *attrs) in ib_uverbs_dereg_mr() argument
896 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_dereg_mr()
900 return uobj_perform_destroy(UVERBS_OBJECT_MR, cmd.mr_handle, attrs); in ib_uverbs_dereg_mr()
903 static int ib_uverbs_alloc_mw(struct uverbs_attr_bundle *attrs) in ib_uverbs_alloc_mw() argument
913 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_alloc_mw()
917 uobj = uobj_alloc(UVERBS_OBJECT_MW, attrs, &ib_dev); in ib_uverbs_alloc_mw()
921 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_alloc_mw()
943 ret = pd->device->ops.alloc_mw(mw, &attrs->driver_udata); in ib_uverbs_alloc_mw()
951 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_alloc_mw()
955 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_alloc_mw()
962 uobj_alloc_abort(uobj, attrs); in ib_uverbs_alloc_mw()
966 static int ib_uverbs_dealloc_mw(struct uverbs_attr_bundle *attrs) in ib_uverbs_dealloc_mw() argument
971 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_dealloc_mw()
975 return uobj_perform_destroy(UVERBS_OBJECT_MW, cmd.mw_handle, attrs); in ib_uverbs_dealloc_mw()
978 static int ib_uverbs_create_comp_channel(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_comp_channel() argument
987 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_comp_channel()
991 uobj = uobj_alloc(UVERBS_OBJECT_COMP_CHANNEL, attrs, &ib_dev); in ib_uverbs_create_comp_channel()
998 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_create_comp_channel()
1001 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_create_comp_channel()
1004 static int create_cq(struct uverbs_attr_bundle *attrs, in create_cq() argument
1015 if (cmd->comp_vector >= attrs->ufile->device->num_comp_vectors) in create_cq()
1018 obj = (struct ib_ucq_object *)uobj_alloc(UVERBS_OBJECT_CQ, attrs, in create_cq()
1024 ev_file = ib_uverbs_lookup_comp_file(cmd->comp_channel, attrs); in create_cq()
1054 ret = ib_dev->ops.create_cq(cq, &attr, &attrs->driver_udata); in create_cq()
1060 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in create_cq()
1063 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in create_cq()
1067 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in create_cq()
1068 return uverbs_response(attrs, &resp, sizeof(resp)); in create_cq()
1077 uobj_alloc_abort(&obj->uevent.uobject, attrs); in create_cq()
1081 static int ib_uverbs_create_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_cq() argument
1087 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_cq()
1097 return create_cq(attrs, &cmd_ex); in ib_uverbs_create_cq()
1100 static int ib_uverbs_ex_create_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_cq() argument
1105 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_cq()
1115 return create_cq(attrs, &cmd); in ib_uverbs_ex_create_cq()
1118 static int ib_uverbs_resize_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_resize_cq() argument
1125 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_resize_cq()
1129 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_resize_cq()
1133 ret = cq->device->ops.resize_cq(cq, cmd.cqe, &attrs->driver_udata); in ib_uverbs_resize_cq()
1139 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_resize_cq()
1177 static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_poll_cq() argument
1187 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_poll_cq()
1191 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_poll_cq()
1196 header_ptr = attrs->ucore.outbuf; in ib_uverbs_poll_cq()
1221 if (uverbs_attr_is_valid(attrs, UVERBS_ATTR_CORE_OUT)) in ib_uverbs_poll_cq()
1222 ret = uverbs_output_written(attrs, UVERBS_ATTR_CORE_OUT); in ib_uverbs_poll_cq()
1230 static int ib_uverbs_req_notify_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_req_notify_cq() argument
1236 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_req_notify_cq()
1240 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_req_notify_cq()
1252 static int ib_uverbs_destroy_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_cq() argument
1260 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_cq()
1264 uobj = uobj_get_destroy(UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_destroy_cq()
1275 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_destroy_cq()
1278 static int create_qp(struct uverbs_attr_bundle *attrs, in create_qp() argument
1312 obj = (struct ib_uqp_object *)uobj_alloc(UVERBS_OBJECT_QP, attrs, in create_qp()
1323 cmd->rwq_ind_tbl_handle, attrs); in create_qp()
1342 attrs); in create_qp()
1362 cmd->srq_handle, attrs); in create_qp()
1375 cmd->recv_cq_handle, attrs); in create_qp()
1386 cmd->send_cq_handle, attrs); in create_qp()
1396 attrs); in create_qp()
1445 qp = ib_create_qp_user(device, pd, &attr, &attrs->driver_udata, obj, in create_qp()
1454 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in create_qp()
1478 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in create_qp()
1487 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in create_qp()
1488 return uverbs_response(attrs, &resp, sizeof(resp)); in create_qp()
1507 uobj_alloc_abort(&obj->uevent.uobject, attrs); in create_qp()
1511 static int ib_uverbs_create_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_qp() argument
1517 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_qp()
1536 return create_qp(attrs, &cmd_ex); in ib_uverbs_create_qp()
1539 static int ib_uverbs_ex_create_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_qp() argument
1544 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_qp()
1554 return create_qp(attrs, &cmd); in ib_uverbs_ex_create_qp()
1557 static int ib_uverbs_open_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_open_qp() argument
1569 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_open_qp()
1573 obj = (struct ib_uqp_object *)uobj_alloc(UVERBS_OBJECT_QP, attrs, in ib_uverbs_open_qp()
1578 xrcd_uobj = uobj_get_read(UVERBS_OBJECT_XRCD, cmd.pd_handle, attrs); in ib_uverbs_open_qp()
1610 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in ib_uverbs_open_qp()
1614 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_open_qp()
1619 uobj_alloc_abort(&obj->uevent.uobject, attrs); in ib_uverbs_open_qp()
1645 static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_query_qp() argument
1654 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_query_qp()
1665 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_query_qp()
1713 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_query_qp()
1759 static int modify_qp(struct uverbs_attr_bundle *attrs, in modify_qp() argument
1771 attrs); in modify_qp()
1913 &attrs->driver_udata); in modify_qp()
1924 static int ib_uverbs_modify_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_modify_qp() argument
1929 ret = uverbs_request(attrs, &cmd.base, sizeof(cmd.base)); in ib_uverbs_modify_qp()
1936 return modify_qp(attrs, &cmd); in ib_uverbs_modify_qp()
1939 static int ib_uverbs_ex_modify_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_modify_qp() argument
1943 .response_length = uverbs_response_length(attrs, sizeof(resp)) in ib_uverbs_ex_modify_qp()
1947 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_modify_qp()
1958 ret = modify_qp(attrs, &cmd); in ib_uverbs_ex_modify_qp()
1962 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_modify_qp()
1965 static int ib_uverbs_destroy_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_qp() argument
1973 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_qp()
1977 uobj = uobj_get_destroy(UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_destroy_qp()
1987 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_destroy_qp()
2001 static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs) in ib_uverbs_post_send() argument
2017 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_post_send()
2037 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_post_send()
2075 user_wr->wr.ud.ah, attrs); in ib_uverbs_post_send()
2175 ret2 = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_post_send()
2295 static int ib_uverbs_post_recv(struct uverbs_attr_bundle *attrs) in ib_uverbs_post_recv() argument
2305 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_post_recv()
2314 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_post_recv()
2333 ret2 = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_post_recv()
2346 static int ib_uverbs_post_srq_recv(struct uverbs_attr_bundle *attrs) in ib_uverbs_post_srq_recv() argument
2356 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_post_srq_recv()
2365 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_post_srq_recv()
2384 ret2 = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_post_srq_recv()
2398 static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_ah() argument
2409 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_ah()
2413 uobj = uobj_alloc(UVERBS_OBJECT_AH, attrs, &ib_dev); in ib_uverbs_create_ah()
2422 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_create_ah()
2446 ah = rdma_create_user_ah(pd, &attr, &attrs->driver_udata); in ib_uverbs_create_ah()
2456 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_create_ah()
2459 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_create_ah()
2464 uobj_alloc_abort(uobj, attrs); in ib_uverbs_create_ah()
2468 static int ib_uverbs_destroy_ah(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_ah() argument
2473 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_ah()
2477 return uobj_perform_destroy(UVERBS_OBJECT_AH, cmd.ah_handle, attrs); in ib_uverbs_destroy_ah()
2480 static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs) in ib_uverbs_attach_mcast() argument
2488 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_attach_mcast()
2492 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_attach_mcast()
2529 static int ib_uverbs_detach_mcast(struct uverbs_attr_bundle *attrs) in ib_uverbs_detach_mcast() argument
2538 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_detach_mcast()
2542 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_detach_mcast()
2648 static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs, in kern_spec_to_ib_spec_action() argument
2677 attrs); in kern_spec_to_ib_spec_action()
2695 attrs); in kern_spec_to_ib_spec_action()
2875 static int kern_spec_to_ib_spec(struct uverbs_attr_bundle *attrs, in kern_spec_to_ib_spec() argument
2884 return kern_spec_to_ib_spec_action(attrs, kern_spec, ib_spec, in kern_spec_to_ib_spec()
2890 static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_wq() argument
2902 err = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_wq()
2909 obj = (struct ib_uwq_object *)uobj_alloc(UVERBS_OBJECT_WQ, attrs, in ib_uverbs_ex_create_wq()
2914 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_ex_create_wq()
2920 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_ex_create_wq()
2935 wq = pd->device->ops.create_wq(pd, &wq_init_attr, &attrs->driver_udata); in ib_uverbs_ex_create_wq()
2950 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in ib_uverbs_ex_create_wq()
2957 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in ib_uverbs_ex_create_wq()
2963 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_create_wq()
2964 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_create_wq()
2972 uobj_alloc_abort(&obj->uevent.uobject, attrs); in ib_uverbs_ex_create_wq()
2977 static int ib_uverbs_ex_destroy_wq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_destroy_wq() argument
2985 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_destroy_wq()
2992 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_destroy_wq()
2993 uobj = uobj_get_destroy(UVERBS_OBJECT_WQ, cmd.wq_handle, attrs); in ib_uverbs_ex_destroy_wq()
3002 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_destroy_wq()
3005 static int ib_uverbs_ex_modify_wq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_modify_wq() argument
3012 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_modify_wq()
3022 wq = uobj_get_obj_read(wq, UVERBS_OBJECT_WQ, cmd.wq_handle, attrs); in ib_uverbs_ex_modify_wq()
3050 &attrs->driver_udata); in ib_uverbs_ex_modify_wq()
3056 static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_rwq_ind_table() argument
3072 err = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_rwq_ind_table()
3106 wqs_handles[num_read_wqs], attrs); in ib_uverbs_ex_create_rwq_ind_table()
3116 uobj = uobj_alloc(UVERBS_OBJECT_RWQ_IND_TBL, attrs, &ib_dev); in ib_uverbs_ex_create_rwq_ind_table()
3139 &attrs->driver_udata); in ib_uverbs_ex_create_rwq_ind_table()
3147 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_ex_create_rwq_ind_table()
3151 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_create_rwq_ind_table()
3152 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_create_rwq_ind_table()
3157 uobj_alloc_abort(uobj, attrs); in ib_uverbs_ex_create_rwq_ind_table()
3170 static int ib_uverbs_ex_destroy_rwq_ind_table(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_destroy_rwq_ind_table() argument
3175 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_destroy_rwq_ind_table()
3183 cmd.ind_tbl_handle, attrs); in ib_uverbs_ex_destroy_rwq_ind_table()
3186 static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_flow() argument
3203 err = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_flow()
3251 uobj = uobj_alloc(UVERBS_OBJECT_FLOW, attrs, &ib_dev); in ib_uverbs_ex_create_flow()
3262 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_ex_create_flow()
3299 attrs, (struct ib_uverbs_flow_spec *)kern_spec, in ib_uverbs_ex_create_flow()
3318 &attrs->driver_udata); in ib_uverbs_ex_create_flow()
3333 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_ex_create_flow()
3336 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_create_flow()
3346 uobj_alloc_abort(uobj, attrs); in ib_uverbs_ex_create_flow()
3353 static int ib_uverbs_ex_destroy_flow(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_destroy_flow() argument
3358 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_destroy_flow()
3365 return uobj_perform_destroy(UVERBS_OBJECT_FLOW, cmd.flow_handle, attrs); in ib_uverbs_ex_destroy_flow()
3368 static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs, in __uverbs_create_xsrq() argument
3381 obj = (struct ib_usrq_object *)uobj_alloc(UVERBS_OBJECT_SRQ, attrs, in __uverbs_create_xsrq()
3391 attrs); in __uverbs_create_xsrq()
3409 cmd->cq_handle, attrs); in __uverbs_create_xsrq()
3416 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle, attrs); in __uverbs_create_xsrq()
3439 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in __uverbs_create_xsrq()
3454 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in __uverbs_create_xsrq()
3459 return uverbs_response(attrs, &resp, sizeof(resp)); in __uverbs_create_xsrq()
3475 uobj_alloc_abort(&obj->uevent.uobject, attrs); in __uverbs_create_xsrq()
3479 static int ib_uverbs_create_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_srq() argument
3485 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_srq()
3498 return __uverbs_create_xsrq(attrs, &xcmd, &attrs->driver_udata); in ib_uverbs_create_srq()
3501 static int ib_uverbs_create_xsrq(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_xsrq() argument
3506 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_xsrq()
3510 return __uverbs_create_xsrq(attrs, &cmd, &attrs->driver_udata); in ib_uverbs_create_xsrq()
3513 static int ib_uverbs_modify_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_modify_srq() argument
3520 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_modify_srq()
3524 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_modify_srq()
3532 &attrs->driver_udata); in ib_uverbs_modify_srq()
3540 static int ib_uverbs_query_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_query_srq() argument
3548 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_query_srq()
3552 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_query_srq()
3570 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_query_srq()
3573 static int ib_uverbs_destroy_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_srq() argument
3581 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_srq()
3585 uobj = uobj_get_destroy(UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_destroy_srq()
3595 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_destroy_srq()
3598 static int ib_uverbs_ex_query_device(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_query_device() argument
3607 ucontext = ib_uverbs_get_ucontext(attrs); in ib_uverbs_ex_query_device()
3612 err = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_query_device()
3622 err = ib_dev->ops.query_device(ib_dev, &attr, &attrs->driver_udata); in ib_uverbs_ex_query_device()
3657 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_query_device()
3659 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_query_device()
3662 static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_modify_cq() argument
3668 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_modify_cq()
3678 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_ex_modify_cq()