[PATCH 0/2] pasemi_mac: two bugfixes for 2.6.24

STALE6880d

4 messages, 2 authors, 2007-11-08 · open the first message on its own page

[PATCH 0/2] pasemi_mac: two bugfixes for 2.6.24

From: Olof Johansson <hidden>
Date: 2007-11-07 04:10:42

Hi Jeff,

Two bugfixes for pasemi_mac for 2.6.24:

[PATCH 1/2] pasemi_mac: Don't set replace-source-address descriptor bits
[PATCH 2/2] pasemi_mac: Fix CRC checks


Thanks,

-Olof

[PATCH 1/2] pasemi_mac: Don't set replace-source-address descriptor bits

From: Olof Johansson <hidden>
Date: 2007-11-07 04:11:24

Don't use the "replace source address with local MAC address" bits, since
it causes problems on some variations of the hardware due to an erratum.


Signed-off-by: Olof Johansson <redacted>

Index: k.org/drivers/net/pasemi_mac.c
===================================================================
--- k.org.orig/drivers/net/pasemi_mac.c
+++ k.org/drivers/net/pasemi_mac.c
@@ -1126,7 +1126,7 @@ static int pasemi_mac_start_tx(struct sk
 	unsigned long flags;
 	int i, nfrags;
 
-	dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_SS | XCT_MACTX_CRC_PAD;
+	dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_CRC_PAD;
 
 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
 		const unsigned char *nh = skb_network_header(skb);

[PATCH 2/2] pasemi_mac: Fix CRC checks

From: Olof Johansson <hidden>
Date: 2007-11-07 04:12:19

Make sure we don't feed packets with bad CRC up the network stack,
and discount the packet length as reported from the MAC for the CRC
field.


Signed-off-by: Olof Johansson <redacted>

Index: k.org/drivers/net/pasemi_mac.c
===================================================================
--- k.org.orig/drivers/net/pasemi_mac.c
+++ k.org/drivers/net/pasemi_mac.c
@@ -580,6 +580,16 @@ static int pasemi_mac_clean_rx(struct pa
 
 		len = (macrx & XCT_MACRX_LLEN_M) >> XCT_MACRX_LLEN_S;
 
+		pci_unmap_single(mac->dma_pdev, dma, len, PCI_DMA_FROMDEVICE);
+
+		if (macrx & XCT_MACRX_CRC) {
+			/* CRC error flagged */
+			mac->netdev->stats.rx_errors++;
+			mac->netdev->stats.rx_crc_errors++;
+			dev_kfree_skb_irq(skb);
+			goto next;
+		}
+
 		if (len < 256) {
 			struct sk_buff *new_skb;
 
@@ -595,11 +605,10 @@ static int pasemi_mac_clean_rx(struct pa
 		} else
 			info->skb = NULL;
 
-		pci_unmap_single(mac->dma_pdev, dma, len, PCI_DMA_FROMDEVICE);
-
 		info->dma = 0;
 
-		skb_put(skb, len);
+		/* Don't include CRC */
+		skb_put(skb, len-4);
 
 		if (likely((macrx & XCT_MACRX_HTY_M) == XCT_MACRX_HTY_IPV4_OK)) {
 			skb->ip_summed = CHECKSUM_UNNECESSARY;
@@ -614,6 +623,7 @@ static int pasemi_mac_clean_rx(struct pa
 		skb->protocol = eth_type_trans(skb, mac->netdev);
 		netif_receive_skb(skb);
 
+next:
 		RX_RING(mac, n) = 0;
 		RX_RING(mac, n+1) = 0;
 

Re: [PATCH 1/2] pasemi_mac: Don't set replace-source-address descriptor bits

From: Jeff Garzik <hidden>
Date: 2007-11-08 17:53:54

On Tue, Nov 06, 2007 at 10:20:39PM -0600, Olof Johansson wrote:
Don't use the "replace source address with local MAC address" bits, since
it causes problems on some variations of the hardware due to an erratum.


Signed-off-by: Olof Johansson <redacted>
applied 1-2
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help