From: Wei Lin Guay Date: Tue, 13 Sep 2016 19:17:58 +0000 (+0200) Subject: sif: sqflush: set the duplicated CQ entry status as DUPL_COMPL_ERR X-Git-Tag: v4.1.12-92~67^2~34 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=5d4aac0ad533295a0e5bc0152b3aa1de15a01643;p=users%2Fjedix%2Flinux-maple.git sif: sqflush: set the duplicated CQ entry status as DUPL_COMPL_ERR Orabug: 24652927 Mark the duplicate completion status as PSIF_WC_STATUS_DUPL_COMPL_ERR if the additional/duplicate completions are detected by walk_and_update_cqes. Then, the translate_wr_id can identify the duplicate completion during sif_poll_cq. Signed-off-by: Wei Lin Guay Reviewed-by: Knut Omang --- diff --git a/drivers/infiniband/hw/sif/sif_cq.c b/drivers/infiniband/hw/sif/sif_cq.c index 04bb791f7421..d6d6ceca2de8 100644 --- a/drivers/infiniband/hw/sif/sif_cq.c +++ b/drivers/infiniband/hw/sif/sif_cq.c @@ -49,7 +49,7 @@ static inline int translate_wr_id( return -EFAULT; } if (!unlikely(wh->used)) { - if (sq_seq_num == wh->sq_seq) { + if ((sq_seq_num == wh->sq_seq) || (cqe->status == PSIF_WC_STATUS_DUPL_COMPL_ERR)) { sif_log(sdev, SIF_WCE, "dupl cqe 0x%x for cq %d: got sq_seq 0x%x, last exp.0x%x, sts %d opc 0x%x", cqe->seq_num, cq->index, sq_seq_num, wh->sq_seq, diff --git a/drivers/infiniband/hw/sif/sif_r3.c b/drivers/infiniband/hw/sif/sif_r3.c index 2d373502eee1..c3c0009fdea0 100644 --- a/drivers/infiniband/hw/sif/sif_r3.c +++ b/drivers/infiniband/hw/sif/sif_r3.c @@ -810,8 +810,13 @@ static u16 walk_and_update_cqes(struct sif_dev *sdev, struct sif_qp *qp, u16 hea if (last_seq != updated_seq) lcqe.wc_id.sq_id.sq_seq_num = updated_seq; - if (GREATER_16(updated_seq, end)) + if (GREATER_16(updated_seq, end)) { + /* Explicitly mark the CQE as duplicated completion + * when there are more CQE in the CQ. + */ lcqe.wc_id.sq_id.sq_seq_num = end; + lcqe.status = PSIF_WC_STATUS_DUPL_COMPL_ERR; + } copy_conv_to_hw(cqe, &lcqe, sizeof(lcqe));