Messages in this thread Patch in this message | | | Date | Mon, 21 Apr 2008 21:08:21 -0500 | From | Jay Cliburn <> | Subject | Re: atl1 64-bit => 32-bit DMA borkage (reproducible, bisected) |
| |
On Mon, 21 Apr 2008 00:55:00 +0400 Alexey Dobriyan <adobriyan@gmail.com> wrote:
> Aha, ifconfig down is enough. Here is how reproducer looks like now: > > ./sync-linux-linus && ssh core2 "sudo /sbin/ifconfig eth0 > down" > > where first script is basically scp(1). > > Also, booting with 1G or 2G of RAM (mem=1024m) makes issue go away. > > printk at dev_close() time shows that NETIF_F_HIGHDMA was not somehow > enabled. >
Alexey, can you please try this (very minimally tested) patch?
diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c index 5586fc6..07fe5c0 100644 --- a/drivers/net/atlx/atl1.c +++ b/drivers/net/atlx/atl1.c @@ -1115,9 +1115,6 @@ static void atl1_free_ring_resources(struct atl1_adapter *adapter) struct atl1_rrd_ring *rrd_ring = &adapter->rrd_ring; struct atl1_ring_header *ring_header = &adapter->ring_header; - atl1_clean_tx_ring(adapter); - atl1_clean_rx_ring(adapter); - kfree(tpd_ring->buffer_info); pci_free_consistent(pdev, ring_header->size, ring_header->desc, ring_header->dma); @@ -3423,6 +3420,8 @@ static int atl1_set_ringparam(struct net_device *netdev, adapter->rrd_ring = rrd_old; adapter->tpd_ring = tpd_old; adapter->ring_header = rhdr_old; + atl1_clean_tx_ring(adapter); + atl1_clean_rx_ring(adapter); atl1_free_ring_resources(adapter); adapter->rfd_ring = rfd_new; adapter->rrd_ring = rrd_new;
| |