]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
gve: Map NAPI instances to queues
authorJoe Damato <jdamato@fastly.com>
Mon, 30 Sep 2024 21:07:08 +0000 (21:07 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 3 Oct 2024 23:58:26 +0000 (16:58 -0700)
Use the netdev-genl interface to map NAPI instances to queues so that
this information is accessible to user programs via netlink.

$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \
 --dump queue-get --json='{"ifindex": 2}'

[{'id': 0, 'ifindex': 2, 'napi-id': 8313, 'type': 'rx'},
 {'id': 1, 'ifindex': 2, 'napi-id': 8314, 'type': 'rx'},
 {'id': 2, 'ifindex': 2, 'napi-id': 8315, 'type': 'rx'},
 {'id': 3, 'ifindex': 2, 'napi-id': 8316, 'type': 'rx'},
 {'id': 4, 'ifindex': 2, 'napi-id': 8317, 'type': 'rx'},
[...]
 {'id': 0, 'ifindex': 2, 'napi-id': 8297, 'type': 'tx'},
 {'id': 1, 'ifindex': 2, 'napi-id': 8298, 'type': 'tx'},
 {'id': 2, 'ifindex': 2, 'napi-id': 8299, 'type': 'tx'},
 {'id': 3, 'ifindex': 2, 'napi-id': 8300, 'type': 'tx'},
 {'id': 4, 'ifindex': 2, 'napi-id': 8301, 'type': 'tx'},
[...]

Signed-off-by: Joe Damato <jdamato@fastly.com>
Reviewed-by: Praveen Kaligineedi <pkaligineedi@google.com>
Link: https://patch.msgid.link/20240930210731.1629-3-jdamato@fastly.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/google/gve/gve_main.c

index 661566db68c86018c0b46b4427d41e819db09b4f..294ddcd0bf6c690e07a1f4125764366d8aa229ed 100644 (file)
@@ -1875,6 +1875,11 @@ static void gve_turndown(struct gve_priv *priv)
 
                if (!gve_tx_was_added_to_block(priv, idx))
                        continue;
+
+               if (idx < priv->tx_cfg.num_queues)
+                       netif_queue_set_napi(priv->dev, idx,
+                                            NETDEV_QUEUE_TYPE_TX, NULL);
+
                napi_disable(&block->napi);
        }
        for (idx = 0; idx < priv->rx_cfg.num_queues; idx++) {
@@ -1883,6 +1888,9 @@ static void gve_turndown(struct gve_priv *priv)
 
                if (!gve_rx_was_added_to_block(priv, idx))
                        continue;
+
+               netif_queue_set_napi(priv->dev, idx, NETDEV_QUEUE_TYPE_RX,
+                                    NULL);
                napi_disable(&block->napi);
        }
 
@@ -1909,6 +1917,12 @@ static void gve_turnup(struct gve_priv *priv)
                        continue;
 
                napi_enable(&block->napi);
+
+               if (idx < priv->tx_cfg.num_queues)
+                       netif_queue_set_napi(priv->dev, idx,
+                                            NETDEV_QUEUE_TYPE_TX,
+                                            &block->napi);
+
                if (gve_is_gqi(priv)) {
                        iowrite32be(0, gve_irq_doorbell(priv, block));
                } else {
@@ -1931,6 +1945,9 @@ static void gve_turnup(struct gve_priv *priv)
                        continue;
 
                napi_enable(&block->napi);
+               netif_queue_set_napi(priv->dev, idx, NETDEV_QUEUE_TYPE_RX,
+                                    &block->napi);
+
                if (gve_is_gqi(priv)) {
                        iowrite32be(0, gve_irq_doorbell(priv, block));
                } else {