Message ID | 1483353661.3592.32.camel@sandisk.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
On 1/2/17, 5:42 AM, "Bart Van Assche" <Bart.VanAssche@sandisk.com> wrote: >This change makes the code easier to read and avoids that code is >duplicated. > >Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> >Cc: Moni Shoua <monis@mellanox.com> >Cc: Andrew Boyer <andrew.boyer@dell.com> >--- > drivers/infiniband/sw/rxe/rxe_comp.c | 63 >+++++++++++++----------------------- > drivers/infiniband/sw/rxe/rxe_resp.c | 28 ++++++++-------- > 2 files changed, 38 insertions(+), 53 deletions(-) > >diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c >b/drivers/infiniband/sw/rxe/rxe_comp.c >index e912e5396e8c..6769a075501e 100644 >--- a/drivers/infiniband/sw/rxe/rxe_comp.c >+++ b/drivers/infiniband/sw/rxe/rxe_comp.c >@@ -503,57 +503,40 @@ static inline enum comp_state complete_wqe(struct >rxe_qp *qp, > return COMPST_GET_WQE; > } > >-int rxe_completer(void *arg) >+static void rxe_drain_resp_pkts(struct rxe_qp *qp, bool notify) > { >- struct rxe_qp *qp = (struct rxe_qp *)arg; >- struct rxe_send_wqe *wqe = wqe; >- struct sk_buff *skb = NULL; >- struct rxe_pkt_info *pkt = NULL; >- enum comp_state state; >- >- rxe_add_ref(qp); >- >- if (!qp->valid) { >- while ((skb = skb_dequeue(&qp->resp_pkts))) { >- rxe_drop_ref(qp); >- kfree_skb(skb); >- } >- skb = NULL; >- pkt = NULL; >- >- while (queue_head(qp->sq.queue)) >- advance_consumer(qp->sq.queue); >+ struct sk_buff *skb; >+ struct rxe_send_wqe *wqe; > >- goto exit; >+ while ((skb = skb_dequeue(&qp->resp_pkts))) { >+ rxe_drop_ref(qp); >+ kfree_skb(skb); > } > >- if (qp->req.state == QP_STATE_ERROR) { >- while ((skb = skb_dequeue(&qp->resp_pkts))) { >- rxe_drop_ref(qp); >- kfree_skb(skb); >- } >- skb = NULL; >- pkt = NULL; >- >- while ((wqe = queue_head(qp->sq.queue))) { >+ while ((wqe = queue_head(qp->sq.queue))) { >+ if (notify) { > wqe->status = IB_WC_WR_FLUSH_ERR; > do_complete(qp, wqe); >+ } else { >+ advance_consumer(qp->sq.queue); > } >- >- goto exit; > } >+} > >- if (qp->req.state == QP_STATE_RESET) { >- while ((skb = skb_dequeue(&qp->resp_pkts))) { >- rxe_drop_ref(qp); >- kfree_skb(skb); >- } >- skb = NULL; >- pkt = NULL; >+int rxe_completer(void *arg) >+{ >+ struct rxe_qp *qp = (struct rxe_qp *)arg; >+ struct rxe_send_wqe *wqe = wqe; >+ struct sk_buff *skb = NULL; >+ struct rxe_pkt_info *pkt = NULL; >+ enum comp_state state; > >- while (queue_head(qp->sq.queue)) >- advance_consumer(qp->sq.queue); >+ rxe_add_ref(qp); > >+ if (!qp->valid || qp->req.state == QP_STATE_ERROR || >+ qp->req.state == QP_STATE_RESET) { >+ rxe_drain_resp_pkts(qp, qp->valid && >+ qp->req.state == QP_STATE_ERROR); > goto exit; > } > >diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c >b/drivers/infiniband/sw/rxe/rxe_resp.c >index 6dbd069689fc..25951e9413b8 100644 >--- a/drivers/infiniband/sw/rxe/rxe_resp.c >+++ b/drivers/infiniband/sw/rxe/rxe_resp.c >@@ -1207,6 +1207,19 @@ static enum resp_states do_class_d1e_error(struct >rxe_qp *qp) > } > } > >+static void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify) Is notify unused? Is it here just for symmetry with the responder? >+{ >+ struct sk_buff *skb; >+ >+ while ((skb = skb_dequeue(&qp->req_pkts))) { >+ rxe_drop_ref(qp); >+ kfree_skb(skb); >+ } >+ >+ while (!qp->srq && qp->rq.queue && queue_head(qp->rq.queue)) >+ advance_consumer(qp->rq.queue); >+} >+ > int rxe_responder(void *arg) > { > struct rxe_qp *qp = (struct rxe_qp *)arg; >@@ -1374,21 +1387,10 @@ int rxe_responder(void *arg) > > goto exit; > >- case RESPST_RESET: { >- struct sk_buff *skb; >- >- while ((skb = skb_dequeue(&qp->req_pkts))) { >- rxe_drop_ref(qp); >- kfree_skb(skb); >- } >- >- while (!qp->srq && qp->rq.queue && >- queue_head(qp->rq.queue)) >- advance_consumer(qp->rq.queue); >- >+ case RESPST_RESET: >+ rxe_drain_req_pkts(qp, false); > qp->resp.wqe = NULL; > goto exit; >- } > > case RESPST_ERROR: > qp->resp.goto_error = 0; >-- >2.11.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 1/9/17, 10:06 AM, "linux-rdma-owner@vger.kernel.org on behalf of Boyer, Andrew" <linux-rdma-owner@vger.kernel.org on behalf of Andrew.Boyer@dell.com> wrote: >On 1/2/17, 5:42 AM, "Bart Van Assche" <Bart.VanAssche@sandisk.com> wrote: > >>This change makes the code easier to read and avoids that code is >>duplicated. >> >>Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> >>Cc: Moni Shoua <monis@mellanox.com> >>Cc: Andrew Boyer <andrew.boyer@dell.com> >>--- >> drivers/infiniband/sw/rxe/rxe_comp.c | 63 >>+++++++++++++----------------------- >> drivers/infiniband/sw/rxe/rxe_resp.c | 28 ++++++++-------- >> 2 files changed, 38 insertions(+), 53 deletions(-) ... >> >> } >> >>+static void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify) > >Is notify unused? Is it here just for symmetry with the responder? Never mind, I see it used in patch 11. Reviewed-by: Andrew Boyer <andrew.boyer@dell.com> -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/rxe/rxe_comp.c index e912e5396e8c..6769a075501e 100644 --- a/drivers/infiniband/sw/rxe/rxe_comp.c +++ b/drivers/infiniband/sw/rxe/rxe_comp.c @@ -503,57 +503,40 @@ static inline enum comp_state complete_wqe(struct rxe_qp *qp, return COMPST_GET_WQE; } -int rxe_completer(void *arg) +static void rxe_drain_resp_pkts(struct rxe_qp *qp, bool notify) { - struct rxe_qp *qp = (struct rxe_qp *)arg; - struct rxe_send_wqe *wqe = wqe; - struct sk_buff *skb = NULL; - struct rxe_pkt_info *pkt = NULL; - enum comp_state state; - - rxe_add_ref(qp); - - if (!qp->valid) { - while ((skb = skb_dequeue(&qp->resp_pkts))) { - rxe_drop_ref(qp); - kfree_skb(skb); - } - skb = NULL; - pkt = NULL; - - while (queue_head(qp->sq.queue)) - advance_consumer(qp->sq.queue); + struct sk_buff *skb; + struct rxe_send_wqe *wqe; - goto exit; + while ((skb = skb_dequeue(&qp->resp_pkts))) { + rxe_drop_ref(qp); + kfree_skb(skb); } - if (qp->req.state == QP_STATE_ERROR) { - while ((skb = skb_dequeue(&qp->resp_pkts))) { - rxe_drop_ref(qp); - kfree_skb(skb); - } - skb = NULL; - pkt = NULL; - - while ((wqe = queue_head(qp->sq.queue))) { + while ((wqe = queue_head(qp->sq.queue))) { + if (notify) { wqe->status = IB_WC_WR_FLUSH_ERR; do_complete(qp, wqe); + } else { + advance_consumer(qp->sq.queue); } - - goto exit; } +} - if (qp->req.state == QP_STATE_RESET) { - while ((skb = skb_dequeue(&qp->resp_pkts))) { - rxe_drop_ref(qp); - kfree_skb(skb); - } - skb = NULL; - pkt = NULL; +int rxe_completer(void *arg) +{ + struct rxe_qp *qp = (struct rxe_qp *)arg; + struct rxe_send_wqe *wqe = wqe; + struct sk_buff *skb = NULL; + struct rxe_pkt_info *pkt = NULL; + enum comp_state state; - while (queue_head(qp->sq.queue)) - advance_consumer(qp->sq.queue); + rxe_add_ref(qp); + if (!qp->valid || qp->req.state == QP_STATE_ERROR || + qp->req.state == QP_STATE_RESET) { + rxe_drain_resp_pkts(qp, qp->valid && + qp->req.state == QP_STATE_ERROR); goto exit; } diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index 6dbd069689fc..25951e9413b8 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -1207,6 +1207,19 @@ static enum resp_states do_class_d1e_error(struct rxe_qp *qp) } } +static void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify) +{ + struct sk_buff *skb; + + while ((skb = skb_dequeue(&qp->req_pkts))) { + rxe_drop_ref(qp); + kfree_skb(skb); + } + + while (!qp->srq && qp->rq.queue && queue_head(qp->rq.queue)) + advance_consumer(qp->rq.queue); +} + int rxe_responder(void *arg) { struct rxe_qp *qp = (struct rxe_qp *)arg; @@ -1374,21 +1387,10 @@ int rxe_responder(void *arg) goto exit; - case RESPST_RESET: { - struct sk_buff *skb; - - while ((skb = skb_dequeue(&qp->req_pkts))) { - rxe_drop_ref(qp); - kfree_skb(skb); - } - - while (!qp->srq && qp->rq.queue && - queue_head(qp->rq.queue)) - advance_consumer(qp->rq.queue); - + case RESPST_RESET: + rxe_drain_req_pkts(qp, false); qp->resp.wqe = NULL; goto exit; - } case RESPST_ERROR: qp->resp.goto_error = 0;
This change makes the code easier to read and avoids that code is duplicated. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Moni Shoua <monis@mellanox.com> Cc: Andrew Boyer <andrew.boyer@dell.com> --- drivers/infiniband/sw/rxe/rxe_comp.c | 63 +++++++++++++----------------------- drivers/infiniband/sw/rxe/rxe_resp.c | 28 ++++++++-------- 2 files changed, 38 insertions(+), 53 deletions(-) -- 2.11.0