Commit 56923ab6 authored by Brett Creeley's avatar Brett Creeley Committed by Jeff Kirsher

ice: Add stats for Rx drops at the port level

Currently we are not reporting dropped counts at the port level to
ethtool or netlink. This was found when debugging Rx dropped issues
and the total packets sent did not equal the total packets received
minus the rx_dropped, which was very confusing. To determine dropped
counts at the port level we need to read the PRTRPB_RDPC register.
To fix reporting we will store the dropped counts in the PF's
rx_discards. This will be reported to netlink by storing it in the
PF VSI's rx_missed_errors signaling that the receiver missed the
packet. Also, we will report this to ethtool in the rx_dropped.nic
field.
Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 66b29e7a
...@@ -337,5 +337,6 @@ ...@@ -337,5 +337,6 @@
#define VSIQF_HLUT_MAX_INDEX 15 #define VSIQF_HLUT_MAX_INDEX 15
#define VFINT_DYN_CTLN(_i) (0x00003800 + ((_i) * 4)) #define VFINT_DYN_CTLN(_i) (0x00003800 + ((_i) * 4))
#define VFINT_DYN_CTLN_CLEARPBA_M BIT(1) #define VFINT_DYN_CTLN_CLEARPBA_M BIT(1)
#define PRTRPB_RDPC 0x000AC260
#endif /* _ICE_HW_AUTOGEN_H_ */ #endif /* _ICE_HW_AUTOGEN_H_ */
...@@ -3297,6 +3297,8 @@ static void ice_update_vsi_stats(struct ice_vsi *vsi) ...@@ -3297,6 +3297,8 @@ static void ice_update_vsi_stats(struct ice_vsi *vsi)
cur_ns->rx_errors = pf->stats.crc_errors + cur_ns->rx_errors = pf->stats.crc_errors +
pf->stats.illegal_bytes; pf->stats.illegal_bytes;
cur_ns->rx_length_errors = pf->stats.rx_len_errors; cur_ns->rx_length_errors = pf->stats.rx_len_errors;
/* record drops from the port level */
cur_ns->rx_missed_errors = pf->stats.eth.rx_discards;
} }
} }
...@@ -3330,6 +3332,10 @@ static void ice_update_pf_stats(struct ice_pf *pf) ...@@ -3330,6 +3332,10 @@ static void ice_update_pf_stats(struct ice_pf *pf)
&prev_ps->eth.rx_broadcast, &prev_ps->eth.rx_broadcast,
&cur_ps->eth.rx_broadcast); &cur_ps->eth.rx_broadcast);
ice_stat_update32(hw, PRTRPB_RDPC, pf->stat_prev_loaded,
&prev_ps->eth.rx_discards,
&cur_ps->eth.rx_discards);
ice_stat_update40(hw, GLPRT_GOTCL(pf_id), pf->stat_prev_loaded, ice_stat_update40(hw, GLPRT_GOTCL(pf_id), pf->stat_prev_loaded,
&prev_ps->eth.tx_bytes, &prev_ps->eth.tx_bytes,
&cur_ps->eth.tx_bytes); &cur_ps->eth.tx_bytes);
......
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