i40e: add XDP ring statistics to VSI stats
authorCiara Loftus <ciara.loftus@intel.com>
Tue, 23 Jun 2020 13:06:55 +0000 (13:06 +0000)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Wed, 1 Jul 2020 21:35:54 +0000 (14:35 -0700)
Prior to this, only Rx and Tx ring statistics were accounted for.

Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index c559b9c..dadbfb3 100644 (file)
@@ -811,6 +811,25 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
                rx_p += packets;
                rx_buf += p->rx_stats.alloc_buff_failed;
                rx_page += p->rx_stats.alloc_page_failed;
+
+               if (i40e_enabled_xdp_vsi(vsi)) {
+                       /* locate XDP ring */
+                       p = READ_ONCE(vsi->xdp_rings[q]);
+                       if (!p)
+                               continue;
+
+                       do {
+                               start = u64_stats_fetch_begin_irq(&p->syncp);
+                               packets = p->stats.packets;
+                               bytes = p->stats.bytes;
+                       } while (u64_stats_fetch_retry_irq(&p->syncp, start));
+                       tx_b += bytes;
+                       tx_p += packets;
+                       tx_restart += p->tx_stats.restart_queue;
+                       tx_busy += p->tx_stats.tx_busy;
+                       tx_linearize += p->tx_stats.tx_linearize;
+                       tx_force_wb += p->tx_stats.tx_force_wb;
+               }
        }
        rcu_read_unlock();
        vsi->tx_restart = tx_restart;