enic: record all bad FCS errs as frame errors
authorScott Feldman <scofeldm@cisco.com>
Tue, 10 Feb 2009 07:24:08 +0000 (23:24 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 10 Feb 2009 07:24:08 +0000 (23:24 -0800)
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>
drivers/net/enic/enic.h
drivers/net/enic/enic_main.c

index 86b8c15b4d3e3b8cd900878032a29871bde384e2..c26cea0b300e4e0ceba58ebeccf234c27c86eebd 100644 (file)
@@ -97,6 +97,7 @@ struct enic {
        ____cacheline_aligned struct vnic_rq rq[1];
        unsigned int rq_count;
        int (*rq_alloc_buf)(struct vnic_rq *rq);
+       u64 rq_bad_fcs;
        struct napi_struct napi;
        struct net_lro_mgr lro_mgr;
        struct net_lro_desc lro_desc[ENIC_LRO_MAX_DESC];
index e9bc79a6f303ee87cb85d0196b4899868a2cd761..798cf506bffdf14cdfd6a4e91705e205311dddcb 100644 (file)
@@ -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_errors = stats->rx.rx_errors;
        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;
 
        return net_stats;
@@ -933,12 +933,8 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq,
 
        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);