|
@@ -1053,7 +1053,7 @@ static int yellowfin_rx(struct net_device *dev)
|
|
|
struct sk_buff *rx_skb = yp->rx_skbuff[entry];
|
|
|
s16 frame_status;
|
|
|
u16 desc_status;
|
|
|
- int data_size;
|
|
|
+ int data_size, yf_size;
|
|
|
u8 *buf_addr;
|
|
|
|
|
|
if(!desc->result_status)
|
|
@@ -1070,6 +1070,9 @@ static int yellowfin_rx(struct net_device *dev)
|
|
|
__func__, frame_status);
|
|
|
if (--boguscnt < 0)
|
|
|
break;
|
|
|
+
|
|
|
+ yf_size = sizeof(struct yellowfin_desc);
|
|
|
+
|
|
|
if ( ! (desc_status & RX_EOP)) {
|
|
|
if (data_size != 0)
|
|
|
netdev_warn(dev, "Oversized Ethernet frame spanned multiple buffers, status %04x, data_size %d!\n",
|
|
@@ -1096,12 +1099,12 @@ static int yellowfin_rx(struct net_device *dev)
|
|
|
if (status2 & 0x80) dev->stats.rx_dropped++;
|
|
|
#ifdef YF_PROTOTYPE /* Support for prototype hardware errata. */
|
|
|
} else if ((yp->flags & HasMACAddrBug) &&
|
|
|
- memcmp(le32_to_cpu(yp->rx_ring_dma +
|
|
|
- entry*sizeof(struct yellowfin_desc)),
|
|
|
- dev->dev_addr, 6) != 0 &&
|
|
|
- memcmp(le32_to_cpu(yp->rx_ring_dma +
|
|
|
- entry*sizeof(struct yellowfin_desc)),
|
|
|
- "\377\377\377\377\377\377", 6) != 0) {
|
|
|
+ !ether_addr_equal(le32_to_cpu(yp->rx_ring_dma +
|
|
|
+ entry * yf_size),
|
|
|
+ dev->dev_addr) &&
|
|
|
+ !ether_addr_equal(le32_to_cpu(yp->rx_ring_dma +
|
|
|
+ entry * yf_size),
|
|
|
+ "\377\377\377\377\377\377")) {
|
|
|
if (bogus_rx++ == 0)
|
|
|
netdev_warn(dev, "Bad frame to %pM\n",
|
|
|
buf_addr);
|