Selaa lähdekoodia

enic: record all bad FCS errs as frame errors

Report all bad FCS errs as frames errs.  This includes frames with bad
FCS on wire detected by MAC and frames which may be truncated due to
ingress FIFO overruns.  No longer print a driver msg on bad FCS err.

Signed-off-by: Scott Feldman <scofeldm@cisco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Scott Feldman 16 vuotta sitten
vanhempi
commit
bd9fb1a44a
2 muutettua tiedostoa jossa 4 lisäystä ja 7 poistoa
  1. 1 0
      drivers/net/enic/enic.h
  2. 3 7
      drivers/net/enic/enic_main.c

+ 1 - 0
drivers/net/enic/enic.h

@@ -97,6 +97,7 @@ struct enic {
 	____cacheline_aligned struct vnic_rq rq[1];
 	____cacheline_aligned struct vnic_rq rq[1];
 	unsigned int rq_count;
 	unsigned int rq_count;
 	int (*rq_alloc_buf)(struct vnic_rq *rq);
 	int (*rq_alloc_buf)(struct vnic_rq *rq);
+	u64 rq_bad_fcs;
 	struct napi_struct napi;
 	struct napi_struct napi;
 	struct net_lro_mgr lro_mgr;
 	struct net_lro_mgr lro_mgr;
 	struct net_lro_desc lro_desc[ENIC_LRO_MAX_DESC];
 	struct net_lro_desc lro_desc[ENIC_LRO_MAX_DESC];

+ 3 - 7
drivers/net/enic/enic_main.c

@@ -688,7 +688,7 @@ static struct net_device_stats *enic_get_stats(struct net_device *netdev)
 	net_stats->rx_bytes = stats->rx.rx_bytes_ok;
 	net_stats->rx_bytes = stats->rx.rx_bytes_ok;
 	net_stats->rx_errors = stats->rx.rx_errors;
 	net_stats->rx_errors = stats->rx.rx_errors;
 	net_stats->multicast = stats->rx.rx_multicast_frames_ok;
 	net_stats->multicast = stats->rx.rx_multicast_frames_ok;
-	net_stats->rx_crc_errors = stats->rx.rx_crc_errors;
+	net_stats->rx_crc_errors = enic->rq_bad_fcs;
 	net_stats->rx_dropped = stats->rx.rx_no_bufs;
 	net_stats->rx_dropped = stats->rx.rx_no_bufs;
 
 
 	return net_stats;
 	return net_stats;
@@ -933,12 +933,8 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq,
 
 
 	if (packet_error) {
 	if (packet_error) {
 
 
-		if (bytes_written > 0 && !fcs_ok) {
-			if (net_ratelimit())
-				printk(KERN_ERR PFX
-					"%s: packet error: bad FCS\n",
-					netdev->name);
-		}
+		if (bytes_written > 0 && !fcs_ok)
+			enic->rq_bad_fcs++;
 
 
 		dev_kfree_skb_any(skb);
 		dev_kfree_skb_any(skb);