Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99da5003 authored by Andy Fleming's avatar Andy Fleming Committed by Jeff Garzik
Browse files

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: default avatarDai Haruki <dai.haruki@freescale.com>
Signed-off-by: default avatarAndy Fleming <afleming@freescale.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent faa89577
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -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++;
+3 −0
Original line number Diff line number Diff line
@@ -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