Skip to content

Commit 8bb143c

Browse files
Bob Pearsonjgunthorpe
authored andcommitted
RDMA/rxe: Make the tasklet exits the same
Make changes to the three tasklets so that the exit logic from each is the same. This makes the code easier to understand. Link: https://lore.kernel.org/r/20220630190425.2251-8-rpearsonhpe@gmail.com Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
1 parent 445fd4f commit 8bb143c

File tree

3 files changed

+60
-46
lines changed

3 files changed

+60
-46
lines changed

drivers/infiniband/sw/rxe/rxe_comp.c

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ int rxe_completer(void *arg)
562562
struct sk_buff *skb = NULL;
563563
struct rxe_pkt_info *pkt = NULL;
564564
enum comp_state state;
565-
int ret = 0;
565+
int ret;
566566

567567
if (!rxe_get(qp))
568568
return -EAGAIN;
@@ -571,8 +571,7 @@ int rxe_completer(void *arg)
571571
qp->req.state == QP_STATE_RESET) {
572572
rxe_drain_resp_pkts(qp, qp->valid &&
573573
qp->req.state == QP_STATE_ERROR);
574-
ret = -EAGAIN;
575-
goto done;
574+
goto exit;
576575
}
577576

578577
if (qp->comp.timeout) {
@@ -582,10 +581,8 @@ int rxe_completer(void *arg)
582581
qp->comp.timeout_retry = 0;
583582
}
584583

585-
if (qp->req.need_retry) {
586-
ret = -EAGAIN;
587-
goto done;
588-
}
584+
if (qp->req.need_retry)
585+
goto exit;
589586

590587
state = COMPST_GET_ACK;
591588

@@ -678,8 +675,7 @@ int rxe_completer(void *arg)
678675
qp->qp_timeout_jiffies)
679676
mod_timer(&qp->retrans_timer,
680677
jiffies + qp->qp_timeout_jiffies);
681-
ret = -EAGAIN;
682-
goto done;
678+
goto exit;
683679

684680
case COMPST_ERROR_RETRY:
685681
/* we come here if the retry timer fired and we did
@@ -691,10 +687,8 @@ int rxe_completer(void *arg)
691687
*/
692688

693689
/* there is nothing to retry in this case */
694-
if (!wqe || (wqe->state == wqe_state_posted)) {
695-
ret = -EAGAIN;
696-
goto done;
697-
}
690+
if (!wqe || (wqe->state == wqe_state_posted))
691+
goto exit;
698692

699693
/* if we've started a retry, don't start another
700694
* retry sequence, unless this is a timeout.
@@ -746,8 +740,7 @@ int rxe_completer(void *arg)
746740
mod_timer(&qp->rnr_nak_timer,
747741
jiffies + rnrnak_jiffies(aeth_syn(pkt)
748742
& ~AETH_TYPE_MASK));
749-
ret = -EAGAIN;
750-
goto done;
743+
goto exit;
751744
} else {
752745
rxe_counter_inc(rxe,
753746
RXE_CNT_RNR_RETRY_EXCEEDED);
@@ -760,12 +753,20 @@ int rxe_completer(void *arg)
760753
WARN_ON_ONCE(wqe->status == IB_WC_SUCCESS);
761754
do_complete(qp, wqe);
762755
rxe_qp_error(qp);
763-
ret = -EAGAIN;
764-
goto done;
756+
goto exit;
765757
}
766758
}
767759

760+
/* A non-zero return value will cause rxe_do_task to
761+
* exit its loop and end the tasklet. A zero return
762+
* will continue looping and return to rxe_completer
763+
*/
768764
done:
765+
ret = 0;
766+
goto out;
767+
exit:
768+
ret = -EAGAIN;
769+
out:
769770
if (pkt)
770771
free_pkt(pkt);
771772
rxe_put(qp);

drivers/infiniband/sw/rxe/rxe_req.c

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,7 @@ int rxe_requester(void *arg)
624624
u32 payload;
625625
int mtu;
626626
int opcode;
627+
int err;
627628
int ret;
628629
struct rxe_send_wqe rollback_wqe;
629630
u32 rollback_psn;
@@ -634,7 +635,6 @@ int rxe_requester(void *arg)
634635
if (!rxe_get(qp))
635636
return -EAGAIN;
636637

637-
next_wqe:
638638
if (unlikely(!qp->valid || qp->req.state == QP_STATE_ERROR))
639639
goto exit;
640640

@@ -649,7 +649,7 @@ int rxe_requester(void *arg)
649649
goto exit;
650650
}
651651

652-
/* we come here if the retransmot timer has fired
652+
/* we come here if the retransmit timer has fired
653653
* or if the rnr timer has fired. If the retransmit
654654
* timer fires while we are processing an RNR NAK wait
655655
* until the rnr timer has fired before starting the
@@ -670,11 +670,11 @@ int rxe_requester(void *arg)
670670
}
671671

672672
if (wqe->mask & WR_LOCAL_OP_MASK) {
673-
ret = rxe_do_local_ops(qp, wqe);
674-
if (unlikely(ret))
673+
err = rxe_do_local_ops(qp, wqe);
674+
if (unlikely(err))
675675
goto err;
676676
else
677-
goto next_wqe;
677+
goto done;
678678
}
679679

680680
if (unlikely(qp_type(qp) == IB_QPT_RC &&
@@ -723,8 +723,7 @@ int rxe_requester(void *arg)
723723
wqe->state = wqe_state_done;
724724
wqe->status = IB_WC_SUCCESS;
725725
__rxe_do_task(&qp->comp.task);
726-
rxe_put(qp);
727-
return 0;
726+
goto done;
728727
}
729728
payload = mtu;
730729
}
@@ -740,25 +739,29 @@ int rxe_requester(void *arg)
740739
if (unlikely(!av)) {
741740
pr_err("qp#%d Failed no address vector\n", qp_num(qp));
742741
wqe->status = IB_WC_LOC_QP_OP_ERR;
743-
goto err_drop_ah;
742+
goto err;
744743
}
745744

746745
skb = init_req_packet(qp, av, wqe, opcode, payload, &pkt);
747746
if (unlikely(!skb)) {
748747
pr_err("qp#%d Failed allocating skb\n", qp_num(qp));
749748
wqe->status = IB_WC_LOC_QP_OP_ERR;
750-
goto err_drop_ah;
749+
if (ah)
750+
rxe_put(ah);
751+
goto err;
751752
}
752753

753-
ret = finish_packet(qp, av, wqe, &pkt, skb, payload);
754-
if (unlikely(ret)) {
754+
err = finish_packet(qp, av, wqe, &pkt, skb, payload);
755+
if (unlikely(err)) {
755756
pr_debug("qp#%d Error during finish packet\n", qp_num(qp));
756-
if (ret == -EFAULT)
757+
if (err == -EFAULT)
757758
wqe->status = IB_WC_LOC_PROT_ERR;
758759
else
759760
wqe->status = IB_WC_LOC_QP_OP_ERR;
760761
kfree_skb(skb);
761-
goto err_drop_ah;
762+
if (ah)
763+
rxe_put(ah);
764+
goto err;
762765
}
763766

764767
if (ah)
@@ -773,13 +776,14 @@ int rxe_requester(void *arg)
773776
save_state(wqe, qp, &rollback_wqe, &rollback_psn);
774777
update_wqe_state(qp, wqe, &pkt);
775778
update_wqe_psn(qp, wqe, &pkt, payload);
776-
ret = rxe_xmit_packet(qp, &pkt, skb);
777-
if (ret) {
779+
780+
err = rxe_xmit_packet(qp, &pkt, skb);
781+
if (err) {
778782
qp->need_req_skb = 1;
779783

780784
rollback_state(wqe, qp, &rollback_wqe, rollback_psn);
781785

782-
if (ret == -EAGAIN) {
786+
if (err == -EAGAIN) {
783787
rxe_run_task(&qp->req.task, 1);
784788
goto exit;
785789
}
@@ -790,16 +794,20 @@ int rxe_requester(void *arg)
790794

791795
update_state(qp, &pkt);
792796

793-
goto next_wqe;
794-
795-
err_drop_ah:
796-
if (ah)
797-
rxe_put(ah);
797+
/* A non-zero return value will cause rxe_do_task to
798+
* exit its loop and end the tasklet. A zero return
799+
* will continue looping and return to rxe_requester
800+
*/
801+
done:
802+
ret = 0;
803+
goto out;
798804
err:
799805
wqe->state = wqe_state_error;
800806
__rxe_do_task(&qp->comp.task);
801-
802807
exit:
808+
ret = -EAGAIN;
809+
out:
803810
rxe_put(qp);
804-
return -EAGAIN;
811+
812+
return ret;
805813
}

drivers/infiniband/sw/rxe/rxe_resp.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,17 +1276,15 @@ int rxe_responder(void *arg)
12761276
struct rxe_dev *rxe = to_rdev(qp->ibqp.device);
12771277
enum resp_states state;
12781278
struct rxe_pkt_info *pkt = NULL;
1279-
int ret = 0;
1279+
int ret;
12801280

12811281
if (!rxe_get(qp))
12821282
return -EAGAIN;
12831283

12841284
qp->resp.aeth_syndrome = AETH_ACK_UNLIMITED;
12851285

1286-
if (!qp->valid) {
1287-
ret = -EINVAL;
1288-
goto done;
1289-
}
1286+
if (!qp->valid)
1287+
goto exit;
12901288

12911289
switch (qp->resp.state) {
12921290
case QP_STATE_RESET:
@@ -1466,9 +1464,16 @@ int rxe_responder(void *arg)
14661464
}
14671465
}
14681466

1467+
/* A non-zero return value will cause rxe_do_task to
1468+
* exit its loop and end the tasklet. A zero return
1469+
* will continue looping and return to rxe_responder
1470+
*/
1471+
done:
1472+
ret = 0;
1473+
goto out;
14691474
exit:
14701475
ret = -EAGAIN;
1471-
done:
1476+
out:
14721477
rxe_put(qp);
14731478
return ret;
14741479
}

0 commit comments

Comments
 (0)