OSDN Git Service

alx: enable multiple tx queues
authorTobias Regnery <tobias.regnery@gmail.com>
Tue, 15 Nov 2016 11:43:16 +0000 (12:43 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Nov 2016 03:46:30 +0000 (22:46 -0500)
Enable multiple tx queues by default based on the number of online cpus. The
hardware supports up to four tx queues.

Based on the downstream driver at github.com/qca/alx

Signed-off-by: Tobias Regnery <tobias.regnery@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/atheros/alx/main.c

index 91c9149..c8f5255 100644 (file)
@@ -834,7 +834,7 @@ static bool alx_enable_msix(struct alx_priv *alx)
 {
        int i, err, num_vec, num_txq, num_rxq;
 
-       num_txq = 1;
+       num_txq = min_t(int, num_online_cpus(), ALX_MAX_TX_QUEUES);
        num_rxq = 1;
        num_vec = max_t(int, num_txq, num_rxq) + 1;
 
@@ -1241,6 +1241,9 @@ static int __alx_open(struct alx_priv *alx, bool resume)
        if (err)
                goto out_free_rings;
 
+       netif_set_real_num_tx_queues(alx->dev, alx->num_txq);
+       netif_set_real_num_rx_queues(alx->dev, alx->num_rxq);
+
        /* clear old interrupts */
        alx_write_mem32(&alx->hw, ALX_ISR, ~(u32)ALX_ISR_DIS);
 
@@ -1749,7 +1752,8 @@ static int alx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                goto out_pci_release;
        }
 
-       netdev = alloc_etherdev(sizeof(*alx));
+       netdev = alloc_etherdev_mqs(sizeof(*alx),
+                                   ALX_MAX_TX_QUEUES, 1);
        if (!netdev) {
                err = -ENOMEM;
                goto out_pci_release;