ide with DMA and ram > 4GB
Marc Lörner
marc.loerner at hob.de
Wed Nov 19 06:27:04 PST 2008
On Thursday 13 November 2008 21:02, John Baldwin wrote:
> On Wednesday 12 November 2008 12:23:14 pm Marc Lörner wrote:
> > Hello,
> > I just stepped over a problem with my IDE disk running in DMA-mode
> > and having more than 4GB of RAM.
> > It seems that the whole way down GEOM, ata-disk, ata-dma never is checked
> > whether physical address of buffer is less than 4GB an so fits in 32bits.
> > => when PRD is set the address is rigorously truncated to fit into 32bit,
> > with buffer < 4GB all is quite fine.
>
> bus_dmamap_load() in ata-dma.c should result in bounce pages being
> allocated and having the data copied to pages below 4GB and having those
> addresses passed to the callback and stored in the PRD.
Thanks for pointing this out!
So it seems that bounce-pages are counted with helper-function run_filter.
But this function does never return 1 with dma-pages not lying in range (e.g.
paddr > 4GB) but being aligned.
Did nobody else have problems on 64bit ide-dma, or is it already working, but
I didn't grasp functionality, yet?
For now, I came around this by adding a flag in "/sys/bus_dma.h" and setting
this flag on tag-creation. So I now can check in run_filter whether I'm doing
an ide-dma, relying on this and on check whether I got paddr > 4GB, I then
can tell bus_dmamap_load to use bounce-pages.
Any thoughts or comments?
Regards,
Marc Loerner
More information about the freebsd-hackers
mailing list