mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-28 01:04:03 +00:00
IB/iser: use IB_PD_UNSAFE_GLOBAL_RKEY
Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
ed082d36a7
commit
8e61212d05
3 changed files with 8 additions and 21 deletions
|
@ -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,
|
||||||
* 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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
(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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue