[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070624164519.04f215b8@osprey.hogchain.net>
Date: Sun, 24 Jun 2007 16:45:19 -0500
From: Jay Cliburn <jacliburn@...lsouth.net>
To: "Jay L. T. Cornwall" <jay@...na.co.uk>
Cc: linux-kernel@...r.kernel.org, kronos.it@...il.com,
Chris Snook <csnook@...hat.com>
Subject: Re: 2.6.22-rc5: pdflush oops under heavy disk load
On Sun, 24 Jun 2007 21:31:36 +0100
"Jay L. T. Cornwall" <jay@...na.co.uk> wrote:
> Jay Cliburn wrote:
>
> >> The common factor here seems to be the buffer_head circular list
> >> leading to invalid pointers in bh->b_this_page.
> >>
> >> I'm beginning to suspect the Attansic L1 Gigabit Etherner driver
> >> (marked as EXPERIMENTAL in 2.6.22-rc5). I can't reproduce these
> >> panics on disk-to-disk copies or SCP across the localhost
> >> interface. However, SCP from a server onto either of two different
> >> HDDs hits these oopses fairly quickly.
>
> > How much RAM is installed in your machine? If it's 4GB or more,
> > does your problem go away if you boot with mem=3000M?
>
> Intriguing. Yes, this machine has 4GB of RAM. If I boot with mem=3000M
> the problem does indeed go away - I can't induce an oops even after
> transferring tens of GB across the interface.
>
> I'm not sure I follow why that would be the case, except that it
> relates to pci_map_page behaviour. But I guess you have an inkling?
>
For reasons not yet clear to me, it appears the L1 driver has a bug or
the device itself has trouble with DMA in high memory. This patch,
drafted by Luca Tettamanti, is being explored as a workaround. I'd be
interested to know if it fixes your problem.
[Aside: For future reference, atl1-devel@...ts.sourceforge.net is a
mailing list devoted to L1 driver development.]
Jay
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c
index 6862c11..a600601 100644
--- a/drivers/net/atl1/atl1_main.c
+++ b/drivers/net/atl1/atl1_main.c
@@ -2104,15 +2104,12 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
if (err)
return err;
- err = pci_set_dma_mask(pdev, DMA_64BIT_MASK);
+ err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
if (err) {
- err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
- if (err) {
- dev_err(&pdev->dev, "no usable DMA configuration\n");
- goto err_dma;
- }
- pci_using_64 = false;
+ dev_err(&pdev->dev, "no usable DMA configuration\n");
+ goto err_dma;
}
+ pci_using_64 = false;
/* Mark all PCI regions associated with PCI device
* pdev as being reserved by owner atl1_driver_name
*/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists