qed: Reserve VF feature before PF
authorMintz, Yuval <Yuval.Mintz@cavium.com>
Thu, 23 Mar 2017 13:50:20 +0000 (15:50 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 Mar 2017 18:53:30 +0000 (11:53 -0700)
Align the driver feature distribution with the flow utilized
by the management firmware - first reserve L2 queues for
VFs and use all the remaining for the PF.

The current distribution might lead to PFs with an enormous
amount of queues, but at the same time leave us with insufficient
resources for starting all VFs.

Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_dev.c

index 6bdac4f916507fc0203a317ee6e29cf8ca476299..11e45f0f7779c9df15e5f1d40bd37e32c917d9a2 100644 (file)
@@ -1565,17 +1565,22 @@ static void qed_hw_set_feat(struct qed_hwfn *p_hwfn)
                non_l2_sbs = feat_num[QED_RDMA_CNQ];
        }
 
-       feat_num[QED_PF_L2_QUE] = min_t(u32,
-                                       RESC_NUM(p_hwfn, QED_SB) -
-                                       non_l2_sbs,
-                                       RESC_NUM(p_hwfn, QED_L2_QUEUE));
-
-       memset(&sb_cnt_info, 0, sizeof(sb_cnt_info));
-       qed_int_get_num_sbs(p_hwfn, &sb_cnt_info);
-       feat_num[QED_VF_L2_QUE] =
-           min_t(u32,
-                 RESC_NUM(p_hwfn, QED_L2_QUEUE) -
-                 FEAT_NUM(p_hwfn, QED_PF_L2_QUE), sb_cnt_info.sb_iov_cnt);
+       if (p_hwfn->hw_info.personality == QED_PCI_ETH_ROCE ||
+           p_hwfn->hw_info.personality == QED_PCI_ETH) {
+               /* Start by allocating VF queues, then PF's */
+               memset(&sb_cnt_info, 0, sizeof(sb_cnt_info));
+               qed_int_get_num_sbs(p_hwfn, &sb_cnt_info);
+               feat_num[QED_VF_L2_QUE] = min_t(u32,
+                                               RESC_NUM(p_hwfn, QED_L2_QUEUE),
+                                               sb_cnt_info.sb_iov_cnt);
+               feat_num[QED_PF_L2_QUE] = min_t(u32,
+                                               RESC_NUM(p_hwfn, QED_SB) -
+                                               non_l2_sbs,
+                                               RESC_NUM(p_hwfn,
+                                                        QED_L2_QUEUE) -
+                                               FEAT_NUM(p_hwfn,
+                                                        QED_VF_L2_QUE));
+       }
 
        DP_VERBOSE(p_hwfn,
                   NETIF_MSG_PROBE,