Commit 7812fddc authored by Shannon Nelson's avatar Shannon Nelson Committed by Jeff Kirsher

i40e: refactor stats collection

Pull the PF stat collection out of the VSI collection routine, and
add a unifying stats update routine to call the various stat collection
routines.

Change-ID: I224192455bb3a6e5dc0a426935e67dffc123e306
Signed-off-by: default avatarShannon Nelson <shannon.nelson@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 44033fac
...@@ -720,19 +720,18 @@ static void i40e_update_prio_xoff_rx(struct i40e_pf *pf) ...@@ -720,19 +720,18 @@ static void i40e_update_prio_xoff_rx(struct i40e_pf *pf)
} }
/** /**
* i40e_update_stats - Update the board statistics counters. * i40e_update_vsi_stats - Update the vsi statistics counters.
* @vsi: the VSI to be updated * @vsi: the VSI to be updated
* *
* There are a few instances where we store the same stat in a * There are a few instances where we store the same stat in a
* couple of different structs. This is partly because we have * couple of different structs. This is partly because we have
* the netdev stats that need to be filled out, which is slightly * the netdev stats that need to be filled out, which is slightly
* different from the "eth_stats" defined by the chip and used in * different from the "eth_stats" defined by the chip and used in
* VF communications. We sort it all out here in a central place. * VF communications. We sort it out here.
**/ **/
void i40e_update_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;
struct i40e_hw *hw = &pf->hw;
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;
...@@ -741,8 +740,6 @@ void i40e_update_stats(struct i40e_vsi *vsi) ...@@ -741,8 +740,6 @@ void i40e_update_stats(struct i40e_vsi *vsi)
u32 rx_page, rx_buf; u32 rx_page, rx_buf;
u64 rx_p, rx_b; u64 rx_p, rx_b;
u64 tx_p, tx_b; u64 tx_p, tx_b;
u32 val;
int i;
u16 q; u16 q;
if (test_bit(__I40E_DOWN, &vsi->state) || if (test_bit(__I40E_DOWN, &vsi->state) ||
...@@ -804,8 +801,8 @@ void i40e_update_stats(struct i40e_vsi *vsi) ...@@ -804,8 +801,8 @@ void i40e_update_stats(struct i40e_vsi *vsi)
ns->tx_packets = tx_p; ns->tx_packets = tx_p;
ns->tx_bytes = tx_b; ns->tx_bytes = tx_b;
i40e_update_eth_stats(vsi);
/* update netdev stats from eth stats */ /* update netdev stats from eth stats */
i40e_update_eth_stats(vsi);
ons->rx_errors = oes->rx_errors; ons->rx_errors = oes->rx_errors;
ns->rx_errors = es->rx_errors; ns->rx_errors = es->rx_errors;
ons->tx_errors = oes->tx_errors; ons->tx_errors = oes->tx_errors;
...@@ -815,10 +812,25 @@ void i40e_update_stats(struct i40e_vsi *vsi) ...@@ -815,10 +812,25 @@ void i40e_update_stats(struct i40e_vsi *vsi)
ons->tx_dropped = oes->tx_discards; ons->tx_dropped = oes->tx_discards;
ns->tx_dropped = es->tx_discards; ns->tx_dropped = es->tx_discards;
/* Get the port data only if this is the main PF VSI */ /* pull in a couple PF stats if this is the main vsi */
if (vsi == pf->vsi[pf->lan_vsi]) { if (vsi == pf->vsi[pf->lan_vsi]) {
struct i40e_hw_port_stats *nsd = &pf->stats; ns->rx_crc_errors = pf->stats.crc_errors;
ns->rx_errors = pf->stats.crc_errors + pf->stats.illegal_bytes;
ns->rx_length_errors = pf->stats.rx_length_errors;
}
}
/**
* i40e_update_pf_stats - Update the pf statistics counters.
* @pf: the PF to be updated
**/
static void i40e_update_pf_stats(struct i40e_pf *pf)
{
struct i40e_hw_port_stats *osd = &pf->stats_offsets; struct i40e_hw_port_stats *osd = &pf->stats_offsets;
struct i40e_hw_port_stats *nsd = &pf->stats;
struct i40e_hw *hw = &pf->hw;
u32 val;
int i;
i40e_stat_update48(hw, I40E_GLPRT_GORCH(hw->port), i40e_stat_update48(hw, I40E_GLPRT_GORCH(hw->port),
I40E_GLPRT_GORCL(hw->port), I40E_GLPRT_GORCL(hw->port),
...@@ -850,13 +862,10 @@ void i40e_update_stats(struct i40e_vsi *vsi) ...@@ -850,13 +862,10 @@ void i40e_update_stats(struct i40e_vsi *vsi)
i40e_stat_update32(hw, I40E_GLPRT_CRCERRS(hw->port), i40e_stat_update32(hw, I40E_GLPRT_CRCERRS(hw->port),
pf->stat_offsets_loaded, pf->stat_offsets_loaded,
&osd->crc_errors, &nsd->crc_errors); &osd->crc_errors, &nsd->crc_errors);
ns->rx_crc_errors = nsd->crc_errors;
i40e_stat_update32(hw, I40E_GLPRT_ILLERRC(hw->port), i40e_stat_update32(hw, I40E_GLPRT_ILLERRC(hw->port),
pf->stat_offsets_loaded, pf->stat_offsets_loaded,
&osd->illegal_bytes, &nsd->illegal_bytes); &osd->illegal_bytes, &nsd->illegal_bytes);
ns->rx_errors = nsd->crc_errors
+ nsd->illegal_bytes;
i40e_stat_update32(hw, I40E_GLPRT_MLFC(hw->port), i40e_stat_update32(hw, I40E_GLPRT_MLFC(hw->port),
pf->stat_offsets_loaded, pf->stat_offsets_loaded,
...@@ -871,7 +880,6 @@ void i40e_update_stats(struct i40e_vsi *vsi) ...@@ -871,7 +880,6 @@ void i40e_update_stats(struct i40e_vsi *vsi)
pf->stat_offsets_loaded, pf->stat_offsets_loaded,
&osd->rx_length_errors, &osd->rx_length_errors,
&nsd->rx_length_errors); &nsd->rx_length_errors);
ns->rx_length_errors = nsd->rx_length_errors;
i40e_stat_update32(hw, I40E_GLPRT_LXONRXC(hw->port), i40e_stat_update32(hw, I40E_GLPRT_LXONRXC(hw->port),
pf->stat_offsets_loaded, pf->stat_offsets_loaded,
...@@ -988,11 +996,26 @@ void i40e_update_stats(struct i40e_vsi *vsi) ...@@ -988,11 +996,26 @@ void i40e_update_stats(struct i40e_vsi *vsi)
i40e_stat_update32(hw, I40E_PRTPM_RLPIC, i40e_stat_update32(hw, I40E_PRTPM_RLPIC,
pf->stat_offsets_loaded, pf->stat_offsets_loaded,
&osd->rx_lpi_count, &nsd->rx_lpi_count); &osd->rx_lpi_count, &nsd->rx_lpi_count);
}
pf->stat_offsets_loaded = true; pf->stat_offsets_loaded = true;
} }
/**
* i40e_update_stats - Update the various statistics counters.
* @vsi: the VSI to be updated
*
* Update the various stats for this VSI and its related entities.
**/
void i40e_update_stats(struct i40e_vsi *vsi)
{
struct i40e_pf *pf = vsi->back;
if (vsi == pf->vsi[pf->lan_vsi])
i40e_update_pf_stats(pf);
i40e_update_vsi_stats(vsi);
}
/** /**
* i40e_find_filter - Search VSI filter list for specific mac/vlan filter * i40e_find_filter - Search VSI filter list for specific mac/vlan filter
* @vsi: the VSI to be searched * @vsi: the VSI to be searched
......
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