]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/irdma: Silently consume unsignaled completions
authorJay Bhat <jay.bhat@intel.com>
Fri, 31 Oct 2025 02:17:24 +0000 (21:17 -0500)
committerLeon Romanovsky <leon@kernel.org>
Sun, 2 Nov 2025 11:52:51 +0000 (06:52 -0500)
In case we get an unsignaled error completion, we silently consume the CQE by
pretending the QP does not exist. Without this, bookkeeping for signaled
completions does not work correctly.

Signed-off-by: Jay Bhat <jay.bhat@intel.com>
Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com>
Link: https://patch.msgid.link/20251031021726.1003-5-tatyana.e.nikolova@intel.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/irdma/uk.c
drivers/infiniband/hw/irdma/user.h

index ce1ae10c30fcadee179accf3717e5924ae9f0334..b3c6cbde797c36cea5d81bdbb994c3d09e94c33c 100644 (file)
@@ -194,6 +194,7 @@ __le64 *irdma_qp_get_next_send_wqe(struct irdma_qp_uk *qp, u32 *wqe_idx,
        qp->sq_wrtrk_array[*wqe_idx].wrid = info->wr_id;
        qp->sq_wrtrk_array[*wqe_idx].wr_len = total_size;
        qp->sq_wrtrk_array[*wqe_idx].quanta = quanta;
+       qp->sq_wrtrk_array[*wqe_idx].signaled = info->signaled;
 
        return wqe;
 }
@@ -1355,6 +1356,10 @@ int irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq,
                        info->wr_id = qp->sq_wrtrk_array[wqe_idx].wrid;
                        if (!info->comp_status)
                                info->bytes_xfered = qp->sq_wrtrk_array[wqe_idx].wr_len;
+                       if (!qp->sq_wrtrk_array[wqe_idx].signaled) {
+                               ret_code = -EFAULT;
+                               goto exit;
+                       }
                        info->op_type = (u8)FIELD_GET(IRDMACQ_OP, qword3);
                        IRDMA_RING_SET_TAIL(qp->sq_ring,
                                            wqe_idx + qp->sq_wrtrk_array[wqe_idx].quanta);
index ab57f689827a024fbbde40b3487809baa60a8b8f..ee02c67ad313e5bd1d119d51e99e4171f32f35a1 100644 (file)
@@ -482,7 +482,8 @@ struct irdma_sq_uk_wr_trk_info {
        u64 wrid;
        u32 wr_len;
        u16 quanta;
-       u8 reserved[2];
+       u8 signaled;
+       u8 reserved[1];
 };
 
 struct irdma_qp_quanta {