ice: Add stats for Rx drops at the port level
authorBrett Creeley <brett.creeley@intel.com>
Wed, 26 Jun 2019 09:20:22 +0000 (02:20 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 31 Jul 2019 20:40:46 +0000 (13:40 -0700)
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: Brett Creeley <brett.creeley@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ice/ice_hw_autogen.h
drivers/net/ethernet/intel/ice/ice_main.c

index 3250dfc00002f411692bb69dd2b7bbd0c0a976a3..87652d722a30b26e2269edc7f851ca5784e2a6b2 100644 (file)
 #define VSIQF_HLUT_MAX_INDEX                   15
 #define VFINT_DYN_CTLN(_i)                     (0x00003800 + ((_i) * 4))
 #define VFINT_DYN_CTLN_CLEARPBA_M              BIT(1)
+#define PRTRPB_RDPC                            0x000AC260
 
 #endif /* _ICE_HW_AUTOGEN_H_ */
index d13f568036584f8bf31bd06ecbb525411114bec8..e4be9aa793370b9248ccc737bc2ca04eac3d6dfe 100644 (file)
@@ -3297,6 +3297,8 @@ static void ice_update_vsi_stats(struct ice_vsi *vsi)
                cur_ns->rx_errors = pf->stats.crc_errors +
                                    pf->stats.illegal_bytes;
                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)
                          &prev_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,
                          &prev_ps->eth.tx_bytes,
                          &cur_ps->eth.tx_bytes);