From 2cadae979349db9bbb22a6d138904b6affddf1e8 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Mon, 17 May 2010 17:20:50 -0700 Subject: [PATCH] --- yaml --- r: 195150 b: refs/heads/master c: ec497b32c311b1e1aac22a76d294d24285d06331 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/bfin_mac.c | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 25f4337b5bf3..6a1c89e0291d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fe92afedee23e1d91f0133360a24d2bf48270739 +refs/heads/master: ec497b32c311b1e1aac22a76d294d24285d06331 diff --git a/trunk/drivers/net/bfin_mac.c b/trunk/drivers/net/bfin_mac.c index a173d8a40484..16f2a37c733d 100644 --- a/trunk/drivers/net/bfin_mac.c +++ b/trunk/drivers/net/bfin_mac.c @@ -980,12 +980,25 @@ static int bfin_mac_hard_start_xmit(struct sk_buff *skb, return NETDEV_TX_OK; } +#define RX_ERROR_MASK (RX_LONG | RX_ALIGN | RX_CRC | RX_LEN | \ + RX_FRAG | RX_ADDR | RX_DMAO | RX_PHY | RX_LATE | RX_RANGE) + static void bfin_mac_rx(struct net_device *dev) { struct sk_buff *skb, *new_skb; unsigned short len; struct bfin_mac_local *lp __maybe_unused = netdev_priv(dev); + /* check if frame status word reports an error condition + * we which case we simply drop the packet + */ + if (current_rx_ptr->status.status_word & RX_ERROR_MASK) { + printk(KERN_NOTICE DRV_NAME + ": rx: receive error - packet dropped\n"); + dev->stats.rx_dropped++; + goto out; + } + /* allocate a new skb for next time receive */ skb = current_rx_ptr->skb; @@ -1024,11 +1037,9 @@ static void bfin_mac_rx(struct net_device *dev) netif_rx(skb); dev->stats.rx_packets++; dev->stats.rx_bytes += len; +out: current_rx_ptr->status.status_word = 0x00000000; current_rx_ptr = current_rx_ptr->next; - -out: - return; } /* interrupt routine to handle rx and error signal */