ixgbe: use new queue try_stop/try_wake macros
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>
This commit is contained in:
parent
c91c46de6b
commit
9ded5bc77f
@ -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);
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user