IB: Remove 'uobject->context' dependency in object destroy APIs
Now that we have the udata passed to all the ib_xxx object destroy APIs and the additional macro 'rdma_udata_to_drv_context' to get the ib_ucontext from ib_udata stored in uverbs_attr_bundle, we can finally start to remove the dependency of the drivers in the ib_xxx->uobject->context. Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:

committed by
Jason Gunthorpe

parent
c4367a2635
commit
bdeacabd1a
@@ -777,14 +777,17 @@ err_umem:
|
||||
}
|
||||
|
||||
static void destroy_user_rq(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
||||
struct mlx5_ib_rwq *rwq)
|
||||
struct mlx5_ib_rwq *rwq, struct ib_udata *udata)
|
||||
{
|
||||
struct mlx5_ib_ucontext *context;
|
||||
struct mlx5_ib_ucontext *context =
|
||||
rdma_udata_to_drv_context(
|
||||
udata,
|
||||
struct mlx5_ib_ucontext,
|
||||
ibucontext);
|
||||
|
||||
if (rwq->create_flags & MLX5_IB_WQ_FLAGS_DELAY_DROP)
|
||||
atomic_dec(&dev->delay_drop.rqs_cnt);
|
||||
|
||||
context = to_mucontext(pd->uobject->context);
|
||||
mlx5_ib_db_unmap_user(context, &rwq->db);
|
||||
if (rwq->umem)
|
||||
ib_umem_release(rwq->umem);
|
||||
@@ -983,11 +986,15 @@ err_bfreg:
|
||||
}
|
||||
|
||||
static void destroy_qp_user(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
||||
struct mlx5_ib_qp *qp, struct mlx5_ib_qp_base *base)
|
||||
struct mlx5_ib_qp *qp, struct mlx5_ib_qp_base *base,
|
||||
struct ib_udata *udata)
|
||||
{
|
||||
struct mlx5_ib_ucontext *context;
|
||||
struct mlx5_ib_ucontext *context =
|
||||
rdma_udata_to_drv_context(
|
||||
udata,
|
||||
struct mlx5_ib_ucontext,
|
||||
ibucontext);
|
||||
|
||||
context = to_mucontext(pd->uobject->context);
|
||||
mlx5_ib_db_unmap_user(context, &qp->db);
|
||||
if (base->ubuffer.umem)
|
||||
ib_umem_release(base->ubuffer.umem);
|
||||
@@ -2284,7 +2291,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
||||
|
||||
err_create:
|
||||
if (qp->create_type == MLX5_QP_USER)
|
||||
destroy_qp_user(dev, pd, qp, base);
|
||||
destroy_qp_user(dev, pd, qp, base, udata);
|
||||
else if (qp->create_type == MLX5_QP_KERNEL)
|
||||
destroy_qp_kernel(dev, qp);
|
||||
|
||||
@@ -2395,7 +2402,8 @@ static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
const struct mlx5_modify_raw_qp_param *raw_qp_param,
|
||||
u8 lag_tx_affinity);
|
||||
|
||||
static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp)
|
||||
static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
struct ib_udata *udata)
|
||||
{
|
||||
struct mlx5_ib_cq *send_cq, *recv_cq;
|
||||
struct mlx5_ib_qp_base *base;
|
||||
@@ -2466,7 +2474,7 @@ static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp)
|
||||
if (qp->create_type == MLX5_QP_KERNEL)
|
||||
destroy_qp_kernel(dev, qp);
|
||||
else if (qp->create_type == MLX5_QP_USER)
|
||||
destroy_qp_user(dev, &get_pd(qp)->ibpd, qp, base);
|
||||
destroy_qp_user(dev, &get_pd(qp)->ibpd, qp, base, udata);
|
||||
}
|
||||
|
||||
static const char *ib_qp_type_str(enum ib_qp_type type)
|
||||
@@ -2743,7 +2751,7 @@ int mlx5_ib_destroy_qp(struct ib_qp *qp, struct ib_udata *udata)
|
||||
if (mqp->qp_sub_type == MLX5_IB_QPT_DCT)
|
||||
return mlx5_ib_destroy_dct(mqp);
|
||||
|
||||
destroy_qp_common(dev, mqp);
|
||||
destroy_qp_common(dev, mqp, udata);
|
||||
|
||||
kfree(mqp);
|
||||
|
||||
@@ -5959,7 +5967,7 @@ struct ib_wq *mlx5_ib_create_wq(struct ib_pd *pd,
|
||||
err_copy:
|
||||
mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp);
|
||||
err_user_rq:
|
||||
destroy_user_rq(dev, pd, rwq);
|
||||
destroy_user_rq(dev, pd, rwq, udata);
|
||||
err:
|
||||
kfree(rwq);
|
||||
return ERR_PTR(err);
|
||||
@@ -5971,7 +5979,7 @@ int mlx5_ib_destroy_wq(struct ib_wq *wq, struct ib_udata *udata)
|
||||
struct mlx5_ib_rwq *rwq = to_mrwq(wq);
|
||||
|
||||
mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp);
|
||||
destroy_user_rq(dev, wq->pd, rwq);
|
||||
destroy_user_rq(dev, wq->pd, rwq, udata);
|
||||
kfree(rwq);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user