This commit ensures that the sif_fixup_cqes for a sendCQ
can only be executed after post_process_wa4074. As the CQE
in a sendCQ cannot be trusted, walk_and_update CQ must
be performed first.
In a scenario where the post_process_wa4074 and sif_fixup_cqes
are performed concurrently, the post_process_wa4074 is given
priority where no polling of the SendCQ is allowed in
sif_fixup_cqes. Then, post_process_wa4074 will generate
the remaining FLUSH-IN ERR for a Send queue.
Signed-off-by: Wei Lin Guay <wei.lin.guay@oracle.com>
Reviewed-by: HÃ¥kon Bugge <haakon.bugge@oracle.com>
Reviewed-by: Knut Omang <knut.omang@oracle.com>
struct psif_cq_entry lcqe;
uint64_t wr_id_host_order = 0;
+ /* TBD - maybe should hide this as a function in sif_r3.c */
+ if ((test_bit(CQ_POLLING_NOT_ALLOWED, &cq_sw->flags)))
+ break;
+
cqe = get_cq_entry(cq, seqno);
polled_value = get_psif_cq_entry__seq_num(cqe);
struct sif_cq *recv_cq = rq ? get_sif_cq(sdev, cq_idx) : NULL;
if (send_cq) {
+ ret = post_process_wa4074(sdev, qp);
+ if (ret) {
+ sif_log(sdev, SIF_INFO,
+ "post_process_wa4074 failed for qp %d send cq %d with error %d",
+ qp->qp_idx, sq->cq_idx, ret);
+ goto fixup_failed;
+ }
+
nfixup = sif_fixup_cqes(send_cq, sq, qp);
if (nfixup < 0) {
sif_log(sdev, SIF_INFO,