aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/iser/iser_memory.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
index 5796c95be97b..a70fd9ae7567 100644
--- a/drivers/infiniband/ulp/iser/iser_memory.c
+++ b/drivers/infiniband/ulp/iser/iser_memory.c
@@ -524,6 +524,20 @@ iser_set_prot_checks(struct scsi_cmnd *sc, u8 *mask)
524 return 0; 524 return 0;
525} 525}
526 526
527static void
528iser_inv_rkey(struct ib_send_wr *inv_wr, struct ib_mr *mr)
529{
530 u32 rkey;
531
532 memset(inv_wr, 0, sizeof(*inv_wr));
533 inv_wr->opcode = IB_WR_LOCAL_INV;
534 inv_wr->wr_id = ISER_FASTREG_LI_WRID;
535 inv_wr->ex.invalidate_rkey = mr->rkey;
536
537 rkey = ib_inc_rkey(mr->rkey);
538 ib_update_fast_reg_key(mr, rkey);
539}
540
527static int 541static int
528iser_reg_sig_mr(struct iscsi_iser_task *iser_task, 542iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
529 struct fast_reg_descriptor *desc, struct ib_sge *data_sge, 543 struct fast_reg_descriptor *desc, struct ib_sge *data_sge,
@@ -535,7 +549,6 @@ iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
535 struct ib_send_wr *bad_wr, *wr = NULL; 549 struct ib_send_wr *bad_wr, *wr = NULL;
536 struct ib_sig_attrs sig_attrs; 550 struct ib_sig_attrs sig_attrs;
537 int ret; 551 int ret;
538 u32 key;
539 552
540 memset(&sig_attrs, 0, sizeof(sig_attrs)); 553 memset(&sig_attrs, 0, sizeof(sig_attrs));
541 ret = iser_set_sig_attrs(iser_task->sc, &sig_attrs); 554 ret = iser_set_sig_attrs(iser_task->sc, &sig_attrs);
@@ -547,14 +560,8 @@ iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
547 goto err; 560 goto err;
548 561
549 if (!(desc->reg_indicators & ISER_SIG_KEY_VALID)) { 562 if (!(desc->reg_indicators & ISER_SIG_KEY_VALID)) {
550 memset(&inv_wr, 0, sizeof(inv_wr)); 563 iser_inv_rkey(&inv_wr, pi_ctx->sig_mr);
551 inv_wr.opcode = IB_WR_LOCAL_INV;
552 inv_wr.wr_id = ISER_FASTREG_LI_WRID;
553 inv_wr.ex.invalidate_rkey = pi_ctx->sig_mr->rkey;
554 wr = &inv_wr; 564 wr = &inv_wr;
555 /* Bump the key */
556 key = (u8)(pi_ctx->sig_mr->rkey & 0x000000FF);
557 ib_update_fast_reg_key(pi_ctx->sig_mr, ++key);
558 } 565 }
559 566
560 memset(&sig_wr, 0, sizeof(sig_wr)); 567 memset(&sig_wr, 0, sizeof(sig_wr));
@@ -612,7 +619,6 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task,
612 struct ib_fast_reg_page_list *frpl; 619 struct ib_fast_reg_page_list *frpl;
613 struct ib_send_wr fastreg_wr, inv_wr; 620 struct ib_send_wr fastreg_wr, inv_wr;
614 struct ib_send_wr *bad_wr, *wr = NULL; 621 struct ib_send_wr *bad_wr, *wr = NULL;
615 u8 key;
616 int ret, offset, size, plen; 622 int ret, offset, size, plen;
617 623
618 /* if there a single dma entry, dma mr suffices */ 624 /* if there a single dma entry, dma mr suffices */
@@ -644,14 +650,8 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task,
644 } 650 }
645 651
646 if (!(desc->reg_indicators & ind)) { 652 if (!(desc->reg_indicators & ind)) {
647 memset(&inv_wr, 0, sizeof(inv_wr)); 653 iser_inv_rkey(&inv_wr, mr);
648 inv_wr.wr_id = ISER_FASTREG_LI_WRID;
649 inv_wr.opcode = IB_WR_LOCAL_INV;
650 inv_wr.ex.invalidate_rkey = mr->rkey;
651 wr = &inv_wr; 654 wr = &inv_wr;
652 /* Bump the key */
653 key = (u8)(mr->rkey & 0x000000FF);
654 ib_update_fast_reg_key(mr, ++key);
655 } 655 }
656 656
657 /* Prepare FASTREG WR */ 657 /* Prepare FASTREG WR */