diff options
Diffstat (limited to 'drivers/infiniband/core/restrack.c')
| -rw-r--r-- | drivers/infiniband/core/restrack.c | 23 | 
1 files changed, 16 insertions, 7 deletions
| diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c index 857637bf46da..3dbc4e4cca41 100644 --- a/drivers/infiniband/core/restrack.c +++ b/drivers/infiniband/core/restrack.c @@ -7,7 +7,6 @@  #include <rdma/restrack.h>  #include <linux/mutex.h>  #include <linux/sched/task.h> -#include <linux/uaccess.h>  #include <linux/pid_namespace.h>  void rdma_restrack_init(struct rdma_restrack_root *res) @@ -63,7 +62,6 @@ static struct ib_device *res_to_dev(struct rdma_restrack_entry *res)  {  	enum rdma_restrack_type type = res->type;  	struct ib_device *dev; -	struct ib_xrcd *xrcd;  	struct ib_pd *pd;  	struct ib_cq *cq;  	struct ib_qp *qp; @@ -81,10 +79,6 @@ static struct ib_device *res_to_dev(struct rdma_restrack_entry *res)  		qp = container_of(res, struct ib_qp, res);  		dev = qp->device;  		break; -	case RDMA_RESTRACK_XRCD: -		xrcd = container_of(res, struct ib_xrcd, res); -		dev = xrcd->device; -		break;  	default:  		WARN_ONCE(true, "Wrong resource tracking type %u\n", type);  		return NULL; @@ -93,6 +87,21 @@ static struct ib_device *res_to_dev(struct rdma_restrack_entry *res)  	return dev;  } +static bool res_is_user(struct rdma_restrack_entry *res) +{ +	switch (res->type) { +	case RDMA_RESTRACK_PD: +		return container_of(res, struct ib_pd, res)->uobject; +	case RDMA_RESTRACK_CQ: +		return container_of(res, struct ib_cq, res)->uobject; +	case RDMA_RESTRACK_QP: +		return container_of(res, struct ib_qp, res)->uobject; +	default: +		WARN_ONCE(true, "Wrong resource tracking type %u\n", res->type); +		return false; +	} +} +  void rdma_restrack_add(struct rdma_restrack_entry *res)  {  	struct ib_device *dev = res_to_dev(res); @@ -100,7 +109,7 @@ void rdma_restrack_add(struct rdma_restrack_entry *res)  	if (!dev)  		return; -	if (!uaccess_kernel()) { +	if (res_is_user(res)) {  		get_task_struct(current);  		res->task = current;  		res->kern_name = NULL; |