Message ID | 20190821142125.5706-11-yuval.shaia@oracle.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Shared PD and MR | expand |
On Wed, Aug 21, 2019 at 05:21:11PM +0300, Yuval Shaia wrote: > From: Shamir Rabinovitch <shamir.rabinovitch@oracle.com> > > Copy mlx4 ib_pd to user-space. > > Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com> > Signed-off-by: Shamir Rabinovitch <srabinov7@gmail.com> > drivers/infiniband/hw/mlx4/main.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c > index 8d2f1e38b891..6baf52d988ed 100644 > +++ b/drivers/infiniband/hw/mlx4/main.c > @@ -1179,6 +1179,13 @@ static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) > } > } > > +static int mlx4_ib_clone_pd(struct ib_udata *udata, struct ib_pd *ibpd) > +{ > + struct mlx4_ib_pd *pd = to_mpd(ibpd); > + > + return udata ? ib_copy_to_udata(udata, &pd->pdn, sizeof(__u32)) : 0; > +} And here it is, clone is just query. Jason
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 8d2f1e38b891..6baf52d988ed 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -1179,6 +1179,13 @@ static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) } } +static int mlx4_ib_clone_pd(struct ib_udata *udata, struct ib_pd *ibpd) +{ + struct mlx4_ib_pd *pd = to_mpd(ibpd); + + return udata ? ib_copy_to_udata(udata, &pd->pdn, sizeof(__u32)) : 0; +} + static int mlx4_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) { struct mlx4_ib_pd *pd = to_mpd(ibpd); @@ -1189,10 +1196,12 @@ 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))) { + err = mlx4_ib_clone_pd(udata, ibpd); + if (err) { mlx4_pd_free(to_mdev(ibdev)->dev, pd->pdn); return -EFAULT; } + return 0; } @@ -2565,6 +2574,9 @@ static const struct ib_device_ops mlx4_ib_dev_ops = { .rereg_user_mr = mlx4_ib_rereg_user_mr, .resize_cq = mlx4_ib_resize_cq, + /* Object sharing callbacks */ + .clone_ib_pd = mlx4_ib_clone_pd, + INIT_RDMA_OBJ_SIZE(ib_ah, mlx4_ib_ah, ibah), INIT_RDMA_OBJ_SIZE(ib_cq, mlx4_ib_cq, ibcq), INIT_RDMA_OBJ_SIZE(ib_pd, mlx4_ib_pd, ibpd),