|
@@ -420,9 +420,9 @@ static void i40e_get_netdev_stats_struct(struct net_device *netdev,
|
|
|
struct rtnl_link_stats64 *stats)
|
|
|
{
|
|
|
struct i40e_netdev_priv *np = netdev_priv(netdev);
|
|
|
- struct i40e_ring *tx_ring, *rx_ring;
|
|
|
struct i40e_vsi *vsi = np->vsi;
|
|
|
struct rtnl_link_stats64 *vsi_stats = i40e_get_vsi_stats_struct(vsi);
|
|
|
+ struct i40e_ring *ring;
|
|
|
int i;
|
|
|
|
|
|
if (test_bit(__I40E_VSI_DOWN, vsi->state))
|
|
@@ -436,24 +436,26 @@ static void i40e_get_netdev_stats_struct(struct net_device *netdev,
|
|
|
u64 bytes, packets;
|
|
|
unsigned int start;
|
|
|
|
|
|
- tx_ring = READ_ONCE(vsi->tx_rings[i]);
|
|
|
- if (!tx_ring)
|
|
|
+ ring = READ_ONCE(vsi->tx_rings[i]);
|
|
|
+ if (!ring)
|
|
|
continue;
|
|
|
- i40e_get_netdev_stats_struct_tx(tx_ring, stats);
|
|
|
+ i40e_get_netdev_stats_struct_tx(ring, stats);
|
|
|
|
|
|
- rx_ring = &tx_ring[1];
|
|
|
+ if (i40e_enabled_xdp_vsi(vsi)) {
|
|
|
+ ring++;
|
|
|
+ i40e_get_netdev_stats_struct_tx(ring, stats);
|
|
|
+ }
|
|
|
|
|
|
+ ring++;
|
|
|
do {
|
|
|
- start = u64_stats_fetch_begin_irq(&rx_ring->syncp);
|
|
|
- packets = rx_ring->stats.packets;
|
|
|
- bytes = rx_ring->stats.bytes;
|
|
|
- } while (u64_stats_fetch_retry_irq(&rx_ring->syncp, start));
|
|
|
+ start = u64_stats_fetch_begin_irq(&ring->syncp);
|
|
|
+ packets = ring->stats.packets;
|
|
|
+ bytes = ring->stats.bytes;
|
|
|
+ } while (u64_stats_fetch_retry_irq(&ring->syncp, start));
|
|
|
|
|
|
stats->rx_packets += packets;
|
|
|
stats->rx_bytes += bytes;
|
|
|
|
|
|
- if (i40e_enabled_xdp_vsi(vsi))
|
|
|
- i40e_get_netdev_stats_struct_tx(&rx_ring[1], stats);
|
|
|
}
|
|
|
rcu_read_unlock();
|
|
|
|