diff options
author | Sagi Grimberg <sagig@mellanox.com> | 2013-07-28 13:35:39 +0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-08-10 04:18:09 +0400 |
commit | b4e155ffbbd65cba77207bc5522c7b734a5c8c9d (patch) | |
tree | 8ab7e294205e558e71e0a028be63a8f33bdc6203 /drivers/infiniband/ulp/iser/iser_verbs.c | |
parent | b7f04513090cf12394de27588a1956d1f97188cb (diff) | |
download | linux-b4e155ffbbd65cba77207bc5522c7b734a5c8c9d.tar.xz |
IB/iser: Generalize rdma memory registration
Currently the driver uses FMRs as the only means to register the
memory pointed by SG provided by the SCSI mid-layer with the RDMA
device.
As preparation step for adding more methods for fast path memory
registration, make the alloc/free and reg/unreg calls function
pointers, which are for now just set to the existing FMR ones.
Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/ulp/iser/iser_verbs.c')
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_verbs.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c index 5e49a36c7274..5b5342895c05 100644 --- a/drivers/infiniband/ulp/iser/iser_verbs.c +++ b/drivers/infiniband/ulp/iser/iser_verbs.c @@ -74,6 +74,12 @@ static int iser_create_device_ib_res(struct iser_device *device) int i, j; struct iser_cq_desc *cq_desc; + /* Assign function handles */ + device->iser_alloc_rdma_reg_res = iser_create_fmr_pool; + device->iser_free_rdma_reg_res = iser_free_fmr_pool; + device->iser_reg_rdma_mem = iser_reg_rdma_mem; + device->iser_unreg_rdma_mem = iser_unreg_mem; + device->cqs_used = min(ISER_MAX_CQ, device->ib_device->num_comp_vectors); iser_info("using %d CQs, device %s supports %d vectors\n", device->cqs_used, device->ib_device->name, @@ -721,10 +727,15 @@ int iser_reg_page_vec(struct iser_conn *ib_conn, /** * Unregister (previosuly registered) memory. */ -void iser_unreg_mem(struct iser_mem_reg *reg) +void iser_unreg_mem(struct iscsi_iser_task *iser_task, + enum iser_data_dir cmd_dir) { + struct iser_mem_reg *reg = &iser_task->rdma_regd[cmd_dir].reg; int ret; + if (!reg->is_fmr) + return; + iser_dbg("PHYSICAL Mem.Unregister mem_h %p\n",reg->mem_h); ret = ib_fmr_pool_unmap((struct ib_pool_fmr *)reg->mem_h); |