|
@@ -791,75 +791,6 @@ static void i40e_update_fcoe_stats(struct i40e_vsi *vsi)
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
-/**
|
|
|
- * i40e_update_link_xoff_rx - Update XOFF received in link flow control mode
|
|
|
- * @pf: the corresponding PF
|
|
|
- *
|
|
|
- * Update the Rx XOFF counter (PAUSE frames) in link flow control mode
|
|
|
- **/
|
|
|
-static void i40e_update_link_xoff_rx(struct i40e_pf *pf)
|
|
|
-{
|
|
|
- struct i40e_hw_port_stats *osd = &pf->stats_offsets;
|
|
|
- struct i40e_hw_port_stats *nsd = &pf->stats;
|
|
|
- struct i40e_hw *hw = &pf->hw;
|
|
|
- u64 xoff = 0;
|
|
|
-
|
|
|
- if ((hw->fc.current_mode != I40E_FC_FULL) &&
|
|
|
- (hw->fc.current_mode != I40E_FC_RX_PAUSE))
|
|
|
- return;
|
|
|
-
|
|
|
- xoff = nsd->link_xoff_rx;
|
|
|
- i40e_stat_update32(hw, I40E_GLPRT_LXOFFRXC(hw->port),
|
|
|
- pf->stat_offsets_loaded,
|
|
|
- &osd->link_xoff_rx, &nsd->link_xoff_rx);
|
|
|
-
|
|
|
- /* No new LFC xoff rx */
|
|
|
- if (!(nsd->link_xoff_rx - xoff))
|
|
|
- return;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * i40e_update_prio_xoff_rx - Update XOFF received in PFC mode
|
|
|
- * @pf: the corresponding PF
|
|
|
- *
|
|
|
- * Update the Rx XOFF counter (PAUSE frames) in PFC mode
|
|
|
- **/
|
|
|
-static void i40e_update_prio_xoff_rx(struct i40e_pf *pf)
|
|
|
-{
|
|
|
- struct i40e_hw_port_stats *osd = &pf->stats_offsets;
|
|
|
- struct i40e_hw_port_stats *nsd = &pf->stats;
|
|
|
- bool xoff[I40E_MAX_TRAFFIC_CLASS] = {false};
|
|
|
- struct i40e_dcbx_config *dcb_cfg;
|
|
|
- struct i40e_hw *hw = &pf->hw;
|
|
|
- u16 i;
|
|
|
- u8 tc;
|
|
|
-
|
|
|
- dcb_cfg = &hw->local_dcbx_config;
|
|
|
-
|
|
|
- /* Collect Link XOFF stats when PFC is disabled */
|
|
|
- if (!dcb_cfg->pfc.pfcenable) {
|
|
|
- i40e_update_link_xoff_rx(pf);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0; i < I40E_MAX_USER_PRIORITY; i++) {
|
|
|
- u64 prio_xoff = nsd->priority_xoff_rx[i];
|
|
|
-
|
|
|
- i40e_stat_update32(hw, I40E_GLPRT_PXOFFRXC(hw->port, i),
|
|
|
- pf->stat_offsets_loaded,
|
|
|
- &osd->priority_xoff_rx[i],
|
|
|
- &nsd->priority_xoff_rx[i]);
|
|
|
-
|
|
|
- /* No new PFC xoff rx */
|
|
|
- if (!(nsd->priority_xoff_rx[i] - prio_xoff))
|
|
|
- continue;
|
|
|
- /* Get the TC for given priority */
|
|
|
- tc = dcb_cfg->etscfg.prioritytable[i];
|
|
|
- xoff[tc] = true;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* i40e_update_vsi_stats - Update the vsi statistics counters.
|
|
|
* @vsi: the VSI to be updated
|
|
@@ -1054,12 +985,18 @@ static void i40e_update_pf_stats(struct i40e_pf *pf)
|
|
|
i40e_stat_update32(hw, I40E_GLPRT_LXONTXC(hw->port),
|
|
|
pf->stat_offsets_loaded,
|
|
|
&osd->link_xon_tx, &nsd->link_xon_tx);
|
|
|
- i40e_update_prio_xoff_rx(pf); /* handles I40E_GLPRT_LXOFFRXC */
|
|
|
+ i40e_stat_update32(hw, I40E_GLPRT_LXOFFRXC(hw->port),
|
|
|
+ pf->stat_offsets_loaded,
|
|
|
+ &osd->link_xoff_rx, &nsd->link_xoff_rx);
|
|
|
i40e_stat_update32(hw, I40E_GLPRT_LXOFFTXC(hw->port),
|
|
|
pf->stat_offsets_loaded,
|
|
|
&osd->link_xoff_tx, &nsd->link_xoff_tx);
|
|
|
|
|
|
for (i = 0; i < 8; i++) {
|
|
|
+ i40e_stat_update32(hw, I40E_GLPRT_PXOFFRXC(hw->port, i),
|
|
|
+ pf->stat_offsets_loaded,
|
|
|
+ &osd->priority_xoff_rx[i],
|
|
|
+ &nsd->priority_xoff_rx[i]);
|
|
|
i40e_stat_update32(hw, I40E_GLPRT_PXONRXC(hw->port, i),
|
|
|
pf->stat_offsets_loaded,
|
|
|
&osd->priority_xon_rx[i],
|