Attached is a patch that should apply against Bjorn's 2.4 bk tree. Changes: - Fixes a potential silent data corruption because the pdir cache on the chipset set was getting improperly flushed. It's very hard to hit given the allocation mechanism for the pdir, but it is possible. - Demangles scatter-gather pointers. The driver was taking far too much liberty in changing these. A known MCA path caused by this is SCSI retries, which passed back in a pre-mangled scatter-gather array. - Adds an option for keeping the entire iommu pdir valid. This is really just some debugging code that I added along the way. In the event that you've installed a device that aggressively tries to prefetch, you may get an MCA if it prefetches beyond it's pdir entry. New boxes shouldn't see much of this because PCI will disconnect. Older systems w/ < rev 3.0 LBAs might see issues. Turning this on, makes all unused pdir entries point to a spill page that contains poisoned data. (off by default) - Removes platform_pci_dma_address(). With the extra scatterlist entries, it seems reasonable for DMA engines to store the address in dma_address. pci_dma_length is now just a macro for sg->dma_length, this feels cleaner and reduces complexity for DMA engines that try to coalesce. I believe it's even a benefit for swiotlb. The sn pci_dma interface likely needs some touchups by those that know the interface in this area. (thanks to Grant Grundler for helping out here) One issue I've seen, that's simply because the scatterlist is bigger now, 64k pages and IDE don't get along. ide-dma tries to kmalloc a _very_ large scatterlist. The algorithm factors in PAGE_SIZE, but it only seems to produce a reasonable value if you have 4k pages. It goes ballistic at 64k. Replacing the kmalloc/ kfree w/ a vmalloc/vfree solves the problem, but seems like it's only a bandaid. Alex -- Alex Williamson Linux Development Lab alex_williamson@hp.com Hewlett Packard 970-898-9173 Fort Collins, CO