Lines Matching defs:attrs

59 static int uverbs_response(struct uverbs_attr_bundle *attrs, const void *resp,
64 if (uverbs_attr_is_valid(attrs, UVERBS_ATTR_CORE_OUT))
66 attrs, UVERBS_ATTR_CORE_OUT, resp, resp_len);
68 if (copy_to_user(attrs->ucore.outbuf, resp,
69 min(attrs->ucore.outlen, resp_len)))
72 if (resp_len < attrs->ucore.outlen) {
77 ret = clear_user(attrs->ucore.outbuf + resp_len,
78 attrs->ucore.outlen - resp_len);
92 static int uverbs_request(struct uverbs_attr_bundle *attrs, void *req,
95 if (copy_from_user(req, attrs->ucore.inbuf,
96 min(attrs->ucore.inlen, req_len)))
99 if (attrs->ucore.inlen < req_len) {
100 memset(req + attrs->ucore.inlen, 0,
101 req_len - attrs->ucore.inlen);
102 } else if (attrs->ucore.inlen > req_len) {
103 if (!ib_is_buffer_cleared(attrs->ucore.inbuf + req_len,
104 attrs->ucore.inlen - req_len))
116 static u32 uverbs_response_length(struct uverbs_attr_bundle *attrs,
119 return min_t(size_t, attrs->ucore.outlen, resp_len);
131 static int uverbs_request_start(struct uverbs_attr_bundle *attrs,
136 if (attrs->ucore.inlen < req_len)
139 if (copy_from_user(req, attrs->ucore.inbuf, req_len))
142 iter->cur = attrs->ucore.inbuf + req_len;
143 iter->end = attrs->ucore.inbuf + attrs->ucore.inlen;
183 struct ib_udata *uverbs_get_cleared_udata(struct uverbs_attr_bundle *attrs)
185 attrs->driver_udata = (struct ib_udata){};
186 return &attrs->driver_udata;
190 _ib_uverbs_lookup_comp_file(s32 fd, struct uverbs_attr_bundle *attrs)
193 fd, attrs);
207 int ib_alloc_ucontext(struct uverbs_attr_bundle *attrs)
209 struct ib_uverbs_file *ufile = attrs->ufile;
228 attrs->context = ucontext;
232 int ib_init_ucontext(struct uverbs_attr_bundle *attrs)
234 struct ib_ucontext *ucontext = attrs->context;
235 struct ib_uverbs_file *file = attrs->ufile;
253 if (uverbs_attr_is_valid(attrs, UVERBS_ATTR_GET_CONTEXT_FD_ARR)) {
254 fd_count = uverbs_attr_ptr_get_array_size(attrs,
262 fd_array = uverbs_attr_get_alloced_ptr(attrs,
270 &attrs->driver_udata);
295 static int ib_uverbs_get_context(struct uverbs_attr_bundle *attrs)
303 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
307 ret = ib_alloc_ucontext(attrs);
311 uobj = uobj_alloc(UVERBS_OBJECT_ASYNC_EVENT, attrs, &ib_dev);
318 .num_comp_vectors = attrs->ufile->device->num_comp_vectors,
321 ret = uverbs_response(attrs, &resp, sizeof(resp));
325 ret = ib_init_ucontext(attrs);
331 rdma_alloc_commit_uobject(uobj, attrs);
335 rdma_alloc_abort_uobject(uobj, attrs, false);
337 rdma_restrack_put(&attrs->context->res);
338 kfree(attrs->context);
339 attrs->context = NULL;
389 static int ib_uverbs_query_device(struct uverbs_attr_bundle *attrs)
396 ucontext = ib_uverbs_get_ucontext(attrs);
400 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
405 copy_query_dev_fields(ucontext, &resp, &ucontext->device->attrs);
407 return uverbs_response(attrs, &resp, sizeof(resp));
410 static int ib_uverbs_query_port(struct uverbs_attr_bundle *attrs)
419 ucontext = ib_uverbs_get_ucontext(attrs);
424 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
435 return uverbs_response(attrs, &resp, sizeof(resp));
438 static int ib_uverbs_alloc_pd(struct uverbs_attr_bundle *attrs)
447 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
451 uobj = uobj_alloc(UVERBS_OBJECT_PD, attrs, &ib_dev);
468 ret = ib_dev->ops.alloc_pd(pd, &attrs->driver_udata);
474 uobj_finalize_uobj_create(uobj, attrs);
477 return uverbs_response(attrs, &resp, sizeof(resp));
483 uobj_alloc_abort(uobj, attrs);
487 static int ib_uverbs_dealloc_pd(struct uverbs_attr_bundle *attrs)
492 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
496 return uobj_perform_destroy(UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
584 static int ib_uverbs_open_xrcd(struct uverbs_attr_bundle *attrs)
586 struct ib_uverbs_device *ibudev = attrs->ufile->device;
597 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
625 obj = (struct ib_uxrcd_object *)uobj_alloc(UVERBS_OBJECT_XRCD, attrs,
633 xrcd = ib_alloc_xrcd_user(ib_dev, inode, &attrs->driver_udata);
657 uobj_finalize_uobj_create(&obj->uobject, attrs);
660 return uverbs_response(attrs, &resp, sizeof(resp));
663 ib_dealloc_xrcd_user(xrcd, uverbs_get_cleared_udata(attrs));
666 uobj_alloc_abort(&obj->uobject, attrs);
676 static int ib_uverbs_close_xrcd(struct uverbs_attr_bundle *attrs)
681 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
685 return uobj_perform_destroy(UVERBS_OBJECT_XRCD, cmd.xrcd_handle, attrs);
690 struct uverbs_attr_bundle *attrs)
694 struct ib_uverbs_device *dev = attrs->ufile->device;
700 ret = ib_dealloc_xrcd_user(xrcd, &attrs->driver_udata);
712 static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
722 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
729 uobj = uobj_alloc(UVERBS_OBJECT_MR, attrs, &ib_dev);
737 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
745 &attrs->driver_udata);
767 uobj_finalize_uobj_create(uobj, attrs);
772 return uverbs_response(attrs, &resp, sizeof(resp));
777 uobj_alloc_abort(uobj, attrs);
781 static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs)
794 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
808 uobj = uobj_get_write(UVERBS_OBJECT_MR, cmd.mr_handle, attrs);
828 attrs);
841 new_uobj = uobj_alloc(UVERBS_OBJECT_MR, attrs, &ib_dev);
849 &attrs->driver_udata);
870 rdma_assign_uobject(uobj, new_uobj, attrs);
871 rdma_alloc_commit_uobject(new_uobj, attrs);
892 ret = uverbs_response(attrs, &resp, sizeof(resp));
896 uobj_alloc_abort(new_uobj, attrs);
908 static int ib_uverbs_dereg_mr(struct uverbs_attr_bundle *attrs)
913 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
917 return uobj_perform_destroy(UVERBS_OBJECT_MR, cmd.mr_handle, attrs);
920 static int ib_uverbs_alloc_mw(struct uverbs_attr_bundle *attrs)
930 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
934 uobj = uobj_alloc(UVERBS_OBJECT_MW, attrs, &ib_dev);
938 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
960 ret = pd->device->ops.alloc_mw(mw, &attrs->driver_udata);
968 uobj_finalize_uobj_create(uobj, attrs);
972 return uverbs_response(attrs, &resp, sizeof(resp));
979 uobj_alloc_abort(uobj, attrs);
983 static int ib_uverbs_dealloc_mw(struct uverbs_attr_bundle *attrs)
988 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
992 return uobj_perform_destroy(UVERBS_OBJECT_MW, cmd.mw_handle, attrs);
995 static int ib_uverbs_create_comp_channel(struct uverbs_attr_bundle *attrs)
1004 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1008 uobj = uobj_alloc(UVERBS_OBJECT_COMP_CHANNEL, attrs, &ib_dev);
1015 uobj_finalize_uobj_create(uobj, attrs);
1018 return uverbs_response(attrs, &resp, sizeof(resp));
1021 static int create_cq(struct uverbs_attr_bundle *attrs,
1032 if (cmd->comp_vector >= attrs->ufile->device->num_comp_vectors)
1035 obj = (struct ib_ucq_object *)uobj_alloc(UVERBS_OBJECT_CQ, attrs,
1041 ev_file = ib_uverbs_lookup_comp_file(cmd->comp_channel, attrs);
1071 ret = ib_dev->ops.create_cq(cq, &attr, attrs);
1077 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file);
1080 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs);
1084 resp.response_length = uverbs_response_length(attrs, sizeof(resp));
1085 return uverbs_response(attrs, &resp, sizeof(resp));
1094 uobj_alloc_abort(&obj->uevent.uobject, attrs);
1098 static int ib_uverbs_create_cq(struct uverbs_attr_bundle *attrs)
1104 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1114 return create_cq(attrs, &cmd_ex);
1117 static int ib_uverbs_ex_create_cq(struct uverbs_attr_bundle *attrs)
1122 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1132 return create_cq(attrs, &cmd);
1135 static int ib_uverbs_resize_cq(struct uverbs_attr_bundle *attrs)
1142 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1146 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
1150 ret = cq->device->ops.resize_cq(cq, cmd.cqe, &attrs->driver_udata);
1156 ret = uverbs_response(attrs, &resp, sizeof(resp));
1194 static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs)
1204 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1208 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
1213 header_ptr = attrs->ucore.outbuf;
1238 if (uverbs_attr_is_valid(attrs, UVERBS_ATTR_CORE_OUT))
1239 ret = uverbs_output_written(attrs, UVERBS_ATTR_CORE_OUT);
1247 static int ib_uverbs_req_notify_cq(struct uverbs_attr_bundle *attrs)
1253 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1257 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
1269 static int ib_uverbs_destroy_cq(struct uverbs_attr_bundle *attrs)
1277 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1281 uobj = uobj_get_destroy(UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
1292 return uverbs_response(attrs, &resp, sizeof(resp));
1295 static int create_qp(struct uverbs_attr_bundle *attrs,
1315 if (!rdma_uattrs_has_raw_cap(attrs))
1329 obj = (struct ib_uqp_object *)uobj_alloc(UVERBS_OBJECT_QP, attrs,
1340 cmd->rwq_ind_tbl_handle, attrs);
1359 attrs);
1379 cmd->srq_handle, attrs);
1392 cmd->recv_cq_handle, attrs);
1403 cmd->send_cq_handle, attrs);
1413 attrs);
1454 if (!rdma_uattrs_has_raw_cap(attrs)) {
1462 qp = ib_create_qp_user(device, pd, &attr, &attrs->driver_udata, obj,
1471 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file);
1495 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs);
1504 resp.response_length = uverbs_response_length(attrs, sizeof(resp));
1505 return uverbs_response(attrs, &resp, sizeof(resp));
1524 uobj_alloc_abort(&obj->uevent.uobject, attrs);
1528 static int ib_uverbs_create_qp(struct uverbs_attr_bundle *attrs)
1534 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1553 return create_qp(attrs, &cmd_ex);
1556 static int ib_uverbs_ex_create_qp(struct uverbs_attr_bundle *attrs)
1561 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1571 return create_qp(attrs, &cmd);
1574 static int ib_uverbs_open_qp(struct uverbs_attr_bundle *attrs)
1586 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1590 obj = (struct ib_uqp_object *)uobj_alloc(UVERBS_OBJECT_QP, attrs,
1595 xrcd_uobj = uobj_get_read(UVERBS_OBJECT_XRCD, cmd.pd_handle, attrs);
1627 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs);
1631 return uverbs_response(attrs, &resp, sizeof(resp));
1636 uobj_alloc_abort(&obj->uevent.uobject, attrs);
1662 static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs)
1671 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1682 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
1730 ret = uverbs_response(attrs, &resp, sizeof(resp));
1776 static int modify_qp(struct uverbs_attr_bundle *attrs,
1788 attrs);
1881 rdma_uattrs_has_raw_cap(attrs))) {
1932 &attrs->driver_udata);
1943 static int ib_uverbs_modify_qp(struct uverbs_attr_bundle *attrs)
1948 ret = uverbs_request(attrs, &cmd.base, sizeof(cmd.base));
1955 return modify_qp(attrs, &cmd);
1958 static int ib_uverbs_ex_modify_qp(struct uverbs_attr_bundle *attrs)
1962 .response_length = uverbs_response_length(attrs, sizeof(resp))
1966 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1977 ret = modify_qp(attrs, &cmd);
1981 return uverbs_response(attrs, &resp, sizeof(resp));
1984 static int ib_uverbs_destroy_qp(struct uverbs_attr_bundle *attrs)
1992 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
1996 uobj = uobj_get_destroy(UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
2006 return uverbs_response(attrs, &resp, sizeof(resp));
2020 static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
2036 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd));
2056 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
2094 user_wr->wr.ud.ah, attrs);
2194 ret2 = uverbs_response(attrs, &resp, sizeof(resp));
2314 static int ib_uverbs_post_recv(struct uverbs_attr_bundle *attrs)
2324 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd));
2333 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
2352 ret2 = uverbs_response(attrs, &resp, sizeof(resp));
2365 static int ib_uverbs_post_srq_recv(struct uverbs_attr_bundle *attrs)
2375 ret = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd));
2384 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
2403 ret2 = uverbs_response(attrs, &resp, sizeof(resp));
2417 static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs)
2428 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
2432 uobj = uobj_alloc(UVERBS_OBJECT_AH, attrs, &ib_dev);
2441 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
2465 ah = rdma_create_user_ah(pd, &attr, &attrs->driver_udata);
2475 uobj_finalize_uobj_create(uobj, attrs);
2478 return uverbs_response(attrs, &resp, sizeof(resp));
2483 uobj_alloc_abort(uobj, attrs);
2487 static int ib_uverbs_destroy_ah(struct uverbs_attr_bundle *attrs)
2492 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
2496 return uobj_perform_destroy(UVERBS_OBJECT_AH, cmd.ah_handle, attrs);
2499 static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs)
2507 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
2511 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
2548 static int ib_uverbs_detach_mcast(struct uverbs_attr_bundle *attrs)
2557 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
2561 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
2667 static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
2696 attrs);
2714 attrs);
2894 static int kern_spec_to_ib_spec(struct uverbs_attr_bundle *attrs,
2903 return kern_spec_to_ib_spec_action(attrs, kern_spec, ib_spec,
2909 static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs)
2921 err = uverbs_request(attrs, &cmd, sizeof(cmd));
2928 obj = (struct ib_uwq_object *)uobj_alloc(UVERBS_OBJECT_WQ, attrs,
2933 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
2939 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
2954 wq = pd->device->ops.create_wq(pd, &wq_init_attr, &attrs->driver_udata);
2969 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file);
2976 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs);
2982 resp.response_length = uverbs_response_length(attrs, sizeof(resp));
2983 return uverbs_response(attrs, &resp, sizeof(resp));
2991 uobj_alloc_abort(&obj->uevent.uobject, attrs);
2996 static int ib_uverbs_ex_destroy_wq(struct uverbs_attr_bundle *attrs)
3004 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3011 resp.response_length = uverbs_response_length(attrs, sizeof(resp));
3012 uobj = uobj_get_destroy(UVERBS_OBJECT_WQ, cmd.wq_handle, attrs);
3021 return uverbs_response(attrs, &resp, sizeof(resp));
3024 static int ib_uverbs_ex_modify_wq(struct uverbs_attr_bundle *attrs)
3031 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3041 wq = uobj_get_obj_read(wq, UVERBS_OBJECT_WQ, cmd.wq_handle, attrs);
3069 &attrs->driver_udata);
3075 static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs)
3091 err = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd));
3125 wqs_handles[num_read_wqs], attrs);
3135 uobj = uobj_alloc(UVERBS_OBJECT_RWQ_IND_TBL, attrs, &ib_dev);
3158 &attrs->driver_udata);
3166 uobj_finalize_uobj_create(uobj, attrs);
3170 resp.response_length = uverbs_response_length(attrs, sizeof(resp));
3171 return uverbs_response(attrs, &resp, sizeof(resp));
3176 uobj_alloc_abort(uobj, attrs);
3189 static int ib_uverbs_ex_destroy_rwq_ind_table(struct uverbs_attr_bundle *attrs)
3194 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3202 cmd.ind_tbl_handle, attrs);
3205 static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs)
3222 err = uverbs_request_start(attrs, &iter, &cmd, sizeof(cmd));
3229 if (!rdma_uattrs_has_raw_cap(attrs))
3270 uobj = uobj_alloc(UVERBS_OBJECT_FLOW, attrs, &ib_dev);
3281 qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
3318 attrs, (struct ib_uverbs_flow_spec *)kern_spec,
3337 &attrs->driver_udata);
3352 uobj_finalize_uobj_create(uobj, attrs);
3355 return uverbs_response(attrs, &resp, sizeof(resp));
3365 uobj_alloc_abort(uobj, attrs);
3372 static int ib_uverbs_ex_destroy_flow(struct uverbs_attr_bundle *attrs)
3377 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3384 return uobj_perform_destroy(UVERBS_OBJECT_FLOW, cmd.flow_handle, attrs);
3387 static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs,
3400 obj = (struct ib_usrq_object *)uobj_alloc(UVERBS_OBJECT_SRQ, attrs,
3410 attrs);
3428 cmd->cq_handle, attrs);
3435 pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle, attrs);
3458 obj->uevent.event_file = READ_ONCE(attrs->ufile->default_async_file);
3473 uobj_finalize_uobj_create(&obj->uevent.uobject, attrs);
3478 return uverbs_response(attrs, &resp, sizeof(resp));
3494 uobj_alloc_abort(&obj->uevent.uobject, attrs);
3498 static int ib_uverbs_create_srq(struct uverbs_attr_bundle *attrs)
3504 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3517 return __uverbs_create_xsrq(attrs, &xcmd, &attrs->driver_udata);
3520 static int ib_uverbs_create_xsrq(struct uverbs_attr_bundle *attrs)
3525 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3529 return __uverbs_create_xsrq(attrs, &cmd, &attrs->driver_udata);
3532 static int ib_uverbs_modify_srq(struct uverbs_attr_bundle *attrs)
3539 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3543 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
3551 &attrs->driver_udata);
3559 static int ib_uverbs_query_srq(struct uverbs_attr_bundle *attrs)
3567 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3571 srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
3589 return uverbs_response(attrs, &resp, sizeof(resp));
3592 static int ib_uverbs_destroy_srq(struct uverbs_attr_bundle *attrs)
3600 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3604 uobj = uobj_get_destroy(UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
3614 return uverbs_response(attrs, &resp, sizeof(resp));
3617 static int ib_uverbs_ex_query_device(struct uverbs_attr_bundle *attrs)
3626 ucontext = ib_uverbs_get_ucontext(attrs);
3631 err = uverbs_request(attrs, &cmd, sizeof(cmd));
3641 err = ib_dev->ops.query_device(ib_dev, &attr, &attrs->driver_udata);
3676 resp.response_length = uverbs_response_length(attrs, sizeof(resp));
3678 return uverbs_response(attrs, &resp, sizeof(resp));
3681 static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs)
3687 ret = uverbs_request(attrs, &cmd, sizeof(cmd));
3697 cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);