diff options
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_memory.c | 32 |
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 | ||
527 | static void | ||
528 | iser_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 | |||
527 | static int | 541 | static int |
528 | iser_reg_sig_mr(struct iscsi_iser_task *iser_task, | 542 | iser_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 */ |