]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ixgbe: use new queue try_stop/try_wake macros
authorJakub Kicinski <kuba@kernel.org>
Fri, 7 Apr 2023 01:25:34 +0000 (18:25 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 11 Apr 2023 00:56:18 +0000 (17:56 -0700)
Convert ixgbe to use the new macros, I think a lot of people
copy the ixgbe code. The only functional change is that the
unlikely() in ixgbe_clean_tx_irq() turns into a likely()
inside the new macro and no longer includes

  total_packets && netif_carrier_ok(tx_ring->netdev)

which is probably for the best, anyway.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index 773c35fecacefb76aa5ae0fc05b470439b2172c2..cbbddee55db11451f2b913c3947edaee8c6778aa 100644 (file)
@@ -36,6 +36,7 @@
 #include <net/tc_act/tc_mirred.h>
 #include <net/vxlan.h>
 #include <net/mpls.h>
+#include <net/netdev_queues.h>
 #include <net/xdp_sock_drv.h>
 #include <net/xfrm.h>
 
@@ -1119,6 +1120,7 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
        unsigned int total_bytes = 0, total_packets = 0, total_ipsec = 0;
        unsigned int budget = q_vector->tx.work_limit;
        unsigned int i = tx_ring->next_to_clean;
+       struct netdev_queue *txq;
 
        if (test_bit(__IXGBE_DOWN, &adapter->state))
                return true;
@@ -1253,20 +1255,12 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
                                  total_packets, total_bytes);
 
 #define TX_WAKE_THRESHOLD (DESC_NEEDED * 2)
-       if (unlikely(total_packets && netif_carrier_ok(tx_ring->netdev) &&
-                    (ixgbe_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD))) {
-               /* Make sure that anybody stopping the queue after this
-                * sees the new next_to_clean.
-                */
-               smp_mb();
-               if (__netif_subqueue_stopped(tx_ring->netdev,
-                                            tx_ring->queue_index)
-                   && !test_bit(__IXGBE_DOWN, &adapter->state)) {
-                       netif_wake_subqueue(tx_ring->netdev,
-                                           tx_ring->queue_index);
-                       ++tx_ring->tx_stats.restart_queue;
-               }
-       }
+       txq = netdev_get_tx_queue(tx_ring->netdev, tx_ring->queue_index);
+       if (total_packets && netif_carrier_ok(tx_ring->netdev) &&
+           !__netif_txq_maybe_wake(txq, ixgbe_desc_unused(tx_ring),
+                                   TX_WAKE_THRESHOLD,
+                                   test_bit(__IXGBE_DOWN, &adapter->state)))
+               ++tx_ring->tx_stats.restart_queue;
 
        return !!budget;
 }
@@ -8270,22 +8264,10 @@ static void ixgbe_tx_olinfo_status(union ixgbe_adv_tx_desc *tx_desc,
 
 static int __ixgbe_maybe_stop_tx(struct ixgbe_ring *tx_ring, u16 size)
 {
-       netif_stop_subqueue(tx_ring->netdev, tx_ring->queue_index);
-
-       /* Herbert's original patch had:
-        *  smp_mb__after_netif_stop_queue();
-        * but since that doesn't exist yet, just open code it.
-        */
-       smp_mb();
-
-       /* We need to check again in a case another CPU has just
-        * made room available.
-        */
-       if (likely(ixgbe_desc_unused(tx_ring) < size))
+       if (!netif_subqueue_try_stop(tx_ring->netdev, tx_ring->queue_index,
+                                    ixgbe_desc_unused(tx_ring), size))
                return -EBUSY;
 
-       /* A reprieve! - use start_queue because it doesn't call schedule */
-       netif_start_subqueue(tx_ring->netdev, tx_ring->queue_index);
        ++tx_ring->tx_stats.restart_queue;
        return 0;
 }