diff options
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.h | 14 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_initiator.c | 18 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_memory.c | 30 |
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 | */ |
256 | struct iser_mem_reg { | 254 | struct 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 | ||
264 | enum iser_desc_type { | 260 | enum 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; |