From 99da5003a5b085c12d996da1010e276e9b88672f Mon Sep 17 00:00:00 2001 From: Andy Fleming Date: Mon, 24 Mar 2008 10:53:27 -0500 Subject: [PATCH] gianfar: Only process completed frames If the LAST bit is not set in the RxBD, it's possible we're processing an incomplete frame, which is bad. While we're at it, add a constant for the error bitmask, so the whole if-clause fits on one line, and is more legible. Signed-off-by: Dai Haruki Signed-off-by: Andy Fleming Signed-off-by: Jeff Garzik --- drivers/net/gianfar.c | 4 +--- drivers/net/gianfar.h | 3 +++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 0ab4b26..a59edf7 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c @@ -1526,9 +1526,7 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit) rmb(); skb = priv->rx_skbuff[priv->skb_currx]; - if (!(bdp->status & - (RXBD_LARGE | RXBD_SHORT | RXBD_NONOCTET - | RXBD_CRCERR | RXBD_OVERRUN | RXBD_TRUNCATED))) { + if ((bdp->status & RXBD_LAST) && !(bdp->status & RXBD_ERR)) { /* Increment the number of packets */ dev->stats.rx_packets++; howmany++; diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index 5b8991d..fcfa1bd 100644 --- a/drivers/net/gianfar.h +++ b/drivers/net/gianfar.h @@ -340,6 +340,9 @@ extern const char gfar_driver_version[]; #define RXBD_OVERRUN 0x0002 #define RXBD_TRUNCATED 0x0001 #define RXBD_STATS 0x01ff +#define RXBD_ERR (RXBD_LARGE | RXBD_SHORT | RXBD_NONOCTET \ + | RXBD_CRCERR | RXBD_OVERRUN \ + | RXBD_TRUNCATED) /* Rx FCB status field bits */ #define RXFCB_VLN 0x8000 -- 2.7.4