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()
749 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_reg_mr()
754 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_reg_mr()
759 uobj_alloc_abort(uobj, attrs); in ib_uverbs_reg_mr()
763 static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs) in ib_uverbs_rereg_mr() argument
776 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_rereg_mr()
790 uobj = uobj_get_write(UVERBS_OBJECT_MR, cmd.mr_handle, attrs); in ib_uverbs_rereg_mr()
810 attrs); in ib_uverbs_rereg_mr()
823 new_uobj = uobj_alloc(UVERBS_OBJECT_MR, attrs, &ib_dev); in ib_uverbs_rereg_mr()
831 &attrs->driver_udata); in ib_uverbs_rereg_mr()
852 rdma_assign_uobject(uobj, new_uobj, attrs); in ib_uverbs_rereg_mr()
853 rdma_alloc_commit_uobject(new_uobj, attrs); in ib_uverbs_rereg_mr()
872 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_rereg_mr()
876 uobj_alloc_abort(new_uobj, attrs); in ib_uverbs_rereg_mr()
888 static int ib_uverbs_dereg_mr(struct uverbs_attr_bundle *attrs) in ib_uverbs_dereg_mr() argument
893 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_dereg_mr()
897 return uobj_perform_destroy(UVERBS_OBJECT_MR, cmd.mr_handle, attrs); in ib_uverbs_dereg_mr()
900 static int ib_uverbs_alloc_mw(struct uverbs_attr_bundle *attrs) in ib_uverbs_alloc_mw() argument
910 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_alloc_mw()
914 uobj = uobj_alloc(UVERBS_OBJECT_MW, attrs, &ib_dev); in ib_uverbs_alloc_mw()
918 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_alloc_mw()
940 ret = pd->device->ops.alloc_mw(mw, &attrs->driver_udata); in ib_uverbs_alloc_mw()
948 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_alloc_mw()
952 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_alloc_mw()
959 uobj_alloc_abort(uobj, attrs); in ib_uverbs_alloc_mw()
963 static int ib_uverbs_dealloc_mw(struct uverbs_attr_bundle *attrs) in ib_uverbs_dealloc_mw() argument
968 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_dealloc_mw()
972 return uobj_perform_destroy(UVERBS_OBJECT_MW, cmd.mw_handle, attrs); in ib_uverbs_dealloc_mw()
975 static int ib_uverbs_create_comp_channel(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_comp_channel() argument
984 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_comp_channel()
988 uobj = uobj_alloc(UVERBS_OBJECT_COMP_CHANNEL, attrs, &ib_dev); in ib_uverbs_create_comp_channel()
995 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_create_comp_channel()
998 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_create_comp_channel()
1001 static int create_cq(struct uverbs_attr_bundle *attrs, in create_cq() argument
1012 if (cmd->comp_vector >= attrs->ufile->device->num_comp_vectors) in create_cq()
1015 obj = (struct ib_ucq_object *)uobj_alloc(UVERBS_OBJECT_CQ, attrs, in create_cq()
1021 ev_file = ib_uverbs_lookup_comp_file(cmd->comp_channel, attrs); in create_cq()
1051 ret = ib_dev->ops.create_cq(cq, &attr, &attrs->driver_udata); in create_cq()
1057 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in create_cq()
1060 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in create_cq()
1064 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in create_cq()
1065 return uverbs_response(attrs, &resp, sizeof(resp)); in create_cq()
1074 uobj_alloc_abort(&obj->uevent.uobject, attrs); in create_cq()
1078 static int ib_uverbs_create_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_cq() argument
1084 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_cq()
1094 return create_cq(attrs, &cmd_ex); in ib_uverbs_create_cq()
1097 static int ib_uverbs_ex_create_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_cq() argument
1102 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_cq()
1112 return create_cq(attrs, &cmd); in ib_uverbs_ex_create_cq()
1115 static int ib_uverbs_resize_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_resize_cq() argument
1122 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_resize_cq()
1126 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_resize_cq()
1130 ret = cq->device->ops.resize_cq(cq, cmd.cqe, &attrs->driver_udata); in ib_uverbs_resize_cq()
1136 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_resize_cq()
1174 static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_poll_cq() argument
1184 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_poll_cq()
1188 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_poll_cq()
1193 header_ptr = attrs->ucore.outbuf; in ib_uverbs_poll_cq()
1218 if (uverbs_attr_is_valid(attrs, UVERBS_ATTR_CORE_OUT)) in ib_uverbs_poll_cq()
1219 ret = uverbs_output_written(attrs, UVERBS_ATTR_CORE_OUT); in ib_uverbs_poll_cq()
1227 static int ib_uverbs_req_notify_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_req_notify_cq() argument
1233 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_req_notify_cq()
1237 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_req_notify_cq()
1249 static int ib_uverbs_destroy_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_cq() argument
1257 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_cq()
1261 uobj = uobj_get_destroy(UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_destroy_cq()
1272 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_destroy_cq()
1275 static int create_qp(struct uverbs_attr_bundle *attrs, in create_qp() argument
1309 obj = (struct ib_uqp_object *)uobj_alloc(UVERBS_OBJECT_QP, attrs, in create_qp()
1320 cmd->rwq_ind_tbl_handle, attrs); in create_qp()
1339 attrs); in create_qp()
1359 cmd->srq_handle, attrs); in create_qp()
1370 cmd->recv_cq_handle, attrs); in create_qp()
1381 cmd->send_cq_handle, attrs); in create_qp()
1385 attrs); in create_qp()
1435 qp = ib_create_qp_user(device, pd, &attr, &attrs->driver_udata, obj, in create_qp()
1444 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in create_qp()
1468 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in create_qp()
1477 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in create_qp()
1478 return uverbs_response(attrs, &resp, sizeof(resp)); in create_qp()
1497 uobj_alloc_abort(&obj->uevent.uobject, attrs); in create_qp()
1501 static int ib_uverbs_create_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_qp() argument
1507 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_qp()
1526 return create_qp(attrs, &cmd_ex); in ib_uverbs_create_qp()
1529 static int ib_uverbs_ex_create_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_qp() argument
1534 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_qp()
1544 return create_qp(attrs, &cmd); in ib_uverbs_ex_create_qp()
1547 static int ib_uverbs_open_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_open_qp() argument
1559 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_open_qp()
1563 obj = (struct ib_uqp_object *)uobj_alloc(UVERBS_OBJECT_QP, attrs, in ib_uverbs_open_qp()
1568 xrcd_uobj = uobj_get_read(UVERBS_OBJECT_XRCD, cmd.pd_handle, attrs); in ib_uverbs_open_qp()
1600 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in ib_uverbs_open_qp()
1604 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_open_qp()
1609 uobj_alloc_abort(&obj->uevent.uobject, attrs); in ib_uverbs_open_qp()
1635 static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_query_qp() argument
1644 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_query_qp()
1655 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_query_qp()
1703 ret = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_query_qp()
1749 static int modify_qp(struct uverbs_attr_bundle *attrs, in modify_qp() argument
1761 attrs); in modify_qp()
1898 &attrs->driver_udata); in modify_qp()
1909 static int ib_uverbs_modify_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_modify_qp() argument
1914 ret = uverbs_request(attrs, &cmd.base, sizeof(cmd.base)); in ib_uverbs_modify_qp()
1921 return modify_qp(attrs, &cmd); in ib_uverbs_modify_qp()
1924 static int ib_uverbs_ex_modify_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_modify_qp() argument
1928 .response_length = uverbs_response_length(attrs, sizeof(resp)) in ib_uverbs_ex_modify_qp()
1932 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_modify_qp()
1943 ret = modify_qp(attrs, &cmd); in ib_uverbs_ex_modify_qp()
1947 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_modify_qp()
1950 static int ib_uverbs_destroy_qp(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_qp() argument
1958 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_qp()
1962 uobj = uobj_get_destroy(UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_destroy_qp()
1972 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_destroy_qp()
1986 static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs) in ib_uverbs_post_send() argument
2002 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_post_send()
2020 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_post_send()
2058 user_wr->wr.ud.ah, attrs); in ib_uverbs_post_send()
2158 ret2 = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_post_send()
2278 static int ib_uverbs_post_recv(struct uverbs_attr_bundle *attrs) in ib_uverbs_post_recv() argument
2288 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_post_recv()
2297 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_post_recv()
2316 ret2 = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_post_recv()
2329 static int ib_uverbs_post_srq_recv(struct uverbs_attr_bundle *attrs) in ib_uverbs_post_srq_recv() argument
2339 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_post_srq_recv()
2348 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_post_srq_recv()
2367 ret2 = uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_post_srq_recv()
2381 static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_ah() argument
2392 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_ah()
2396 uobj = uobj_alloc(UVERBS_OBJECT_AH, attrs, &ib_dev); in ib_uverbs_create_ah()
2405 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_create_ah()
2429 ah = rdma_create_user_ah(pd, &attr, &attrs->driver_udata); in ib_uverbs_create_ah()
2439 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_create_ah()
2442 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_create_ah()
2447 uobj_alloc_abort(uobj, attrs); in ib_uverbs_create_ah()
2451 static int ib_uverbs_destroy_ah(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_ah() argument
2456 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_ah()
2460 return uobj_perform_destroy(UVERBS_OBJECT_AH, cmd.ah_handle, attrs); in ib_uverbs_destroy_ah()
2463 static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs) in ib_uverbs_attach_mcast() argument
2471 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_attach_mcast()
2475 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_attach_mcast()
2512 static int ib_uverbs_detach_mcast(struct uverbs_attr_bundle *attrs) in ib_uverbs_detach_mcast() argument
2521 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_detach_mcast()
2525 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_detach_mcast()
2631 static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs, in kern_spec_to_ib_spec_action() argument
2660 attrs); in kern_spec_to_ib_spec_action()
2678 attrs); in kern_spec_to_ib_spec_action()
2858 static int kern_spec_to_ib_spec(struct uverbs_attr_bundle *attrs, in kern_spec_to_ib_spec() argument
2867 return kern_spec_to_ib_spec_action(attrs, kern_spec, ib_spec, in kern_spec_to_ib_spec()
2873 static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_wq() argument
2885 err = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_wq()
2892 obj = (struct ib_uwq_object *)uobj_alloc(UVERBS_OBJECT_WQ, attrs, in ib_uverbs_ex_create_wq()
2897 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs); in ib_uverbs_ex_create_wq()
2903 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_ex_create_wq()
2918 wq = pd->device->ops.create_wq(pd, &wq_init_attr, &attrs->driver_udata); in ib_uverbs_ex_create_wq()
2933 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in ib_uverbs_ex_create_wq()
2940 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in ib_uverbs_ex_create_wq()
2946 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_create_wq()
2947 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_create_wq()
2955 uobj_alloc_abort(&obj->uevent.uobject, attrs); in ib_uverbs_ex_create_wq()
2960 static int ib_uverbs_ex_destroy_wq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_destroy_wq() argument
2968 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_destroy_wq()
2975 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_destroy_wq()
2976 uobj = uobj_get_destroy(UVERBS_OBJECT_WQ, cmd.wq_handle, attrs); in ib_uverbs_ex_destroy_wq()
2985 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_destroy_wq()
2988 static int ib_uverbs_ex_modify_wq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_modify_wq() argument
2995 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_modify_wq()
3005 wq = uobj_get_obj_read(wq, UVERBS_OBJECT_WQ, cmd.wq_handle, attrs); in ib_uverbs_ex_modify_wq()
3033 &attrs->driver_udata); in ib_uverbs_ex_modify_wq()
3039 static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_rwq_ind_table() argument
3055 err = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_rwq_ind_table()
3089 wqs_handles[num_read_wqs], attrs); in ib_uverbs_ex_create_rwq_ind_table()
3099 uobj = uobj_alloc(UVERBS_OBJECT_RWQ_IND_TBL, attrs, &ib_dev); in ib_uverbs_ex_create_rwq_ind_table()
3122 &attrs->driver_udata); in ib_uverbs_ex_create_rwq_ind_table()
3130 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_ex_create_rwq_ind_table()
3134 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_create_rwq_ind_table()
3135 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_create_rwq_ind_table()
3140 uobj_alloc_abort(uobj, attrs); in ib_uverbs_ex_create_rwq_ind_table()
3153 static int ib_uverbs_ex_destroy_rwq_ind_table(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_destroy_rwq_ind_table() argument
3158 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_destroy_rwq_ind_table()
3166 cmd.ind_tbl_handle, attrs); in ib_uverbs_ex_destroy_rwq_ind_table()
3169 static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_create_flow() argument
3186 err = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd)); in ib_uverbs_ex_create_flow()
3234 uobj = uobj_alloc(UVERBS_OBJECT_FLOW, attrs, &ib_dev); in ib_uverbs_ex_create_flow()
3245 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs); in ib_uverbs_ex_create_flow()
3282 attrs, (struct ib_uverbs_flow_spec *)kern_spec, in ib_uverbs_ex_create_flow()
3301 &attrs->driver_udata); in ib_uverbs_ex_create_flow()
3316 uobj_finalize_uobj_create(uobj, attrs); in ib_uverbs_ex_create_flow()
3319 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_create_flow()
3329 uobj_alloc_abort(uobj, attrs); in ib_uverbs_ex_create_flow()
3336 static int ib_uverbs_ex_destroy_flow(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_destroy_flow() argument
3341 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_destroy_flow()
3348 return uobj_perform_destroy(UVERBS_OBJECT_FLOW, cmd.flow_handle, attrs); in ib_uverbs_ex_destroy_flow()
3351 static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs, in __uverbs_create_xsrq() argument
3364 obj = (struct ib_usrq_object *)uobj_alloc(UVERBS_OBJECT_SRQ, attrs, in __uverbs_create_xsrq()
3374 attrs); in __uverbs_create_xsrq()
3392 cmd->cq_handle, attrs); in __uverbs_create_xsrq()
3399 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle, attrs); in __uverbs_create_xsrq()
3422 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file); in __uverbs_create_xsrq()
3437 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs); in __uverbs_create_xsrq()
3442 return uverbs_response(attrs, &resp, sizeof(resp)); in __uverbs_create_xsrq()
3458 uobj_alloc_abort(&obj->uevent.uobject, attrs); in __uverbs_create_xsrq()
3462 static int ib_uverbs_create_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_srq() argument
3468 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_srq()
3481 return __uverbs_create_xsrq(attrs, &xcmd, &attrs->driver_udata); in ib_uverbs_create_srq()
3484 static int ib_uverbs_create_xsrq(struct uverbs_attr_bundle *attrs) in ib_uverbs_create_xsrq() argument
3489 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_create_xsrq()
3493 return __uverbs_create_xsrq(attrs, &cmd, &attrs->driver_udata); in ib_uverbs_create_xsrq()
3496 static int ib_uverbs_modify_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_modify_srq() argument
3503 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_modify_srq()
3507 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_modify_srq()
3515 &attrs->driver_udata); in ib_uverbs_modify_srq()
3523 static int ib_uverbs_query_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_query_srq() argument
3531 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_query_srq()
3535 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_query_srq()
3553 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_query_srq()
3556 static int ib_uverbs_destroy_srq(struct uverbs_attr_bundle *attrs) in ib_uverbs_destroy_srq() argument
3564 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_destroy_srq()
3568 uobj = uobj_get_destroy(UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs); in ib_uverbs_destroy_srq()
3578 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_destroy_srq()
3581 static int ib_uverbs_ex_query_device(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_query_device() argument
3590 ucontext = ib_uverbs_get_ucontext(attrs); in ib_uverbs_ex_query_device()
3595 err = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_query_device()
3605 err = ib_dev->ops.query_device(ib_dev, &attr, &attrs->driver_udata); in ib_uverbs_ex_query_device()
3640 resp.response_length = uverbs_response_length(attrs, sizeof(resp)); in ib_uverbs_ex_query_device()
3642 return uverbs_response(attrs, &resp, sizeof(resp)); in ib_uverbs_ex_query_device()
3645 static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs) in ib_uverbs_ex_modify_cq() argument
3651 ret = uverbs_request(attrs, &cmd, sizeof(cmd)); in ib_uverbs_ex_modify_cq()
3661 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs); in ib_uverbs_ex_modify_cq()