[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: IOMMU setup vs DAC (PCI)
Grant Grundler writes:
> My original quest was for an architecturally neutral way to pass
> 64-bit physical memory addresses back to a 64-bit capable card.
>
> pci_dma_supported() interface provides the right hook for the
> driver to advertise device capabilities. dma_addr_t is defined
> in most arches (read x86) to be 32-bit. But IA64 (u64) and mips*
> (unsigned long) have broken ground here already. I'll explore
> further to see if parisc*-linux can in fact use "unsigned long".
>
> But I'm still interested in any comments or insights.
> (ie am I out to lunch? ;^)
You are going into unchartered territory. IA64 supports 64-bit
DMA as a HACK at best (see qla20xx driver) and uses a software
iommu implementation to handle all normal drivers using the
supported 32-bit pci_*() interfaces.
The 64-bit support API will appear in 2.5.x, no sooner.
And all that talk of IOMMU overhead assumes a shit implementation of
TLB flushing. With a sane setup you only flush once per circle walk
of the page tables, see the tricks in sparc64/kernel/pci_iommu.c to
see what I'm talking about. I can push 2 gigabytes to a disk over
SCSI and only take 18 PIOs to the IOMMU. Also, many IOMMU based PCI
implementations do not offer the software managed
prefetching/write-behind facilities when 64-bit DAC is used.
I say stay at 32-bit IOMMU based stuff for now.
Later,
David S. Miller
davem@redhat.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux.eu.org/Linux-MM/