Re: PATCH: Further aacraid work

From: Jeff Garzik
Date: Fri Jun 18 2004 - 01:01:34 EST


Alan Cox wrote:
On Thu, Jun 17, 2004 at 09:10:43PM +0200, Andi Kleen wrote:

The AMD64 IOMMU could do it too (and the code to do it exists in
2.6). But the problem is that the current IO layer doesn't provide a
sufficient fallback path when this fails. You have to promise in
advance that you can merge and then later it's too late to change your
mind without signalling an IO error.


I would rather see it below the I/O layer for things like AMD64. The
reason I say this is that many drivers would suffer from iommu merging not
gain, and others may have limits.


This reminds me of good ole IDE: the first-generation SATA controllers carry forward the limits of the older PCI IDE controllers: neither the S/G table nor any single S/G entry may span a 64K boundary.

In theory the block layer / SCSI layer DMA boundary stuff takes care of this -- but iommu merging _undoes_ the segment splitting that the hardware _requires_. Thus, in ata_fill_sg in libata-core.c, I re-split the S/G list after DMA-mapping it. A bit lame.

James and BenH discussed a solution at the DMA level, but I don't think anything ever happened.

Jeff


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/