From: Wei Fang <[email protected]> The VF driver uses alloc_etherdev_mq() with ENETC_MAX_NUM_TXQS as the queue count, which forces the TX and RX queue counts to be equal and uses a compile-time constant rather than the actual hardware capability.
After enetc_get_si_caps() is called, si->num_tx_rings and si->num_rx_rings reflect the actual number of rings assigned to the VF by the PF. Switch to alloc_etherdev_mqs() so that the TX and RX queue counts are set independently based on the real hardware values, avoiding unnecessary queue structure allocation when the VF has fewer rings than ENETC_MAX_NUM_TXQS. Signed-off-by: Wei Fang <[email protected]> --- drivers/net/ethernet/freescale/enetc/enetc_vf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/ethernet/freescale/enetc/enetc_vf.c index 9cdb0a4d6baf..3df515a6e333 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -317,7 +317,8 @@ static int enetc_vf_probe(struct pci_dev *pdev, enetc_get_si_caps(si); - ndev = alloc_etherdev_mq(sizeof(*priv), ENETC_MAX_NUM_TXQS); + ndev = alloc_etherdev_mqs(sizeof(*priv), si->num_tx_rings, + si->num_rx_rings); if (!ndev) { err = -ENOMEM; dev_err(&pdev->dev, "netdev creation failed\n"); -- 2.34.1
