RDMA: Handle ucontext allocations by IB/core
Following the PD conversion patch, do the same for ucontext allocations. Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Цей коміт міститься в:

зафіксовано
Jason Gunthorpe

джерело
afc1990e08
коміт
a2a074ef39
@@ -335,23 +335,19 @@ static int hns_roce_modify_port(struct ib_device *ib_dev, u8 port_num, int mask,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct ib_ucontext *hns_roce_alloc_ucontext(struct ib_device *ib_dev,
|
||||
struct ib_udata *udata)
|
||||
static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
|
||||
struct ib_udata *udata)
|
||||
{
|
||||
int ret = 0;
|
||||
struct hns_roce_ucontext *context;
|
||||
struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
|
||||
struct hns_roce_ib_alloc_ucontext_resp resp = {};
|
||||
struct hns_roce_dev *hr_dev = to_hr_dev(ib_dev);
|
||||
struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
|
||||
|
||||
if (!hr_dev->active)
|
||||
return ERR_PTR(-EAGAIN);
|
||||
return -EAGAIN;
|
||||
|
||||
resp.qp_tab_size = hr_dev->caps.num_qps;
|
||||
|
||||
context = kzalloc(sizeof(*context), GFP_KERNEL);
|
||||
if (!context)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ret = hns_roce_uar_alloc(hr_dev, &context->uar);
|
||||
if (ret)
|
||||
goto error_fail_uar_alloc;
|
||||
@@ -365,25 +361,20 @@ static struct ib_ucontext *hns_roce_alloc_ucontext(struct ib_device *ib_dev,
|
||||
if (ret)
|
||||
goto error_fail_copy_to_udata;
|
||||
|
||||
return &context->ibucontext;
|
||||
return 0;
|
||||
|
||||
error_fail_copy_to_udata:
|
||||
hns_roce_uar_free(hr_dev, &context->uar);
|
||||
|
||||
error_fail_uar_alloc:
|
||||
kfree(context);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hns_roce_dealloc_ucontext(struct ib_ucontext *ibcontext)
|
||||
static void hns_roce_dealloc_ucontext(struct ib_ucontext *ibcontext)
|
||||
{
|
||||
struct hns_roce_ucontext *context = to_hr_ucontext(ibcontext);
|
||||
|
||||
hns_roce_uar_free(to_hr_dev(ibcontext->device), &context->uar);
|
||||
kfree(context);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hns_roce_mmap(struct ib_ucontext *context,
|
||||
@@ -478,6 +469,7 @@ static const struct ib_device_ops hns_roce_dev_ops = {
|
||||
.query_port = hns_roce_query_port,
|
||||
.reg_user_mr = hns_roce_reg_user_mr,
|
||||
INIT_RDMA_OBJ_SIZE(ib_pd, hns_roce_pd, ibpd),
|
||||
INIT_RDMA_OBJ_SIZE(ib_ucontext, hns_roce_ucontext, ibucontext),
|
||||
};
|
||||
|
||||
static const struct ib_device_ops hns_roce_dev_mr_ops = {
|
||||
|
Посилання в новій задачі
Заблокувати користувача