Messages in this thread | | | Date | Fri, 18 Jun 2004 01:57:03 -0400 | From | Jeff Garzik <> | Subject | Re: PATCH: Further aacraid work |
| |
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |