]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sif: WA#3714: Set flush_retry_qp transport timer to infinite
authorTriviño <francisco.trivino@oracle.com>
Thu, 30 Jun 2016 08:49:47 +0000 (10:49 +0200)
committerKnut Omang <knut.omang@oracle.com>
Sun, 3 Jul 2016 14:44:14 +0000 (16:44 +0200)
The flush_retry_qp is configured with a minimum timeout of 6 value
262.144 usec), in combination with bug#4146 (duplicate send requests
not Acked if target RQ is empty) seems to be the reason because
driver is running into some timeouts after applying WA#3714 (waiting
for the completion of the zero post send).

This commit set the flush_retry_qp transport timer to infinite (0 value)

Signed-off-by: Triviño <francisco.trivino@oracle.com>
Reviewed-by: Knut Omang <knut.omang@oracle.com>
drivers/infiniband/hw/sif/sif_r3.c

index 0a2d05e08c1b560aa39c517483ac596e19eb5e25..9ac7fa7a83572322ec54c75f3dbc6d887ccedc55 100644 (file)
@@ -273,7 +273,7 @@ static int sif_hw_allocate_flush_qp(struct sif_dev *sdev, u8 flush_idx)
        memset(&qp_attr, 0, sizeof(qp_attr));
        qp_attr.qp_state = IB_QPS_RTS;
        qp_attr.sq_psn = 0;
-       qp_attr.timeout = 6;
+       qp_attr.timeout = 0;
        qp_attr.retry_cnt = 7;
        qp_attr.rnr_retry = 7;
        qp_attr.max_rd_atomic = 1;
@@ -446,6 +446,11 @@ int reset_qp_flush_retry(struct sif_dev *sdev, u8 flush_idx)
                        for (sts = 0; sts < count; sts++)
                                sif_log(sdev, SIF_INFO, "wr_id %lld status %d opcode %d",
                                        wcs[sts].wr_id, wcs[sts].status, wcs[sts].opcode);
+                       ret = epsc_query_qp(qp, &lqqp);
+                       if (ret)
+                               sif_log(sdev, SIF_INFO, "epsc_query_qp failed with status %d", ret);
+
+                       sif_logs(SIF_INFO, write_struct_psif_query_qp(NULL, 0, &lqqp));
                        goto fail;
                }
        }