* [PATCH v1 0/5] Take out ucontext from HW objects
@ 2019-08-28 9:15 Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 1/5] RDMA/uverbs: uobj_get_obj_read should return the ib_uobject Yuval Shaia
` (4 more replies)
0 siblings, 5 replies; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 9:15 UTC (permalink / raw)
To: dledford, jgg, oulijun, xavier.huwei, leon, parav, markz, swise,
galpress, israelr, monis, maxg, kamalheib1, yuval.shaia, denisd,
yuvalav, dennis.dalessandro, ereza, will, linux-rdma, jgg,
srabinov7, santosh.shilimkar
This patch-set, originaly part of Shared PD & MR patch-set, intend to take
out the field ucontext from the HW objects ib_pd and ib_mr.
v0 -> v1:
* Add the patch "RDMA/nldev: ib_pd can be pointed by multiple
ib_ucontext"
Shamir Rabinovitch (4):
RDMA/uverbs: uobj_get_obj_read should return the ib_uobject
RDMA/uverbs: Delete the macro uobj_put_obj_read
IB/{core,hw}: ib_pd should not have ib_uobject pointer
RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
Yuval Shaia (1):
IB/core: ib_mr should not have ib_uobject pointer
drivers/infiniband/core/nldev.c | 127 +++++++++-
drivers/infiniband/core/uverbs_cmd.c | 219 +++++++++++-------
drivers/infiniband/core/uverbs_std_types_mr.c | 1 -
drivers/infiniband/core/verbs.c | 4 -
drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 1 -
drivers/infiniband/hw/mlx5/main.c | 1 -
drivers/infiniband/hw/mthca/mthca_qp.c | 3 +-
include/rdma/ib_verbs.h | 2 -
include/rdma/uverbs_std_types.h | 11 +-
include/uapi/rdma/rdma_netlink.h | 3 +
10 files changed, 271 insertions(+), 101 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v1 1/5] RDMA/uverbs: uobj_get_obj_read should return the ib_uobject
2019-08-28 9:15 [PATCH v1 0/5] Take out ucontext from HW objects Yuval Shaia
@ 2019-08-28 9:15 ` Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 2/5] RDMA/uverbs: Delete the macro uobj_put_obj_read Yuval Shaia
` (3 subsequent siblings)
4 siblings, 0 replies; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 9:15 UTC (permalink / raw)
To: dledford, jgg, oulijun, xavier.huwei, leon, parav, markz, swise,
galpress, israelr, monis, maxg, kamalheib1, yuval.shaia, denisd,
yuvalav, dennis.dalessandro, ereza, will, linux-rdma, jgg,
srabinov7, santosh.shilimkar
Cc: Shamir Rabinovitch
From: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
The uobject pointer will be removed from ib_x (ib_pd, ib_mr,...) objects.
uobj_get_obj_read and uobj_put_obj_read macros were constructed with the
assumption that ib_x can figure the uobject in mind.
Fix this wrong assumption.
Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
Signed-off-by: Shamir Rabinovitch <srabinov7@gmail.com>
---
drivers/infiniband/core/uverbs_cmd.c | 125 ++++++++++++++++++++-------
include/rdma/uverbs_std_types.h | 8 +-
2 files changed, 98 insertions(+), 35 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 7ddd0e5bc6b3..b0dc301918bf 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -37,6 +37,7 @@
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/sched.h>
+#include <linux/list.h>
#include <linux/uaccess.h>
@@ -711,6 +712,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_reg_mr cmd;
struct ib_uverbs_reg_mr_resp resp;
struct ib_uobject *uobj;
+ struct ib_uobject *pduobj;
struct ib_pd *pd;
struct ib_mr *mr;
int ret;
@@ -731,7 +733,8 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
if (IS_ERR(uobj))
return PTR_ERR(uobj);
- pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
+ pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs,
+ &pduobj);
if (!pd) {
ret = -EINVAL;
goto err_free;
@@ -799,6 +802,7 @@ static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs)
struct ib_pd *old_pd;
int ret;
struct ib_uobject *uobj;
+ struct ib_uobject *pduobj = NULL;
ret = uverbs_request(attrs, &cmd, sizeof(cmd));
if (ret)
@@ -831,7 +835,7 @@ static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs)
if (cmd.flags & IB_MR_REREG_PD) {
pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle,
- attrs);
+ attrs, &pduobj);
if (!pd) {
ret = -EINVAL;
goto put_uobjs;
@@ -885,6 +889,7 @@ static int ib_uverbs_alloc_mw(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_alloc_mw cmd;
struct ib_uverbs_alloc_mw_resp resp;
struct ib_uobject *uobj;
+ struct ib_uobject *pduobj;
struct ib_pd *pd;
struct ib_mw *mw;
int ret;
@@ -898,7 +903,8 @@ static int ib_uverbs_alloc_mw(struct uverbs_attr_bundle *attrs)
if (IS_ERR(uobj))
return PTR_ERR(uobj);
- pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
+ pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs,
+ &pduobj);
if (!pd) {
ret = -EINVAL;
goto err_free;
@@ -1117,6 +1123,7 @@ static int ib_uverbs_resize_cq(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_resize_cq cmd;
struct ib_uverbs_resize_cq_resp resp = {};
+ struct ib_uobject *cquobj;
struct ib_cq *cq;
int ret = -EINVAL;
@@ -1124,7 +1131,8 @@ static int ib_uverbs_resize_cq(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
+ cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs,
+ &cquobj);
if (!cq)
return -EINVAL;
@@ -1177,6 +1185,7 @@ static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_poll_cq_resp resp;
u8 __user *header_ptr;
u8 __user *data_ptr;
+ struct ib_uobject *cquobj;
struct ib_cq *cq;
struct ib_wc wc;
int ret;
@@ -1185,7 +1194,8 @@ static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
+ cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs,
+ &cquobj);
if (!cq)
return -EINVAL;
@@ -1226,6 +1236,7 @@ static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs)
static int ib_uverbs_req_notify_cq(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_req_notify_cq cmd;
+ struct ib_uobject *cquobj;
struct ib_cq *cq;
int ret;
@@ -1233,7 +1244,8 @@ static int ib_uverbs_req_notify_cq(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
+ cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs,
+ &cquobj);
if (!cq)
return -EINVAL;
@@ -1276,16 +1288,21 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
{
struct ib_uqp_object *obj;
struct ib_device *device;
+ struct ib_uobject *pd_uobj = ERR_PTR(-ENOENT);
struct ib_pd *pd = NULL;
struct ib_xrcd *xrcd = NULL;
struct ib_uobject *xrcd_uobj = ERR_PTR(-ENOENT);
+ struct ib_uobject *scq_uobj = ERR_PTR(-ENOENT);
+ struct ib_uobject *rcq_uobj = ERR_PTR(-ENOENT);
struct ib_cq *scq = NULL, *rcq = NULL;
+ struct ib_uobject *srq_uobj = ERR_PTR(-ENOENT);
struct ib_srq *srq = NULL;
struct ib_qp *qp;
struct ib_qp_init_attr attr = {};
struct ib_uverbs_ex_create_qp_resp resp;
int ret;
struct ib_rwq_ind_table *ind_tbl = NULL;
+ struct ib_uobject *ind_tbl_uobj = ERR_PTR(-ENOENT);
bool has_sq = true;
struct ib_device *ib_dev;
@@ -1303,7 +1320,8 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
if (cmd->comp_mask & IB_UVERBS_CREATE_QP_MASK_IND_TABLE) {
ind_tbl = uobj_get_obj_read(rwq_ind_table,
UVERBS_OBJECT_RWQ_IND_TBL,
- cmd->rwq_ind_tbl_handle, attrs);
+ cmd->rwq_ind_tbl_handle, attrs,
+ &ind_tbl_uobj);
if (!ind_tbl) {
ret = -EINVAL;
goto err_put;
@@ -1342,7 +1360,8 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
} else {
if (cmd->is_srq) {
srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ,
- cmd->srq_handle, attrs);
+ cmd->srq_handle, attrs,
+ &srq_uobj);
if (!srq || srq->srq_type == IB_SRQT_XRC) {
ret = -EINVAL;
goto err_put;
@@ -1353,7 +1372,8 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
if (cmd->recv_cq_handle != cmd->send_cq_handle) {
rcq = uobj_get_obj_read(
cq, UVERBS_OBJECT_CQ,
- cmd->recv_cq_handle, attrs);
+ cmd->recv_cq_handle, attrs,
+ &rcq_uobj);
if (!rcq) {
ret = -EINVAL;
goto err_put;
@@ -1364,11 +1384,12 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
if (has_sq)
scq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
- cmd->send_cq_handle, attrs);
+ cmd->send_cq_handle, attrs,
+ &scq_uobj);
if (!ind_tbl)
rcq = rcq ?: scq;
pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle,
- attrs);
+ attrs, &pd_uobj);
if (!pd || (!scq && has_sq)) {
ret = -EINVAL;
goto err_put;
@@ -1663,6 +1684,7 @@ static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_query_qp cmd;
struct ib_uverbs_query_qp_resp resp;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
struct ib_qp_attr *attr;
struct ib_qp_init_attr *init_attr;
@@ -1679,7 +1701,8 @@ static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs)
goto out;
}
- qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
+ qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs,
+ &qpuobj);
if (!qp) {
ret = -EINVAL;
goto out;
@@ -1776,6 +1799,7 @@ static int modify_qp(struct uverbs_attr_bundle *attrs,
struct ib_uverbs_ex_modify_qp *cmd)
{
struct ib_qp_attr *attr;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
int ret;
@@ -1784,7 +1808,7 @@ static int modify_qp(struct uverbs_attr_bundle *attrs,
return -ENOMEM;
qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd->base.qp_handle,
- attrs);
+ attrs, &qpuobj);
if (!qp) {
ret = -EINVAL;
goto out;
@@ -2018,6 +2042,7 @@ static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_send_wr *user_wr;
struct ib_send_wr *wr = NULL, *last, *next;
const struct ib_send_wr *bad_wr;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
int i, sg_ind;
int is_ud;
@@ -2045,7 +2070,8 @@ static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
if (!user_wr)
return -ENOMEM;
- qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
+ qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs,
+ &qpuobj);
if (!qp) {
ret = -EINVAL;
goto out;
@@ -2068,6 +2094,7 @@ static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
if (is_ud) {
struct ib_ud_wr *ud;
+ struct ib_uobject *uobj;
if (user_wr->opcode != IB_WR_SEND &&
user_wr->opcode != IB_WR_SEND_WITH_IMM) {
@@ -2083,7 +2110,8 @@ static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
}
ud->ah = uobj_get_obj_read(ah, UVERBS_OBJECT_AH,
- user_wr->wr.ud.ah, attrs);
+ user_wr->wr.ud.ah, attrs,
+ &uobj);
if (!ud->ah) {
kfree(ud);
ret = -EINVAL;
@@ -2308,6 +2336,7 @@ static int ib_uverbs_post_recv(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_post_recv_resp resp;
struct ib_recv_wr *wr, *next;
const struct ib_recv_wr *bad_wr;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
int ret, ret2;
struct uverbs_req_iter iter;
@@ -2321,7 +2350,8 @@ static int ib_uverbs_post_recv(struct uverbs_attr_bundle *attrs)
if (IS_ERR(wr))
return PTR_ERR(wr);
- qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
+ qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs,
+ &qpuobj);
if (!qp) {
ret = -EINVAL;
goto out;
@@ -2358,6 +2388,7 @@ static int ib_uverbs_post_srq_recv(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_post_srq_recv_resp resp;
struct ib_recv_wr *wr, *next;
const struct ib_recv_wr *bad_wr;
+ struct ib_uobject *srquobj;
struct ib_srq *srq;
int ret, ret2;
struct uverbs_req_iter iter;
@@ -2371,7 +2402,8 @@ static int ib_uverbs_post_srq_recv(struct uverbs_attr_bundle *attrs)
if (IS_ERR(wr))
return PTR_ERR(wr);
- srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
+ srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs,
+ &srquobj);
if (!srq) {
ret = -EINVAL;
goto out;
@@ -2408,6 +2440,7 @@ static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_create_ah cmd;
struct ib_uverbs_create_ah_resp resp;
struct ib_uobject *uobj;
+ struct ib_uobject *pduobj;
struct ib_pd *pd;
struct ib_ah *ah;
struct rdma_ah_attr attr = {};
@@ -2427,7 +2460,8 @@ static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs)
goto err;
}
- pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
+ pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs,
+ &pduobj);
if (!pd) {
ret = -EINVAL;
goto err;
@@ -2497,6 +2531,7 @@ static int ib_uverbs_destroy_ah(struct uverbs_attr_bundle *attrs)
static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_attach_mcast cmd;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
struct ib_uqp_object *obj;
struct ib_uverbs_mcast_entry *mcast;
@@ -2506,7 +2541,8 @@ static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
+ qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs,
+ &qpuobj);
if (!qp)
return -EINVAL;
@@ -2546,6 +2582,7 @@ static int ib_uverbs_detach_mcast(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_detach_mcast cmd;
struct ib_uqp_object *obj;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
struct ib_uverbs_mcast_entry *mcast;
int ret;
@@ -2555,7 +2592,8 @@ static int ib_uverbs_detach_mcast(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
+ qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs,
+ &qpuobj);
if (!qp)
return -EINVAL;
@@ -2665,6 +2703,8 @@ static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
union ib_flow_spec *ib_spec,
struct ib_uflow_resources *uflow_res)
{
+ struct ib_uobject *uobj;
+
ib_spec->type = kern_spec->type;
switch (ib_spec->type) {
case IB_FLOW_SPEC_ACTION_TAG:
@@ -2689,7 +2729,7 @@ static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
ib_spec->action.act = uobj_get_obj_read(flow_action,
UVERBS_OBJECT_FLOW_ACTION,
kern_spec->action.handle,
- attrs);
+ attrs, &uobj);
if (!ib_spec->action.act)
return -EINVAL;
ib_spec->action.size =
@@ -2707,7 +2747,7 @@ static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
uobj_get_obj_read(counters,
UVERBS_OBJECT_COUNTERS,
kern_spec->flow_count.handle,
- attrs);
+ attrs, &uobj);
if (!ib_spec->flow_count.counters)
return -EINVAL;
ib_spec->flow_count.size =
@@ -2909,6 +2949,8 @@ static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_ex_create_wq_resp resp = {};
struct ib_uwq_object *obj;
int err = 0;
+ struct ib_uobject *cquobj;
+ struct ib_uobject *pduobj;
struct ib_cq *cq;
struct ib_pd *pd;
struct ib_wq *wq;
@@ -2927,13 +2969,15 @@ static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs)
if (IS_ERR(obj))
return PTR_ERR(obj);
- pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs);
+ pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd.pd_handle, attrs,
+ &pduobj);
if (!pd) {
err = -EINVAL;
goto err_uobj;
}
- cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
+ cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs,
+ &cquobj);
if (!cq) {
err = -EINVAL;
goto err_put_pd;
@@ -3025,6 +3069,7 @@ static int ib_uverbs_ex_destroy_wq(struct uverbs_attr_bundle *attrs)
static int ib_uverbs_ex_modify_wq(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_ex_modify_wq cmd;
+ struct ib_uobject *wquobj;
struct ib_wq *wq;
struct ib_wq_attr wq_attr = {};
int ret;
@@ -3039,7 +3084,8 @@ static int ib_uverbs_ex_modify_wq(struct uverbs_attr_bundle *attrs)
if (cmd.attr_mask > (IB_WQ_STATE | IB_WQ_CUR_STATE | IB_WQ_FLAGS))
return -EINVAL;
- wq = uobj_get_obj_read(wq, UVERBS_OBJECT_WQ, cmd.wq_handle, attrs);
+ wq = uobj_get_obj_read(wq, UVERBS_OBJECT_WQ, cmd.wq_handle, attrs,
+ &wquobj);
if (!wq)
return -EINVAL;
@@ -3104,8 +3150,11 @@ static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs)
for (num_read_wqs = 0; num_read_wqs < num_wq_handles;
num_read_wqs++) {
+ struct ib_uobject *uobj;
+
wq = uobj_get_obj_read(wq, UVERBS_OBJECT_WQ,
- wqs_handles[num_read_wqs], attrs);
+ wqs_handles[num_read_wqs], attrs,
+ &uobj);
if (!wq) {
err = -EINVAL;
goto put_wqs;
@@ -3166,6 +3215,7 @@ static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs)
err_free:
kfree(wqs_handles);
kfree(wqs);
+
return err;
}
@@ -3193,6 +3243,7 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs)
struct ib_flow *flow_id;
struct ib_uverbs_flow_attr *kern_flow_attr;
struct ib_flow_attr *flow_attr;
+ struct ib_uobject *qpuobj;
struct ib_qp *qp;
struct ib_uflow_resources *uflow_res;
struct ib_uverbs_flow_spec_hdr *kern_spec;
@@ -3256,7 +3307,8 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs)
goto err_free_attr;
}
- qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs);
+ qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, attrs,
+ &qpuobj);
if (!qp) {
err = -EINVAL;
goto err_uobj;
@@ -3371,6 +3423,8 @@ static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs,
{
struct ib_uverbs_create_srq_resp resp;
struct ib_usrq_object *obj;
+ struct ib_uobject *cquobj = ERR_PTR(-ENOENT);
+ struct ib_uobject *pduobj;
struct ib_pd *pd;
struct ib_srq *srq;
struct ib_uobject *uninitialized_var(xrcd_uobj);
@@ -3406,14 +3460,15 @@ static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs,
if (ib_srq_has_cq(cmd->srq_type)) {
attr.ext.cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
- cmd->cq_handle, attrs);
+ cmd->cq_handle, attrs, &cquobj);
if (!attr.ext.cq) {
ret = -EINVAL;
goto err_put_xrcd;
}
}
- pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle, attrs);
+ pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle, attrs,
+ &pduobj);
if (!pd) {
ret = -EINVAL;
goto err_put_cq;
@@ -3542,6 +3597,7 @@ static int ib_uverbs_create_xsrq(struct uverbs_attr_bundle *attrs)
static int ib_uverbs_modify_srq(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_modify_srq cmd;
+ struct ib_uobject *srquobj;
struct ib_srq *srq;
struct ib_srq_attr attr;
int ret;
@@ -3550,7 +3606,8 @@ static int ib_uverbs_modify_srq(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
+ srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs,
+ &srquobj);
if (!srq)
return -EINVAL;
@@ -3570,6 +3627,7 @@ static int ib_uverbs_query_srq(struct uverbs_attr_bundle *attrs)
struct ib_uverbs_query_srq cmd;
struct ib_uverbs_query_srq_resp resp;
struct ib_srq_attr attr;
+ struct ib_uobject *srquobj;
struct ib_srq *srq;
int ret;
@@ -3577,7 +3635,8 @@ static int ib_uverbs_query_srq(struct uverbs_attr_bundle *attrs)
if (ret)
return ret;
- srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs);
+ srq = uobj_get_obj_read(srq, UVERBS_OBJECT_SRQ, cmd.srq_handle, attrs,
+ &srquobj);
if (!srq)
return -EINVAL;
@@ -3689,6 +3748,7 @@ static int ib_uverbs_ex_query_device(struct uverbs_attr_bundle *attrs)
static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs)
{
struct ib_uverbs_ex_modify_cq cmd;
+ struct ib_uobject *cquobj;
struct ib_cq *cq;
int ret;
@@ -3702,7 +3762,8 @@ static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs)
if (cmd.attr_mask > IB_CQ_MODERATE)
return -EOPNOTSUPP;
- cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs);
+ cq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ, cmd.cq_handle, attrs,
+ &cquobj);
if (!cq)
return -EINVAL;
diff --git a/include/rdma/uverbs_std_types.h b/include/rdma/uverbs_std_types.h
index 05eabfd5d0d3..578e5c28bc1c 100644
--- a/include/rdma/uverbs_std_types.h
+++ b/include/rdma/uverbs_std_types.h
@@ -64,9 +64,11 @@ static inline void *_uobj_get_obj_read(struct ib_uobject *uobj)
return NULL;
return uobj->object;
}
-#define uobj_get_obj_read(_object, _type, _id, _attrs) \
- ((struct ib_##_object *)_uobj_get_obj_read( \
- uobj_get_read(_type, _id, _attrs)))
+#define uobj_get_obj_read(_object, _type, _id, _attrs, _uobj) \
+({ \
+ *_uobj = uobj_get_read(_type, _id, _attrs); \
+ ((struct ib_##_object *)_uobj_get_obj_read(*_uobj)); \
+})
#define uobj_get_write(_type, _id, _attrs) \
rdma_lookup_get_uobject(uobj_get_type(_attrs, _type), (_attrs)->ufile, \
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v1 2/5] RDMA/uverbs: Delete the macro uobj_put_obj_read
2019-08-28 9:15 [PATCH v1 0/5] Take out ucontext from HW objects Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 1/5] RDMA/uverbs: uobj_get_obj_read should return the ib_uobject Yuval Shaia
@ 2019-08-28 9:15 ` Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 3/5] IB/{core,hw}: ib_pd should not have ib_uobject pointer Yuval Shaia
` (2 subsequent siblings)
4 siblings, 0 replies; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 9:15 UTC (permalink / raw)
To: dledford, jgg, oulijun, xavier.huwei, leon, parav, markz, swise,
galpress, israelr, monis, maxg, kamalheib1, yuval.shaia, denisd,
yuvalav, dennis.dalessandro, ereza, will, linux-rdma, jgg,
srabinov7, santosh.shilimkar
Cc: Shamir Rabinovitch
From: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
The macro uobj_put_obj_read assumes an existence of a member with the name
uobject on each HW object. Since this member is about to be delete we
shouldn't use this macro, instead use uobj_put_read and delete
uobj_put_obj_read.
Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
Signed-off-by: Shamir Rabinovitch <srabinov7@gmail.com>
---
drivers/infiniband/core/uverbs_cmd.c | 92 ++++++++++++++--------------
include/rdma/uverbs_std_types.h | 3 -
2 files changed, 46 insertions(+), 49 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index b0dc301918bf..204a93305f1c 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -778,7 +778,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
if (ret)
goto err_copy;
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
return uobj_alloc_commit(uobj, attrs);
@@ -786,7 +786,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
ib_dereg_mr_user(mr, uverbs_get_cleared_udata(attrs));
err_put:
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
err_free:
uobj_alloc_abort(uobj, attrs);
@@ -864,7 +864,7 @@ static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs)
put_uobj_pd:
if (cmd.flags & IB_MR_REREG_PD)
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
put_uobjs:
uobj_put_write(uobj);
@@ -936,13 +936,13 @@ static int ib_uverbs_alloc_mw(struct uverbs_attr_bundle *attrs)
if (ret)
goto err_copy;
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
return uobj_alloc_commit(uobj, attrs);
err_copy:
uverbs_dealloc_mw(mw);
err_put:
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
err_free:
uobj_alloc_abort(uobj, attrs);
return ret;
@@ -1144,7 +1144,7 @@ static int ib_uverbs_resize_cq(struct uverbs_attr_bundle *attrs)
ret = uverbs_response(attrs, &resp, sizeof(resp));
out:
- uobj_put_obj_read(cq);
+ uobj_put_read(cquobj);
return ret;
}
@@ -1229,7 +1229,7 @@ static int ib_uverbs_poll_cq(struct uverbs_attr_bundle *attrs)
ret = uverbs_output_written(attrs, UVERBS_ATTR_CORE_OUT);
out_put:
- uobj_put_obj_read(cq);
+ uobj_put_read(cquobj);
return ret;
}
@@ -1252,7 +1252,7 @@ static int ib_uverbs_req_notify_cq(struct uverbs_attr_bundle *attrs)
ib_req_notify_cq(cq, cmd.solicited_only ?
IB_CQ_SOLICITED : IB_CQ_NEXT_COMP);
- uobj_put_obj_read(cq);
+ uobj_put_read(cquobj);
return 0;
}
@@ -1505,15 +1505,15 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
}
if (pd)
- uobj_put_obj_read(pd);
+ uobj_put_read(pd_uobj);
if (scq)
- uobj_put_obj_read(scq);
+ uobj_put_read(scq_uobj);
if (rcq && rcq != scq)
- uobj_put_obj_read(rcq);
+ uobj_put_read(rcq_uobj);
if (srq)
- uobj_put_obj_read(srq);
+ uobj_put_read(srq_uobj);
if (ind_tbl)
- uobj_put_obj_read(ind_tbl);
+ uobj_put_read(ind_tbl_uobj);
return uobj_alloc_commit(&obj->uevent.uobject, attrs);
err_cb:
@@ -1523,15 +1523,15 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
if (!IS_ERR(xrcd_uobj))
uobj_put_read(xrcd_uobj);
if (pd)
- uobj_put_obj_read(pd);
+ uobj_put_read(pd_uobj);
if (scq)
- uobj_put_obj_read(scq);
+ uobj_put_read(scq_uobj);
if (rcq && rcq != scq)
- uobj_put_obj_read(rcq);
+ uobj_put_read(rcq_uobj);
if (srq)
- uobj_put_obj_read(srq);
+ uobj_put_read(srq_uobj);
if (ind_tbl)
- uobj_put_obj_read(ind_tbl);
+ uobj_put_read(ind_tbl_uobj);
uobj_alloc_abort(&obj->uevent.uobject, attrs);
return ret;
@@ -1710,7 +1710,7 @@ static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs)
ret = ib_query_qp(qp, attr, cmd.attr_mask, init_attr);
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
if (ret)
goto out;
@@ -1948,7 +1948,7 @@ static int modify_qp(struct uverbs_attr_bundle *attrs,
&attrs->driver_udata);
release_qp:
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
out:
kfree(attr);
@@ -2216,11 +2216,11 @@ static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
ret = ret2;
out_put:
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
while (wr) {
if (is_ud && ud_wr(wr)->ah)
- uobj_put_obj_read(ud_wr(wr)->ah);
+ uobj_put_read(ud_wr(wr)->ah->uobject);
next = wr->next;
kfree(wr);
wr = next;
@@ -2360,7 +2360,7 @@ static int ib_uverbs_post_recv(struct uverbs_attr_bundle *attrs)
resp.bad_wr = 0;
ret = qp->device->ops.post_recv(qp->real_qp, wr, &bad_wr);
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
if (ret) {
for (next = wr; next; next = next->next) {
++resp.bad_wr;
@@ -2412,7 +2412,7 @@ static int ib_uverbs_post_srq_recv(struct uverbs_attr_bundle *attrs)
resp.bad_wr = 0;
ret = srq->device->ops.post_srq_recv(srq, wr, &bad_wr);
- uobj_put_obj_read(srq);
+ uobj_put_read(srquobj);
if (ret)
for (next = wr; next; next = next->next) {
@@ -2501,7 +2501,7 @@ static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs)
if (ret)
goto err_copy;
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
return uobj_alloc_commit(uobj, attrs);
err_copy:
@@ -2509,7 +2509,7 @@ static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs)
uverbs_get_cleared_udata(attrs));
err_put:
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
err:
uobj_alloc_abort(uobj, attrs);
@@ -2573,7 +2573,7 @@ static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs)
out_put:
mutex_unlock(&obj->mcast_lock);
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
return ret;
}
@@ -2618,7 +2618,7 @@ static int ib_uverbs_detach_mcast(struct uverbs_attr_bundle *attrs)
out_put:
mutex_unlock(&obj->mcast_lock);
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
return ret;
}
@@ -2737,7 +2737,7 @@ static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
flow_resources_add(uflow_res,
IB_FLOW_SPEC_ACTION_HANDLE,
ib_spec->action.act);
- uobj_put_obj_read(ib_spec->action.act);
+ uobj_put_read(uobj);
break;
case IB_FLOW_SPEC_ACTION_COUNT:
if (kern_spec->flow_count.size !=
@@ -2755,7 +2755,7 @@ static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
flow_resources_add(uflow_res,
IB_FLOW_SPEC_ACTION_COUNT,
ib_spec->flow_count.counters);
- uobj_put_obj_read(ib_spec->flow_count.counters);
+ uobj_put_read(uobj);
break;
default:
return -EINVAL;
@@ -3022,16 +3022,16 @@ static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs)
if (err)
goto err_copy;
- uobj_put_obj_read(pd);
- uobj_put_obj_read(cq);
+ uobj_put_read(pduobj);
+ uobj_put_read(cquobj);
return uobj_alloc_commit(&obj->uevent.uobject, attrs);
err_copy:
ib_destroy_wq(wq, uverbs_get_cleared_udata(attrs));
err_put_cq:
- uobj_put_obj_read(cq);
+ uobj_put_read(cquobj);
err_put_pd:
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
err_uobj:
uobj_alloc_abort(&obj->uevent.uobject, attrs);
@@ -3097,7 +3097,7 @@ static int ib_uverbs_ex_modify_wq(struct uverbs_attr_bundle *attrs)
}
ret = wq->device->ops.modify_wq(wq, &wq_attr, cmd.attr_mask,
&attrs->driver_udata);
- uobj_put_obj_read(wq);
+ uobj_put_read(wquobj);
return ret;
}
@@ -3201,7 +3201,7 @@ static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs)
kfree(wqs_handles);
for (j = 0; j < num_read_wqs; j++)
- uobj_put_obj_read(wqs[j]);
+ uobj_put_read(wqs[j]->uobject);
return uobj_alloc_commit(uobj, attrs);
@@ -3211,7 +3211,7 @@ static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs)
uobj_alloc_abort(uobj, attrs);
put_wqs:
for (j = 0; j < num_read_wqs; j++)
- uobj_put_obj_read(wqs[j]);
+ uobj_put_read(wqs[j]->uobject);
err_free:
kfree(wqs_handles);
kfree(wqs);
@@ -3380,7 +3380,7 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs)
if (err)
goto err_copy;
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
kfree(flow_attr);
if (cmd.flow_attr.num_of_specs)
kfree(kern_flow_attr);
@@ -3393,7 +3393,7 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs)
err_free_flow_attr:
kfree(flow_attr);
err_put:
- uobj_put_obj_read(qp);
+ uobj_put_read(qpuobj);
err_uobj:
uobj_alloc_abort(uobj, attrs);
err_free_attr:
@@ -3532,9 +3532,9 @@ static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs,
uobj_put_read(xrcd_uobj);
if (ib_srq_has_cq(cmd->srq_type))
- uobj_put_obj_read(attr.ext.cq);
+ uobj_put_read(cquobj);
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
return uobj_alloc_commit(&obj->uevent.uobject, attrs);
err_copy:
@@ -3543,11 +3543,11 @@ static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs,
err_free:
kfree(srq);
err_put:
- uobj_put_obj_read(pd);
+ uobj_put_read(pduobj);
err_put_cq:
if (ib_srq_has_cq(cmd->srq_type))
- uobj_put_obj_read(attr.ext.cq);
+ uobj_put_read(cquobj);
err_put_xrcd:
if (cmd->srq_type == IB_SRQT_XRC) {
@@ -3617,7 +3617,7 @@ static int ib_uverbs_modify_srq(struct uverbs_attr_bundle *attrs)
ret = srq->device->ops.modify_srq(srq, &attr, cmd.attr_mask,
&attrs->driver_udata);
- uobj_put_obj_read(srq);
+ uobj_put_read(srquobj);
return ret;
}
@@ -3642,7 +3642,7 @@ static int ib_uverbs_query_srq(struct uverbs_attr_bundle *attrs)
ret = ib_query_srq(srq, &attr);
- uobj_put_obj_read(srq);
+ uobj_put_read(srquobj);
if (ret)
return ret;
@@ -3769,7 +3769,7 @@ static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs)
ret = rdma_set_cq_moderation(cq, cmd.attr.cq_count, cmd.attr.cq_period);
- uobj_put_obj_read(cq);
+ uobj_put_read(cquobj);
return ret;
}
diff --git a/include/rdma/uverbs_std_types.h b/include/rdma/uverbs_std_types.h
index 578e5c28bc1c..02641a3241e3 100644
--- a/include/rdma/uverbs_std_types.h
+++ b/include/rdma/uverbs_std_types.h
@@ -98,9 +98,6 @@ static inline void uobj_put_read(struct ib_uobject *uobj)
rdma_lookup_put_uobject(uobj, UVERBS_LOOKUP_READ);
}
-#define uobj_put_obj_read(_obj) \
- uobj_put_read((_obj)->uobject)
-
static inline void uobj_put_write(struct ib_uobject *uobj)
{
rdma_lookup_put_uobject(uobj, UVERBS_LOOKUP_WRITE);
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v1 3/5] IB/{core,hw}: ib_pd should not have ib_uobject pointer
2019-08-28 9:15 [PATCH v1 0/5] Take out ucontext from HW objects Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 1/5] RDMA/uverbs: uobj_get_obj_read should return the ib_uobject Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 2/5] RDMA/uverbs: Delete the macro uobj_put_obj_read Yuval Shaia
@ 2019-08-28 9:15 ` Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 4/5] IB/core: ib_mr " Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext Yuval Shaia
4 siblings, 0 replies; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 9:15 UTC (permalink / raw)
To: dledford, jgg, oulijun, xavier.huwei, leon, parav, markz, swise,
galpress, israelr, monis, maxg, kamalheib1, yuval.shaia, denisd,
yuvalav, dennis.dalessandro, ereza, will, linux-rdma, jgg,
srabinov7, santosh.shilimkar
Cc: Shamir Rabinovitch
From: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
As a preparation step to shared PD, where ib_pd object will be pointed
by one or more ib_uobjects, remove ib_uobject pointer from ib_pd struct.
Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
Signed-off-by: Shamir Rabinovitch <srabinov7@gmail.com>
---
drivers/infiniband/core/uverbs_cmd.c | 1 -
drivers/infiniband/core/verbs.c | 1 -
drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 1 -
drivers/infiniband/hw/mlx5/main.c | 1 -
drivers/infiniband/hw/mthca/mthca_qp.c | 3 ++-
include/rdma/ib_verbs.h | 1 -
6 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 204a93305f1c..d1f0c04f0ae8 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -432,7 +432,6 @@ static int ib_uverbs_alloc_pd(struct uverbs_attr_bundle *attrs)
}
pd->device = ib_dev;
- pd->uobject = uobj;
pd->__internal_mr = NULL;
atomic_set(&pd->usecnt, 0);
pd->res.type = RDMA_RESTRACK_PD;
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index f974b6854224..1d0215c1a504 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -263,7 +263,6 @@ struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
return ERR_PTR(-ENOMEM);
pd->device = device;
- pd->uobject = NULL;
pd->__internal_mr = NULL;
atomic_set(&pd->usecnt, 0);
pd->flags = flags;
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
index 0ff5f9617639..bd4a09b2ec1e 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
@@ -760,7 +760,6 @@ static int hns_roce_v1_rsv_lp_qp(struct hns_roce_dev *hr_dev)
free_mr->mr_free_pd = to_hr_pd(pd);
free_mr->mr_free_pd->ibpd.device = &hr_dev->ib_dev;
- free_mr->mr_free_pd->ibpd.uobject = NULL;
free_mr->mr_free_pd->ibpd.__internal_mr = NULL;
atomic_set(&free_mr->mr_free_pd->ibpd.usecnt, 0);
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 98e566acb746..93db6d4c7da4 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -4937,7 +4937,6 @@ static int create_dev_resources(struct mlx5_ib_resources *devr)
return -ENOMEM;
devr->p0->device = ibdev;
- devr->p0->uobject = NULL;
atomic_set(&devr->p0->usecnt, 0);
ret = mlx5_ib_alloc_pd(devr->p0, NULL);
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index d04c245359eb..b1a9169e3af6 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -956,7 +956,8 @@ static int mthca_max_data_size(struct mthca_dev *dev, struct mthca_qp *qp, int d
static inline int mthca_max_inline_data(struct mthca_pd *pd, int max_data_size)
{
/* We don't support inline data for kernel QPs (yet). */
- return pd->ibpd.uobject ? max_data_size - MTHCA_INLINE_HEADER_SIZE : 0;
+ return !rdma_is_kernel_res(&pd->ibpd.res) ?
+ max_data_size - MTHCA_INLINE_HEADER_SIZE : 0;
}
static void mthca_adjust_qp_caps(struct mthca_dev *dev,
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 391499008a22..7b429b2e7cf6 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -1509,7 +1509,6 @@ struct ib_pd {
u32 local_dma_lkey;
u32 flags;
struct ib_device *device;
- struct ib_uobject *uobject;
atomic_t usecnt; /* count all resources */
u32 unsafe_global_rkey;
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v1 4/5] IB/core: ib_mr should not have ib_uobject pointer
2019-08-28 9:15 [PATCH v1 0/5] Take out ucontext from HW objects Yuval Shaia
` (2 preceding siblings ...)
2019-08-28 9:15 ` [PATCH v1 3/5] IB/{core,hw}: ib_pd should not have ib_uobject pointer Yuval Shaia
@ 2019-08-28 9:15 ` Yuval Shaia
2019-08-28 13:48 ` Jason Gunthorpe
2019-08-28 9:15 ` [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext Yuval Shaia
4 siblings, 1 reply; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 9:15 UTC (permalink / raw)
To: dledford, jgg, oulijun, xavier.huwei, leon, parav, markz, swise,
galpress, israelr, monis, maxg, kamalheib1, yuval.shaia, denisd,
yuvalav, dennis.dalessandro, ereza, will, linux-rdma, jgg,
srabinov7, santosh.shilimkar
As a preparation step to shared MR, where ib_mr object will be pointed
by one or more ib_uobjects, remove ib_uobject pointer from ib_mr struct.
Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
---
drivers/infiniband/core/uverbs_cmd.c | 1 -
drivers/infiniband/core/uverbs_std_types_mr.c | 1 -
drivers/infiniband/core/verbs.c | 3 ---
include/rdma/ib_verbs.h | 1 -
4 files changed, 6 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index d1f0c04f0ae8..54326ee25eaa 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -761,7 +761,6 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
mr->type = IB_MR_TYPE_USER;
mr->dm = NULL;
mr->sig_attrs = NULL;
- mr->uobject = uobj;
atomic_inc(&pd->usecnt);
mr->res.type = RDMA_RESTRACK_MR;
rdma_restrack_uadd(&mr->res);
diff --git a/drivers/infiniband/core/uverbs_std_types_mr.c b/drivers/infiniband/core/uverbs_std_types_mr.c
index c1286a52dc84..5219af8960a3 100644
--- a/drivers/infiniband/core/uverbs_std_types_mr.c
+++ b/drivers/infiniband/core/uverbs_std_types_mr.c
@@ -130,7 +130,6 @@ static int UVERBS_HANDLER(UVERBS_METHOD_DM_MR_REG)(
mr->pd = pd;
mr->type = IB_MR_TYPE_DM;
mr->dm = dm;
- mr->uobject = uobj;
atomic_inc(&pd->usecnt);
atomic_inc(&dm->usecnt);
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index 1d0215c1a504..a7722d54869e 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -299,7 +299,6 @@ struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
mr->device = pd->device;
mr->pd = pd;
mr->type = IB_MR_TYPE_DMA;
- mr->uobject = NULL;
mr->need_inval = false;
pd->__internal_mr = mr;
@@ -2035,7 +2034,6 @@ struct ib_mr *ib_alloc_mr_user(struct ib_pd *pd, enum ib_mr_type mr_type,
mr->device = pd->device;
mr->pd = pd;
mr->dm = NULL;
- mr->uobject = NULL;
atomic_inc(&pd->usecnt);
mr->need_inval = false;
mr->res.type = RDMA_RESTRACK_MR;
@@ -2088,7 +2086,6 @@ struct ib_mr *ib_alloc_mr_integrity(struct ib_pd *pd,
mr->device = pd->device;
mr->pd = pd;
mr->dm = NULL;
- mr->uobject = NULL;
atomic_inc(&pd->usecnt);
mr->need_inval = false;
mr->res.type = RDMA_RESTRACK_MR;
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 7b429b2e7cf6..fc4b1a0d3bf2 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -1775,7 +1775,6 @@ struct ib_mr {
enum ib_mr_type type;
bool need_inval;
union {
- struct ib_uobject *uobject; /* user */
struct list_head qp_entry; /* FR */
};
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-28 9:15 [PATCH v1 0/5] Take out ucontext from HW objects Yuval Shaia
` (3 preceding siblings ...)
2019-08-28 9:15 ` [PATCH v1 4/5] IB/core: ib_mr " Yuval Shaia
@ 2019-08-28 9:15 ` Yuval Shaia
2019-08-28 13:53 ` Jason Gunthorpe
4 siblings, 1 reply; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 9:15 UTC (permalink / raw)
To: dledford, jgg, oulijun, xavier.huwei, leon, parav, markz, swise,
galpress, israelr, monis, maxg, kamalheib1, yuval.shaia, denisd,
yuvalav, dennis.dalessandro, ereza, will, linux-rdma, jgg,
srabinov7, santosh.shilimkar
Cc: Shamir Rabinovitch
From: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
In shared object model ib_pd can belong to 1 or more ib_ucontext.
Fix the nldev code so it could report multiple context ids.
Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
Signed-off-by: Shamir Rabinovitch <srabinov7@gmail.com>
---
drivers/infiniband/core/nldev.c | 127 +++++++++++++++++++++++++++++--
include/uapi/rdma/rdma_netlink.h | 3 +
2 files changed, 125 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
index e287b71a1cfd..7ad23a6607f7 100644
--- a/drivers/infiniband/core/nldev.c
+++ b/drivers/infiniband/core/nldev.c
@@ -41,6 +41,7 @@
#include "core_priv.h"
#include "cma_priv.h"
#include "restrack.h"
+#include "uverbs.h"
/*
* Sort array elements by the netlink attribute name
@@ -141,6 +142,8 @@ static const struct nla_policy nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
[RDMA_NLDEV_ATTR_UVERBS_DRIVER_ID] = { .type = NLA_U32 },
[RDMA_NLDEV_NET_NS_FD] = { .type = NLA_U32 },
[RDMA_NLDEV_SYS_ATTR_NETNS_MODE] = { .type = NLA_U8 },
+ [RDMA_NLDEV_ATTR_RES_CTX] = { .type = NLA_NESTED },
+ [RDMA_NLDEV_ATTR_RES_CTX_ENTRY] = { .type = NLA_NESTED },
};
static int put_driver_name_print_type(struct sk_buff *msg, const char *name,
@@ -611,11 +614,84 @@ static int fill_res_mr_entry(struct sk_buff *msg, bool has_cap_net_admin,
err: return -EMSGSIZE;
}
+struct context_id {
+ struct list_head list;
+ u32 id;
+};
+
+static void pd_context(struct ib_pd *pd, struct list_head *list, int *count)
+{
+ struct ib_device *device = pd->device;
+ struct rdma_restrack_entry *res;
+ struct rdma_restrack_root *rt;
+ struct ib_uverbs_file *ufile;
+ struct ib_ucontext *ucontext;
+ struct ib_uobject *uobj;
+ unsigned long flags;
+ unsigned long id;
+ bool found;
+
+ rt = &device->res[RDMA_RESTRACK_CTX];
+
+ xa_lock(&rt->xa);
+
+ xa_for_each(&rt->xa, id, res) {
+ if (!rdma_is_visible_in_pid_ns(res))
+ continue;
+
+ if (!rdma_restrack_get(res))
+ continue;
+
+ xa_unlock(&rt->xa);
+
+ ucontext = container_of(res, struct ib_ucontext, res);
+ ufile = ucontext->ufile;
+ found = false;
+
+ /* See locking requirements in struct ib_uverbs_file */
+ down_read(&ufile->hw_destroy_rwsem);
+ spin_lock_irqsave(&ufile->uobjects_lock, flags);
+
+ list_for_each_entry(uobj, &ufile->uobjects, list) {
+ if (uobj->object == pd) {
+ found = true;
+ goto found;
+ }
+ }
+
+found: spin_unlock_irqrestore(&ufile->uobjects_lock, flags);
+ up_read(&ufile->hw_destroy_rwsem);
+
+ if (found) {
+ struct context_id *ctx_id =
+ kmalloc(sizeof(*ctx_id), GFP_KERNEL);
+
+ if (WARN_ON_ONCE(!ctx_id))
+ goto next;
+
+ ctx_id->id = ucontext->res.id;
+ list_add(&ctx_id->list, list);
+ (*count)++;
+ }
+
+next: rdma_restrack_put(res);
+ xa_lock(&rt->xa);
+ }
+
+ xa_unlock(&rt->xa);
+}
+
static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
struct rdma_restrack_entry *res, uint32_t port)
{
struct ib_pd *pd = container_of(res, struct ib_pd, res);
struct ib_device *dev = pd->device;
+ struct nlattr *table_attr = NULL;
+ struct nlattr *entry_attr = NULL;
+ struct context_id *ctx_id;
+ struct context_id *tmp;
+ LIST_HEAD(pd_context_ids);
+ int ctx_count = 0;
if (has_cap_net_admin) {
if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
@@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
goto err;
- if (!rdma_is_kernel_res(res) &&
- nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
- pd->uobject->context->res.id))
- goto err;
+ if (!rdma_is_kernel_res(res)) {
+ pd_context(pd, &pd_context_ids, &ctx_count);
+ if (ctx_count == 1) {
+ /* user pd, not shared */
+ ctx_id = list_first_entry(&pd_context_ids,
+ struct context_id, list);
+ if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
+ ctx_id->id))
+ goto err;
+ } else if (ctx_count > 1) {
+ /* user pd, shared */
+ table_attr = nla_nest_start(msg,
+ RDMA_NLDEV_ATTR_RES_CTX);
+ if (!table_attr)
+ goto err;
+
+ list_for_each_entry(ctx_id, &pd_context_ids, list) {
+ entry_attr = nla_nest_start(msg,
+ RDMA_NLDEV_ATTR_RES_CTX_ENTRY);
+ if (!entry_attr)
+ goto err;
+ if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
+ ctx_id->id))
+ goto err;
+ nla_nest_end(msg, entry_attr);
+ entry_attr = NULL;
+ }
+
+ nla_nest_end(msg, table_attr);
+ table_attr = NULL;
+ }
+ }
if (fill_res_name_pid(msg, res))
goto err;
@@ -644,9 +748,22 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
if (fill_res_entry(dev, msg, res))
goto err;
+ list_for_each_entry_safe(ctx_id, tmp, &pd_context_ids, list)
+ kfree(ctx_id);
+
return 0;
-err: return -EMSGSIZE;
+err:
+ if (entry_attr)
+ nla_nest_end(msg, entry_attr);
+
+ if (table_attr)
+ nla_nest_end(msg, table_attr);
+
+ list_for_each_entry_safe(ctx_id, tmp, &pd_context_ids, list)
+ kfree(ctx_id);
+
+ return -EMSGSIZE;
}
static int fill_stat_counter_mode(struct sk_buff *msg,
diff --git a/include/uapi/rdma/rdma_netlink.h b/include/uapi/rdma/rdma_netlink.h
index 8e277783fa96..7fbbfb07f071 100644
--- a/include/uapi/rdma/rdma_netlink.h
+++ b/include/uapi/rdma/rdma_netlink.h
@@ -525,6 +525,9 @@ enum rdma_nldev_attr {
*/
RDMA_NLDEV_ATTR_DEV_DIM, /* u8 */
+ RDMA_NLDEV_ATTR_RES_CTX, /* nested table */
+ RDMA_NLDEV_ATTR_RES_CTX_ENTRY, /* nested table */
+
/*
* Always the end
*/
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v1 4/5] IB/core: ib_mr should not have ib_uobject pointer
2019-08-28 9:15 ` [PATCH v1 4/5] IB/core: ib_mr " Yuval Shaia
@ 2019-08-28 13:48 ` Jason Gunthorpe
0 siblings, 0 replies; 13+ messages in thread
From: Jason Gunthorpe @ 2019-08-28 13:48 UTC (permalink / raw)
To: Yuval Shaia
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar
On Wed, Aug 28, 2019 at 12:15:32PM +0300, Yuval Shaia wrote:
> As a preparation step to shared MR, where ib_mr object will be pointed
> by one or more ib_uobjects, remove ib_uobject pointer from ib_mr struct.
>
> Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
> drivers/infiniband/core/uverbs_cmd.c | 1 -
> drivers/infiniband/core/uverbs_std_types_mr.c | 1 -
> drivers/infiniband/core/verbs.c | 3 ---
> include/rdma/ib_verbs.h | 1 -
> 4 files changed, 6 deletions(-)
>
> diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
> index d1f0c04f0ae8..54326ee25eaa 100644
> +++ b/drivers/infiniband/core/uverbs_cmd.c
> @@ -761,7 +761,6 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
> mr->type = IB_MR_TYPE_USER;
> mr->dm = NULL;
> mr->sig_attrs = NULL;
> - mr->uobject = uobj;
> atomic_inc(&pd->usecnt);
> mr->res.type = RDMA_RESTRACK_MR;
> rdma_restrack_uadd(&mr->res);
> diff --git a/drivers/infiniband/core/uverbs_std_types_mr.c b/drivers/infiniband/core/uverbs_std_types_mr.c
> index c1286a52dc84..5219af8960a3 100644
> +++ b/drivers/infiniband/core/uverbs_std_types_mr.c
> @@ -130,7 +130,6 @@ static int UVERBS_HANDLER(UVERBS_METHOD_DM_MR_REG)(
> mr->pd = pd;
> mr->type = IB_MR_TYPE_DM;
> mr->dm = dm;
> - mr->uobject = uobj;
> atomic_inc(&pd->usecnt);
> atomic_inc(&dm->usecnt);
>
> diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
> index 1d0215c1a504..a7722d54869e 100644
> +++ b/drivers/infiniband/core/verbs.c
> @@ -299,7 +299,6 @@ struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
> mr->device = pd->device;
> mr->pd = pd;
> mr->type = IB_MR_TYPE_DMA;
> - mr->uobject = NULL;
> mr->need_inval = false;
>
> pd->__internal_mr = mr;
> @@ -2035,7 +2034,6 @@ struct ib_mr *ib_alloc_mr_user(struct ib_pd *pd, enum ib_mr_type mr_type,
> mr->device = pd->device;
> mr->pd = pd;
> mr->dm = NULL;
> - mr->uobject = NULL;
> atomic_inc(&pd->usecnt);
> mr->need_inval = false;
> mr->res.type = RDMA_RESTRACK_MR;
> @@ -2088,7 +2086,6 @@ struct ib_mr *ib_alloc_mr_integrity(struct ib_pd *pd,
> mr->device = pd->device;
> mr->pd = pd;
> mr->dm = NULL;
> - mr->uobject = NULL;
> atomic_inc(&pd->usecnt);
> mr->need_inval = false;
> mr->res.type = RDMA_RESTRACK_MR;
> diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
> index 7b429b2e7cf6..fc4b1a0d3bf2 100644
> +++ b/include/rdma/ib_verbs.h
> @@ -1775,7 +1775,6 @@ struct ib_mr {
> enum ib_mr_type type;
> bool need_inval;
> union {
> - struct ib_uobject *uobject; /* user */
> struct list_head qp_entry; /* FR */
> };
Delete the union too
Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-28 9:15 ` [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext Yuval Shaia
@ 2019-08-28 13:53 ` Jason Gunthorpe
2019-08-28 18:56 ` Yuval Shaia
0 siblings, 1 reply; 13+ messages in thread
From: Jason Gunthorpe @ 2019-08-28 13:53 UTC (permalink / raw)
To: Yuval Shaia
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar,
Shamir Rabinovitch
On Wed, Aug 28, 2019 at 12:15:33PM +0300, Yuval Shaia wrote:
> static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> struct rdma_restrack_entry *res, uint32_t port)
> {
> struct ib_pd *pd = container_of(res, struct ib_pd, res);
> struct ib_device *dev = pd->device;
> + struct nlattr *table_attr = NULL;
> + struct nlattr *entry_attr = NULL;
> + struct context_id *ctx_id;
> + struct context_id *tmp;
> + LIST_HEAD(pd_context_ids);
> + int ctx_count = 0;
>
> if (has_cap_net_admin) {
> if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
> @@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
> goto err;
>
> - if (!rdma_is_kernel_res(res) &&
> - nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
> - pd->uobject->context->res.id))
> - goto err;
How do earlier patches compile?
Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-28 13:53 ` Jason Gunthorpe
@ 2019-08-28 18:56 ` Yuval Shaia
2019-08-28 19:28 ` Jason Gunthorpe
0 siblings, 1 reply; 13+ messages in thread
From: Yuval Shaia @ 2019-08-28 18:56 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar,
Shamir Rabinovitch
On Wed, Aug 28, 2019 at 01:53:12PM +0000, Jason Gunthorpe wrote:
> On Wed, Aug 28, 2019 at 12:15:33PM +0300, Yuval Shaia wrote:
> > static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > struct rdma_restrack_entry *res, uint32_t port)
> > {
> > struct ib_pd *pd = container_of(res, struct ib_pd, res);
> > struct ib_device *dev = pd->device;
> > + struct nlattr *table_attr = NULL;
> > + struct nlattr *entry_attr = NULL;
> > + struct context_id *ctx_id;
> > + struct context_id *tmp;
> > + LIST_HEAD(pd_context_ids);
> > + int ctx_count = 0;
> >
> > if (has_cap_net_admin) {
> > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
> > @@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
> > goto err;
> >
> > - if (!rdma_is_kernel_res(res) &&
> > - nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
> > - pd->uobject->context->res.id))
> > - goto err;
>
> How do earlier patches compile?
They did not
>
> Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-28 18:56 ` Yuval Shaia
@ 2019-08-28 19:28 ` Jason Gunthorpe
2019-08-29 7:13 ` Yuval Shaia
0 siblings, 1 reply; 13+ messages in thread
From: Jason Gunthorpe @ 2019-08-28 19:28 UTC (permalink / raw)
To: Yuval Shaia
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar,
Shamir Rabinovitch
On Wed, Aug 28, 2019 at 09:56:46PM +0300, Yuval Shaia wrote:
> On Wed, Aug 28, 2019 at 01:53:12PM +0000, Jason Gunthorpe wrote:
> > On Wed, Aug 28, 2019 at 12:15:33PM +0300, Yuval Shaia wrote:
> > > static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > struct rdma_restrack_entry *res, uint32_t port)
> > > {
> > > struct ib_pd *pd = container_of(res, struct ib_pd, res);
> > > struct ib_device *dev = pd->device;
> > > + struct nlattr *table_attr = NULL;
> > > + struct nlattr *entry_attr = NULL;
> > > + struct context_id *ctx_id;
> > > + struct context_id *tmp;
> > > + LIST_HEAD(pd_context_ids);
> > > + int ctx_count = 0;
> > >
> > > if (has_cap_net_admin) {
> > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
> > > @@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
> > > goto err;
> > >
> > > - if (!rdma_is_kernel_res(res) &&
> > > - nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
> > > - pd->uobject->context->res.id))
> > > - goto err;
> >
> > How do earlier patches compile?
>
> They did not
That is not OK
Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-28 19:28 ` Jason Gunthorpe
@ 2019-08-29 7:13 ` Yuval Shaia
2019-08-29 14:27 ` Jason Gunthorpe
0 siblings, 1 reply; 13+ messages in thread
From: Yuval Shaia @ 2019-08-29 7:13 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar,
Shamir Rabinovitch
On Wed, Aug 28, 2019 at 07:28:23PM +0000, Jason Gunthorpe wrote:
> On Wed, Aug 28, 2019 at 09:56:46PM +0300, Yuval Shaia wrote:
> > On Wed, Aug 28, 2019 at 01:53:12PM +0000, Jason Gunthorpe wrote:
> > > On Wed, Aug 28, 2019 at 12:15:33PM +0300, Yuval Shaia wrote:
> > > > static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > > struct rdma_restrack_entry *res, uint32_t port)
> > > > {
> > > > struct ib_pd *pd = container_of(res, struct ib_pd, res);
> > > > struct ib_device *dev = pd->device;
> > > > + struct nlattr *table_attr = NULL;
> > > > + struct nlattr *entry_attr = NULL;
> > > > + struct context_id *ctx_id;
> > > > + struct context_id *tmp;
> > > > + LIST_HEAD(pd_context_ids);
> > > > + int ctx_count = 0;
> > > >
> > > > if (has_cap_net_admin) {
> > > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
> > > > @@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
> > > > goto err;
> > > >
> > > > - if (!rdma_is_kernel_res(res) &&
> > > > - nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
> > > > - pd->uobject->context->res.id))
> > > > - goto err;
> > >
> > > How do earlier patches compile?
> >
> > They did not
>
> That is not OK
Sorry, i probably misunderstood you, what patches are you referring to?
>
> Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-29 7:13 ` Yuval Shaia
@ 2019-08-29 14:27 ` Jason Gunthorpe
2019-09-01 13:10 ` Yuval Shaia
0 siblings, 1 reply; 13+ messages in thread
From: Jason Gunthorpe @ 2019-08-29 14:27 UTC (permalink / raw)
To: Yuval Shaia
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar,
Shamir Rabinovitch
On Thu, Aug 29, 2019 at 10:13:03AM +0300, Yuval Shaia wrote:
> On Wed, Aug 28, 2019 at 07:28:23PM +0000, Jason Gunthorpe wrote:
> > On Wed, Aug 28, 2019 at 09:56:46PM +0300, Yuval Shaia wrote:
> > > On Wed, Aug 28, 2019 at 01:53:12PM +0000, Jason Gunthorpe wrote:
> > > > On Wed, Aug 28, 2019 at 12:15:33PM +0300, Yuval Shaia wrote:
> > > > > static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > > > struct rdma_restrack_entry *res, uint32_t port)
> > > > > {
> > > > > struct ib_pd *pd = container_of(res, struct ib_pd, res);
> > > > > struct ib_device *dev = pd->device;
> > > > > + struct nlattr *table_attr = NULL;
> > > > > + struct nlattr *entry_attr = NULL;
> > > > > + struct context_id *ctx_id;
> > > > > + struct context_id *tmp;
> > > > > + LIST_HEAD(pd_context_ids);
> > > > > + int ctx_count = 0;
> > > > >
> > > > > if (has_cap_net_admin) {
> > > > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
> > > > > @@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
> > > > > goto err;
> > > > >
> > > > > - if (!rdma_is_kernel_res(res) &&
> > > > > - nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
> > > > > - pd->uobject->context->res.id))
> > > > > - goto err;
> > > >
> > > > How do earlier patches compile?
> > >
> > > They did not
> >
> > That is not OK
>
> Sorry, i probably misunderstood you, what patches are you referring to?
Just make sure every patch in the series compiles.
Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext
2019-08-29 14:27 ` Jason Gunthorpe
@ 2019-09-01 13:10 ` Yuval Shaia
0 siblings, 0 replies; 13+ messages in thread
From: Yuval Shaia @ 2019-09-01 13:10 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: dledford, oulijun, xavier.huwei, leon, Parav Pandit, Mark Zhang,
swise, galpress, Israel Rukshin, Moni Shoua, Max Gurtovoy,
kamalheib1, Denis Drozdov, Yuval Avnery, dennis.dalessandro,
Erez Alfasi, will, linux-rdma, srabinov7, santosh.shilimkar,
Shamir Rabinovitch
On Thu, Aug 29, 2019 at 02:27:13PM +0000, Jason Gunthorpe wrote:
> On Thu, Aug 29, 2019 at 10:13:03AM +0300, Yuval Shaia wrote:
> > On Wed, Aug 28, 2019 at 07:28:23PM +0000, Jason Gunthorpe wrote:
> > > On Wed, Aug 28, 2019 at 09:56:46PM +0300, Yuval Shaia wrote:
> > > > On Wed, Aug 28, 2019 at 01:53:12PM +0000, Jason Gunthorpe wrote:
> > > > > On Wed, Aug 28, 2019 at 12:15:33PM +0300, Yuval Shaia wrote:
> > > > > > static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > > > > struct rdma_restrack_entry *res, uint32_t port)
> > > > > > {
> > > > > > struct ib_pd *pd = container_of(res, struct ib_pd, res);
> > > > > > struct ib_device *dev = pd->device;
> > > > > > + struct nlattr *table_attr = NULL;
> > > > > > + struct nlattr *entry_attr = NULL;
> > > > > > + struct context_id *ctx_id;
> > > > > > + struct context_id *tmp;
> > > > > > + LIST_HEAD(pd_context_ids);
> > > > > > + int ctx_count = 0;
> > > > > >
> > > > > > if (has_cap_net_admin) {
> > > > > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
> > > > > > @@ -633,10 +709,38 @@ static int fill_res_pd_entry(struct sk_buff *msg, bool has_cap_net_admin,
> > > > > > if (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, res->id))
> > > > > > goto err;
> > > > > >
> > > > > > - if (!rdma_is_kernel_res(res) &&
> > > > > > - nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_CTXN,
> > > > > > - pd->uobject->context->res.id))
> > > > > > - goto err;
> > > > >
> > > > > How do earlier patches compile?
> > > >
> > > > They did not
> > >
> > > That is not OK
> >
> > Sorry, i probably misunderstood you, what patches are you referring to?
>
> Just make sure every patch in the series compiles.
Ok got it.
Will change the order of the patches in the set and send v2.
>
> Jason
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2019-09-01 13:11 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-28 9:15 [PATCH v1 0/5] Take out ucontext from HW objects Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 1/5] RDMA/uverbs: uobj_get_obj_read should return the ib_uobject Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 2/5] RDMA/uverbs: Delete the macro uobj_put_obj_read Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 3/5] IB/{core,hw}: ib_pd should not have ib_uobject pointer Yuval Shaia
2019-08-28 9:15 ` [PATCH v1 4/5] IB/core: ib_mr " Yuval Shaia
2019-08-28 13:48 ` Jason Gunthorpe
2019-08-28 9:15 ` [PATCH v1 5/5] RDMA/nldev: ib_pd can be pointed by multiple ib_ucontext Yuval Shaia
2019-08-28 13:53 ` Jason Gunthorpe
2019-08-28 18:56 ` Yuval Shaia
2019-08-28 19:28 ` Jason Gunthorpe
2019-08-29 7:13 ` Yuval Shaia
2019-08-29 14:27 ` Jason Gunthorpe
2019-09-01 13:10 ` Yuval Shaia
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).