ionic: Honor sq_sig_all for signaled completions
The sq_sig_all attribute from QP creation was not being propagated
to the provider QP, so work requests were only signaled when
IBV_SEND_SIGNALED was explicitly set. Store sq_sig_all in the QP
and check it in the send path to generate completions for all
send work requests when requested.
Fixes: 6d82ac7bac3b ("ionic: Add ionic provider")
Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
diff --git a/providers/ionic/ionic.h b/providers/ionic/ionic.h
index d618645..a51d790 100644
--- a/providers/ionic/ionic.h
+++ b/providers/ionic/ionic.h
@@ -201,6 +201,7 @@
struct ionic_sq sq;
struct ionic_rq rq;
+ bool sig_all;
};
struct ionic_ah {
diff --git a/providers/ionic/ionic_verbs.c b/providers/ionic/ionic_verbs.c
index 4817230..6452894 100644
--- a/providers/ionic/ionic_verbs.c
+++ b/providers/ionic/ionic_verbs.c
@@ -1693,6 +1693,7 @@
qp->has_sq = true;
qp->has_rq = true;
qp->lockfree = false;
+ qp->sig_all = ex->sq_sig_all;
list_node_init(&qp->cq_poll_sq);
list_node_init(&qp->cq_poll_rq);
@@ -2111,7 +2112,7 @@
if (wr->send_flags & IBV_SEND_SOLICITED)
wqe->base.flags |= htobe16(IONIC_V1_FLAG_SOL);
- if (wr->send_flags & IBV_SEND_SIGNALED) {
+ if (qp->sig_all || (wr->send_flags & IBV_SEND_SIGNALED)) {
wqe->base.flags |= htobe16(IONIC_V1_FLAG_SIG);
meta->signal = true;
}