Commit b3936d27 authored by Joe Damato's avatar Joe Damato Committed by Tony Nguyen

i40e: Aggregate and export RX page reuse stat

rx page reuse was already being tracked by the i40e driver per RX ring.
Aggregate the counts and make them accessible via ethtool.
Signed-off-by: default avatarJoe Damato <jdamato@fastly.com>
Tested-by: default avatarDave Switzer <david.switzer@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 89bb0983
...@@ -854,6 +854,7 @@ struct i40e_vsi { ...@@ -854,6 +854,7 @@ struct i40e_vsi {
u64 tx_force_wb; u64 tx_force_wb;
u64 rx_buf_failed; u64 rx_buf_failed;
u64 rx_page_failed; u64 rx_page_failed;
u64 rx_page_reuse;
/* These are containers of ring pointers, allocated at run-time */ /* These are containers of ring pointers, allocated at run-time */
struct i40e_ring **rx_rings; struct i40e_ring **rx_rings;
......
...@@ -295,6 +295,7 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = { ...@@ -295,6 +295,7 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = {
I40E_VSI_STAT("tx_busy", tx_busy), I40E_VSI_STAT("tx_busy", tx_busy),
I40E_VSI_STAT("rx_alloc_fail", rx_buf_failed), I40E_VSI_STAT("rx_alloc_fail", rx_buf_failed),
I40E_VSI_STAT("rx_pg_alloc_fail", rx_page_failed), I40E_VSI_STAT("rx_pg_alloc_fail", rx_page_failed),
I40E_VSI_STAT("rx_cache_reuse", rx_page_reuse),
}; };
/* These PF_STATs might look like duplicates of some NETDEV_STATs, /* These PF_STATs might look like duplicates of some NETDEV_STATs,
......
...@@ -774,13 +774,13 @@ void i40e_update_veb_stats(struct i40e_veb *veb) ...@@ -774,13 +774,13 @@ void i40e_update_veb_stats(struct i40e_veb *veb)
static void i40e_update_vsi_stats(struct i40e_vsi *vsi) static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
{ {
struct i40e_pf *pf = vsi->back; struct i40e_pf *pf = vsi->back;
u64 rx_page, rx_buf, rx_reuse;
struct rtnl_link_stats64 *ons; struct rtnl_link_stats64 *ons;
struct rtnl_link_stats64 *ns; /* netdev stats */ struct rtnl_link_stats64 *ns; /* netdev stats */
struct i40e_eth_stats *oes; struct i40e_eth_stats *oes;
struct i40e_eth_stats *es; /* device's eth stats */ struct i40e_eth_stats *es; /* device's eth stats */
u64 tx_restart, tx_busy; u64 tx_restart, tx_busy;
struct i40e_ring *p; struct i40e_ring *p;
u64 rx_page, rx_buf;
u64 bytes, packets; u64 bytes, packets;
unsigned int start; unsigned int start;
u64 tx_linearize; u64 tx_linearize;
...@@ -806,6 +806,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -806,6 +806,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
tx_restart = tx_busy = tx_linearize = tx_force_wb = 0; tx_restart = tx_busy = tx_linearize = tx_force_wb = 0;
rx_page = 0; rx_page = 0;
rx_buf = 0; rx_buf = 0;
rx_reuse = 0;
rcu_read_lock(); rcu_read_lock();
for (q = 0; q < vsi->num_queue_pairs; q++) { for (q = 0; q < vsi->num_queue_pairs; q++) {
/* locate Tx ring */ /* locate Tx ring */
...@@ -839,6 +840,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -839,6 +840,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
rx_p += packets; rx_p += packets;
rx_buf += p->rx_stats.alloc_buff_failed; rx_buf += p->rx_stats.alloc_buff_failed;
rx_page += p->rx_stats.alloc_page_failed; rx_page += p->rx_stats.alloc_page_failed;
rx_reuse += p->rx_stats.page_reuse_count;
if (i40e_enabled_xdp_vsi(vsi)) { if (i40e_enabled_xdp_vsi(vsi)) {
/* locate XDP ring */ /* locate XDP ring */
...@@ -866,6 +868,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -866,6 +868,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
vsi->tx_force_wb = tx_force_wb; vsi->tx_force_wb = tx_force_wb;
vsi->rx_page_failed = rx_page; vsi->rx_page_failed = rx_page;
vsi->rx_buf_failed = rx_buf; vsi->rx_buf_failed = rx_buf;
vsi->rx_page_reuse = rx_reuse;
ns->rx_packets = rx_p; ns->rx_packets = rx_p;
ns->rx_bytes = rx_b; ns->rx_bytes = rx_b;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment