mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
RDMA: Use proper driver data response structs instead of open coding
At some point the response structs were added and rdma-core is using them, but the kernel was not changed to use them as well. Replace the open-coded copy with the right struct and ib_respond_udata(). Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
0d10dd1388
commit
89a4974009
|
|
@ -142,6 +142,7 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq,
|
|||
{
|
||||
struct ib_udata *udata = &attrs->driver_udata;
|
||||
struct ib_device *ibdev = ibcq->device;
|
||||
struct mlx4_ib_create_cq_resp uresp = {};
|
||||
int entries = attr->cqe;
|
||||
int vector = attr->comp_vector;
|
||||
struct mlx4_ib_dev *dev = to_mdev(ibdev);
|
||||
|
|
@ -219,10 +220,10 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq,
|
|||
cq->mcq.event = mlx4_ib_cq_event;
|
||||
cq->mcq.usage = MLX4_RES_USAGE_USER_VERBS;
|
||||
|
||||
if (ib_copy_to_udata(udata, &cq->mcq.cqn, sizeof(__u32))) {
|
||||
err = -EFAULT;
|
||||
uresp.cqn = cq->mcq.cqn;
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err)
|
||||
goto err_cq_free;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1199,9 +1199,14 @@ static int mlx4_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (udata && ib_copy_to_udata(udata, &pd->pdn, sizeof(__u32))) {
|
||||
mlx4_pd_free(to_mdev(ibdev)->dev, pd->pdn);
|
||||
return -EFAULT;
|
||||
if (udata) {
|
||||
struct mlx4_ib_alloc_pd_resp uresp = { .pdn = pd->pdn };
|
||||
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err) {
|
||||
mlx4_pd_free(to_mdev(ibdev)->dev, pd->pdn);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,11 +191,15 @@ int mlx4_ib_create_srq(struct ib_srq *ib_srq,
|
|||
srq->msrq.event = mlx4_ib_srq_event;
|
||||
srq->ibsrq.ext.xrc.srq_num = srq->msrq.srqn;
|
||||
|
||||
if (udata)
|
||||
if (ib_copy_to_udata(udata, &srq->msrq.srqn, sizeof (__u32))) {
|
||||
err = -EFAULT;
|
||||
if (udata) {
|
||||
struct mlx4_ib_create_srq_resp uresp = {
|
||||
.srqn = srq->msrq.srqn
|
||||
};
|
||||
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err)
|
||||
goto err_wrid;
|
||||
}
|
||||
}
|
||||
|
||||
init_attr->attr.max_wr = srq->msrq.max - 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -950,6 +950,7 @@ int mlx5_ib_create_user_cq(struct ib_cq *ibcq,
|
|||
{
|
||||
struct ib_udata *udata = &attrs->driver_udata;
|
||||
struct ib_device *ibdev = ibcq->device;
|
||||
struct mlx5_ib_create_cq_resp uresp = {};
|
||||
int entries = attr->cqe;
|
||||
int vector = attr->comp_vector;
|
||||
struct mlx5_ib_dev *dev = to_mdev(ibdev);
|
||||
|
|
@ -1016,10 +1017,10 @@ int mlx5_ib_create_user_cq(struct ib_cq *ibcq,
|
|||
|
||||
INIT_LIST_HEAD(&cq->wc_list);
|
||||
|
||||
if (ib_copy_to_udata(udata, &cq->mcq.cqn, sizeof(__u32))) {
|
||||
err = -EFAULT;
|
||||
uresp.cqn = cq->mcq.cqn;
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err)
|
||||
goto err_cmd;
|
||||
}
|
||||
|
||||
kvfree(cqb);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -357,9 +357,12 @@ static int mthca_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
|
|||
return err;
|
||||
|
||||
if (udata) {
|
||||
if (ib_copy_to_udata(udata, &pd->pd_num, sizeof (__u32))) {
|
||||
struct mthca_alloc_pd_resp uresp = { .pdn = pd->pd_num };
|
||||
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err) {
|
||||
mthca_pd_free(to_mdev(ibdev), pd);
|
||||
return -EFAULT;
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -428,11 +431,17 @@ static int mthca_create_srq(struct ib_srq *ibsrq,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (context && ib_copy_to_udata(udata, &srq->srqn, sizeof(__u32))) {
|
||||
mthca_free_srq(to_mdev(ibsrq->device), srq);
|
||||
mthca_unmap_user_db(to_mdev(ibsrq->device), &context->uar,
|
||||
context->db_tab, ucmd.db_index);
|
||||
return -EFAULT;
|
||||
if (context) {
|
||||
struct mthca_create_srq_resp uresp = { .srqn = srq->srqn };
|
||||
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err) {
|
||||
mthca_free_srq(to_mdev(ibsrq->device), srq);
|
||||
mthca_unmap_user_db(to_mdev(ibsrq->device),
|
||||
&context->uar, context->db_tab,
|
||||
ucmd.db_index);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -631,10 +640,14 @@ static int mthca_create_cq(struct ib_cq *ibcq,
|
|||
if (err)
|
||||
goto err_unmap_arm;
|
||||
|
||||
if (udata && ib_copy_to_udata(udata, &cq->cqn, sizeof(__u32))) {
|
||||
mthca_free_cq(to_mdev(ibdev), cq);
|
||||
err = -EFAULT;
|
||||
goto err_unmap_arm;
|
||||
if (udata) {
|
||||
struct mthca_create_cq_resp uresp = { .cqn = cq->cqn };
|
||||
|
||||
err = ib_respond_udata(udata, uresp);
|
||||
if (err) {
|
||||
mthca_free_cq(to_mdev(ibdev), cq);
|
||||
goto err_unmap_arm;
|
||||
}
|
||||
}
|
||||
|
||||
cq->resize_buf = NULL;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user