On 12/13/2016 08:44 AM, Leon Romanovsky wrote:
On Tue, Dec 13, 2016 at 08:03:03AM +0100, Bart Van Assche wrote:
On 11/16/2016 09:39 AM, Leon Romanovsky wrote:
@@ -745,13 +746,17 @@ int rxe_requester(void *arg)
wqe->status = IB_WC_LOC_PROT_ERR;
wqe->state = wqe_state_error;
-complete:
- if (qp_type(qp) != IB_QPT_RC) {
- while (rxe_completer(qp) == 0)
- ;
- }
-
- return 0;
+ /*
+ * IBA Spec. Section 10.7.3.1 SIGNALED COMPLETIONS
+ * ---------8<---------8<-------------
+ * ...Note that if a completion error occurs, a Work Completion
+ * will always be generated, even if the signaling
+ * indicator requests an Unsignaled Completion.
+ * ---------8<---------8<-------------
+ */
+ wqe->wr.send_flags |= IB_SEND_SIGNALED;
+ __rxe_do_task(&qp->comp.task);
+ return -EAGAIN;
Hello Leon and Yonatan,
Sorry for the late reply but I think setting IB_SEND_SIGNALED for WQE's
reporting a completion error is wrong.
I'm not clear about it. I didn't find in spec what to do with IB_SEND_SIGNALED
flag in case of error.
According to spec:
"C10-91: The CI shall generate a CQE when a Work Request
completed under any of the following conditions:
• The Work Request completed in error"
Hello Leon,
To me that paragraph from the spec means that do_complete() is wrong.
And once do_complete() is fixed, callers that set the WQE status to
"error" no longer have to set IB_SEND_SIGNALED.
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html