summaryrefslogtreecommitdiff
path: root/drivers/infiniband/core/uverbs_cmd.c
diff options
context:
space:
mode:
authorSteve Wise <swise@opengridcomputing.com>2018-02-14 18:43:36 -0800
committerJason Gunthorpe <jgg@mellanox.com>2018-02-16 10:18:11 -0700
commit2f08ee363fe097bc6dc01aac53e1798b16c00986 (patch)
tree204e7fec71004dbca9041601d93f8b770bb3d576 /drivers/infiniband/core/uverbs_cmd.c
parent2188558621ed475cef55fa94ce535499452f0091 (diff)
downloadlwn-2f08ee363fe097bc6dc01aac53e1798b16c00986.tar.gz
lwn-2f08ee363fe097bc6dc01aac53e1798b16c00986.zip
RDMA/restrack: don't use uaccess_kernel()
uaccess_kernel() isn't sufficient to determine if an rdma resource is user-mode or not. For example, resources allocated in the add_one() function of an ib_client get falsely labeled as user mode, when they are kernel mode allocations. EG: mad qps. The result is that these qps are skipped over during a nldev query because of an erroneous namespace mismatch. So now we determine if the resource is user-mode by looking at the object struct's uobject or similar pointer to know if it was allocated for user mode applications. Fixes: 02d8883f520e ("RDMA/restrack: Add general infrastructure to track RDMA resources") Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Diffstat (limited to 'drivers/infiniband/core/uverbs_cmd.c')
-rw-r--r--drivers/infiniband/core/uverbs_cmd.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index dbcfb313cee9..25a0e0e083b3 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -1520,7 +1520,8 @@ static int create_qp(struct ib_uverbs_file *file,
if (cmd->qp_type == IB_QPT_XRC_TGT)
qp = ib_create_qp(pd, &attr);
else
- qp = _ib_create_qp(device, pd, &attr, uhw);
+ qp = _ib_create_qp(device, pd, &attr, uhw,
+ &obj->uevent.uobject);
if (IS_ERR(qp)) {
ret = PTR_ERR(qp);
@@ -1553,7 +1554,6 @@ static int create_qp(struct ib_uverbs_file *file,
if (ind_tbl)
atomic_inc(&ind_tbl->usecnt);
}
- qp->uobject = &obj->uevent.uobject;
obj->uevent.uobject.object = qp;