pasemi_mac: two bugfixes for 2.6.24
Subsystems (3)
cover pasemi_mac: two bugfixes for 2.6.24
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
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.
drivers/net/pasemi_mac.c +1 -1
@@ -1126,7 +1126,7 @@ static int pasemi_mac_start_tx(struct skunsigned 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);
Re: [PATCH 1/2] pasemi_mac: Don't set replace-source-address descriptor bits
Quoted 5 lines · Olof Johansson
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 <[email protected]>
applied 1-2
PATCH 2/2 pasemi_mac: Fix CRC checks
In reply to Olof JohanssonMake 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.
drivers/net/pasemi_mac.c +13 -3
@@ -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 ;