提交 8e61212d 编写于 作者: C Christoph Hellwig 提交者: Doug Ledford

IB/iser: use IB_PD_UNSAFE_GLOBAL_RKEY

Signed-off-by: NChristoph Hellwig <hch@lst.de>
Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
Reviewed-by: NJason Gunthorpe <jgunthorpe@obsidianresearch.com>
Reviewed-by: NSteve Wise <swise@opengridcomputing.com>
Signed-off-by: NDoug Ledford <dledford@redhat.com>
上级 ed082d36
...@@ -374,7 +374,6 @@ struct iser_reg_ops { ...@@ -374,7 +374,6 @@ struct iser_reg_ops {
struct iser_device { struct iser_device {
struct ib_device *ib_device; struct ib_device *ib_device;
struct ib_pd *pd; struct ib_pd *pd;
struct ib_mr *mr;
struct ib_event_handler event_handler; struct ib_event_handler event_handler;
struct list_head ig_list; struct list_head ig_list;
int refcount; int refcount;
......
...@@ -199,7 +199,11 @@ iser_reg_dma(struct iser_device *device, struct iser_data_buf *mem, ...@@ -199,7 +199,11 @@ iser_reg_dma(struct iser_device *device, struct iser_data_buf *mem,
* FIXME: rework the registration code path to differentiate * FIXME: rework the registration code path to differentiate
* rkey/lkey use cases * rkey/lkey use cases
*/ */
reg->rkey = device->mr ? device->mr->rkey : 0;
if (device->pd->flags & IB_PD_UNSAFE_GLOBAL_RKEY)
reg->rkey = device->pd->unsafe_global_rkey;
else
reg->rkey = 0;
reg->sge.addr = ib_sg_dma_address(device->ib_device, &sg[0]); reg->sge.addr = ib_sg_dma_address(device->ib_device, &sg[0]);
reg->sge.length = ib_sg_dma_len(device->ib_device, &sg[0]); reg->sge.length = ib_sg_dma_len(device->ib_device, &sg[0]);
......
...@@ -88,7 +88,8 @@ static int iser_create_device_ib_res(struct iser_device *device) ...@@ -88,7 +88,8 @@ static int iser_create_device_ib_res(struct iser_device *device)
device->comps_used, ib_dev->name, device->comps_used, ib_dev->name,
ib_dev->num_comp_vectors, max_cqe); ib_dev->num_comp_vectors, max_cqe);
device->pd = ib_alloc_pd(ib_dev, 0); device->pd = ib_alloc_pd(ib_dev,
iser_always_reg ? 0 : IB_PD_UNSAFE_GLOBAL_RKEY);
if (IS_ERR(device->pd)) if (IS_ERR(device->pd))
goto pd_err; goto pd_err;
...@@ -103,26 +104,13 @@ static int iser_create_device_ib_res(struct iser_device *device) ...@@ -103,26 +104,13 @@ static int iser_create_device_ib_res(struct iser_device *device)
} }
} }
if (!iser_always_reg) {
int access = IB_ACCESS_LOCAL_WRITE |
IB_ACCESS_REMOTE_WRITE |
IB_ACCESS_REMOTE_READ;
device->mr = ib_get_dma_mr(device->pd, access);
if (IS_ERR(device->mr))
goto cq_err;
}
INIT_IB_EVENT_HANDLER(&device->event_handler, ib_dev, INIT_IB_EVENT_HANDLER(&device->event_handler, ib_dev,
iser_event_handler); iser_event_handler);
if (ib_register_event_handler(&device->event_handler)) if (ib_register_event_handler(&device->event_handler))
goto handler_err; goto cq_err;
return 0; return 0;
handler_err:
if (device->mr)
ib_dereg_mr(device->mr);
cq_err: cq_err:
for (i = 0; i < device->comps_used; i++) { for (i = 0; i < device->comps_used; i++) {
struct iser_comp *comp = &device->comps[i]; struct iser_comp *comp = &device->comps[i];
...@@ -154,14 +142,10 @@ static void iser_free_device_ib_res(struct iser_device *device) ...@@ -154,14 +142,10 @@ static void iser_free_device_ib_res(struct iser_device *device)
} }
(void)ib_unregister_event_handler(&device->event_handler); (void)ib_unregister_event_handler(&device->event_handler);
if (device->mr)
(void)ib_dereg_mr(device->mr);
ib_dealloc_pd(device->pd); ib_dealloc_pd(device->pd);
kfree(device->comps); kfree(device->comps);
device->comps = NULL; device->comps = NULL;
device->mr = NULL;
device->pd = NULL; device->pd = NULL;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册