aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.h14
-rw-r--r--drivers/infiniband/ulp/iser/iser_initiator.c18
-rw-r--r--drivers/infiniband/ulp/iser/iser_memory.c30
3 files changed, 29 insertions, 33 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h
index 185d2ec0e3d8..5fd09636fbee 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.h
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.h
@@ -247,18 +247,14 @@ struct iscsi_endpoint;
247/** 247/**
248 * struct iser_mem_reg - iSER memory registration info 248 * struct iser_mem_reg - iSER memory registration info
249 * 249 *
250 * @lkey: MR local key 250 * @sge: memory region sg element
251 * @rkey: MR remote key 251 * @rkey: memory region remote key
252 * @va: MR start address (buffer va)
253 * @len: MR length
254 * @mem_h: pointer to registration context (FMR/Fastreg) 252 * @mem_h: pointer to registration context (FMR/Fastreg)
255 */ 253 */
256struct iser_mem_reg { 254struct iser_mem_reg {
257 u32 lkey; 255 struct ib_sge sge;
258 u32 rkey; 256 u32 rkey;
259 u64 va; 257 void *mem_h;
260 u64 len;
261 void *mem_h;
262}; 258};
263 259
264enum iser_desc_type { 260enum iser_desc_type {
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index 420a613fe9f5..b2e3b77340b5 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -82,11 +82,11 @@ static int iser_prepare_read_cmd(struct iscsi_task *task)
82 82
83 hdr->flags |= ISER_RSV; 83 hdr->flags |= ISER_RSV;
84 hdr->read_stag = cpu_to_be32(mem_reg->rkey); 84 hdr->read_stag = cpu_to_be32(mem_reg->rkey);
85 hdr->read_va = cpu_to_be64(mem_reg->va); 85 hdr->read_va = cpu_to_be64(mem_reg->sge.addr);
86 86
87 iser_dbg("Cmd itt:%d READ tags RKEY:%#.4X VA:%#llX\n", 87 iser_dbg("Cmd itt:%d READ tags RKEY:%#.4X VA:%#llX\n",
88 task->itt, mem_reg->rkey, 88 task->itt, mem_reg->rkey,
89 (unsigned long long)mem_reg->va); 89 (unsigned long long)mem_reg->sge.addr);
90 90
91 return 0; 91 return 0;
92} 92}
@@ -139,20 +139,20 @@ iser_prepare_write_cmd(struct iscsi_task *task,
139 if (unsol_sz < edtl) { 139 if (unsol_sz < edtl) {
140 hdr->flags |= ISER_WSV; 140 hdr->flags |= ISER_WSV;
141 hdr->write_stag = cpu_to_be32(mem_reg->rkey); 141 hdr->write_stag = cpu_to_be32(mem_reg->rkey);
142 hdr->write_va = cpu_to_be64(mem_reg->va + unsol_sz); 142 hdr->write_va = cpu_to_be64(mem_reg->sge.addr + unsol_sz);
143 143
144 iser_dbg("Cmd itt:%d, WRITE tags, RKEY:%#.4X " 144 iser_dbg("Cmd itt:%d, WRITE tags, RKEY:%#.4X "
145 "VA:%#llX + unsol:%d\n", 145 "VA:%#llX + unsol:%d\n",
146 task->itt, mem_reg->rkey, 146 task->itt, mem_reg->rkey,
147 (unsigned long long)mem_reg->va, unsol_sz); 147 (unsigned long long)mem_reg->sge.addr, unsol_sz);
148 } 148 }
149 149
150 if (imm_sz > 0) { 150 if (imm_sz > 0) {
151 iser_dbg("Cmd itt:%d, WRITE, adding imm.data sz: %d\n", 151 iser_dbg("Cmd itt:%d, WRITE, adding imm.data sz: %d\n",
152 task->itt, imm_sz); 152 task->itt, imm_sz);
153 tx_dsg->addr = mem_reg->va; 153 tx_dsg->addr = mem_reg->sge.addr;
154 tx_dsg->length = imm_sz; 154 tx_dsg->length = imm_sz;
155 tx_dsg->lkey = mem_reg->lkey; 155 tx_dsg->lkey = mem_reg->sge.lkey;
156 iser_task->desc.num_sge = 2; 156 iser_task->desc.num_sge = 2;
157 } 157 }
158 158
@@ -479,9 +479,9 @@ int iser_send_data_out(struct iscsi_conn *conn,
479 479
480 mem_reg = &iser_task->rdma_reg[ISER_DIR_OUT]; 480 mem_reg = &iser_task->rdma_reg[ISER_DIR_OUT];
481 tx_dsg = &tx_desc->tx_sg[1]; 481 tx_dsg = &tx_desc->tx_sg[1];
482 tx_dsg->addr = mem_reg->va + buf_offset; 482 tx_dsg->addr = mem_reg->sge.addr + buf_offset;
483 tx_dsg->length = data_seg_len; 483 tx_dsg->length = data_seg_len;
484 tx_dsg->lkey = mem_reg->lkey; 484 tx_dsg->lkey = mem_reg->sge.lkey;
485 tx_desc->num_sge = 2; 485 tx_desc->num_sge = 2;
486 486
487 if (buf_offset + data_seg_len > iser_task->data[ISER_DIR_OUT].data_len) { 487 if (buf_offset + data_seg_len > iser_task->data[ISER_DIR_OUT].data_len) {
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
index 45f512043ef5..40d22d5c3fac 100644
--- a/drivers/infiniband/ulp/iser/iser_memory.c
+++ b/drivers/infiniband/ulp/iser/iser_memory.c
@@ -400,10 +400,10 @@ int iser_reg_page_vec(struct iscsi_iser_task *iser_task,
400 return ret; 400 return ret;
401 } 401 }
402 402
403 mem_reg->lkey = fmr->fmr->lkey; 403 mem_reg->sge.lkey = fmr->fmr->lkey;
404 mem_reg->rkey = fmr->fmr->rkey; 404 mem_reg->rkey = fmr->fmr->rkey;
405 mem_reg->va = page_vec->pages[0] + page_vec->offset; 405 mem_reg->sge.addr = page_vec->pages[0] + page_vec->offset;
406 mem_reg->len = page_vec->data_size; 406 mem_reg->sge.length = page_vec->data_size;
407 mem_reg->mem_h = fmr; 407 mem_reg->mem_h = fmr;
408 408
409 return 0; 409 return 0;
@@ -479,17 +479,17 @@ int iser_reg_rdma_mem_fmr(struct iscsi_iser_task *iser_task,
479 if (mem->dma_nents == 1) { 479 if (mem->dma_nents == 1) {
480 sg = mem->sg; 480 sg = mem->sg;
481 481
482 mem_reg->lkey = device->mr->lkey; 482 mem_reg->sge.lkey = device->mr->lkey;
483 mem_reg->rkey = device->mr->rkey; 483 mem_reg->rkey = device->mr->rkey;
484 mem_reg->len = ib_sg_dma_len(ibdev, &sg[0]); 484 mem_reg->sge.length = ib_sg_dma_len(ibdev, &sg[0]);
485 mem_reg->va = ib_sg_dma_address(ibdev, &sg[0]); 485 mem_reg->sge.addr = ib_sg_dma_address(ibdev, &sg[0]);
486 486
487 iser_dbg("PHYSICAL Mem.register: lkey: 0x%08X rkey: 0x%08X " 487 iser_dbg("PHYSICAL Mem.register: lkey: 0x%08X rkey: 0x%08X "
488 "va: 0x%08lX sz: %ld]\n", 488 "va: 0x%08lX sz: %ld]\n",
489 (unsigned int)mem_reg->lkey, 489 (unsigned int)mem_reg->sge.lkey,
490 (unsigned int)mem_reg->rkey, 490 (unsigned int)mem_reg->rkey,
491 (unsigned long)mem_reg->va, 491 (unsigned long)mem_reg->sge.addr,
492 (unsigned long)mem_reg->len); 492 (unsigned long)mem_reg->sge.length);
493 } else { /* use FMR for multiple dma entries */ 493 } else { /* use FMR for multiple dma entries */
494 err = iser_reg_page_vec(iser_task, mem, ib_conn->fmr.page_vec, 494 err = iser_reg_page_vec(iser_task, mem, ib_conn->fmr.page_vec,
495 mem_reg); 495 mem_reg);
@@ -799,19 +799,19 @@ int iser_reg_rdma_mem_fastreg(struct iscsi_iser_task *iser_task,
799 } 799 }
800 desc->reg_indicators |= ISER_FASTREG_PROTECTED; 800 desc->reg_indicators |= ISER_FASTREG_PROTECTED;
801 801
802 mem_reg->lkey = sig_sge.lkey; 802 mem_reg->sge.lkey = sig_sge.lkey;
803 mem_reg->rkey = desc->pi_ctx->sig_mr->rkey; 803 mem_reg->rkey = desc->pi_ctx->sig_mr->rkey;
804 mem_reg->va = sig_sge.addr; 804 mem_reg->sge.addr = sig_sge.addr;
805 mem_reg->len = sig_sge.length; 805 mem_reg->sge.length = sig_sge.length;
806 } else { 806 } else {
807 if (desc) 807 if (desc)
808 mem_reg->rkey = desc->data_mr->rkey; 808 mem_reg->rkey = desc->data_mr->rkey;
809 else 809 else
810 mem_reg->rkey = device->mr->rkey; 810 mem_reg->rkey = device->mr->rkey;
811 811
812 mem_reg->lkey = data_sge.lkey; 812 mem_reg->sge.lkey = data_sge.lkey;
813 mem_reg->va = data_sge.addr; 813 mem_reg->sge.addr = data_sge.addr;
814 mem_reg->len = data_sge.length; 814 mem_reg->sge.length = data_sge.length;
815 } 815 }
816 816
817 return 0; 817 return 0;