OSDN Git Service

qed: Fix maximum number of CQs for iWARP
authorMichal Kalderon <Michal.Kalderon@cavium.com>
Sun, 24 Sep 2017 09:09:44 +0000 (12:09 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Sep 2017 18:22:03 +0000 (11:22 -0700)
The maximum number of CQs supported is bound to the number
of connections supported, which differs between RoCE and iWARP.

This fixes a crash that occurred in iWARP when running 1000 sessions
using perftest.

Fixes: 67b40dccc45 ("qed: Implement iWARP initialization, teardown and qp operations")

Signed-off-by: Michal Kalderon <Michal.Kalderon@cavium.com>
Signed-off-by: Ariel Elior <Ariel.Elior@cavium.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_rdma.c

index 4f46f28..c8c4b39 100644 (file)
@@ -209,11 +209,11 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn,
                goto free_pd_map;
        }
 
-       /* Allocate bitmap for cq's. The maximum number of CQs is bounded to
-        * twice the number of QPs.
+       /* Allocate bitmap for cq's. The maximum number of CQs is bound to
+        * the number of connections we support. (num_qps in iWARP or
+        * num_qps/2 in RoCE).
         */
-       rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cq_map,
-                                p_rdma_info->num_qps * 2, "CQ");
+       rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cq_map, num_cons, "CQ");
        if (rc) {
                DP_VERBOSE(p_hwfn, QED_MSG_RDMA,
                           "Failed to allocate cq bitmap, rc = %d\n", rc);
@@ -222,10 +222,10 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn,
 
        /* Allocate bitmap for toggle bit for cq icids
         * We toggle the bit every time we create or resize cq for a given icid.
-        * The maximum number of CQs is bounded to  twice the number of QPs.
+        * Size needs to equal the size of the cq bmap.
         */
        rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->toggle_bits,
-                                p_rdma_info->num_qps * 2, "Toggle");
+                                num_cons, "Toggle");
        if (rc) {
                DP_VERBOSE(p_hwfn, QED_MSG_RDMA,
                           "Failed to allocate toogle bits, rc = %d\n", rc);