ide with DMA and ram > 4GB

Marc Lörner marc.loerner at hob.de
Wed Nov 12 09:43:43 PST 2008


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.

So what do you recommend: 
- Easiest way (but not performantest) is to turn DMA for ide off and use PIO 
instead

- Harder way: Bugfix ide-dma!
  When doing this, where do you recommend to put code?
I tried to do a simple (but not performant) patch in in ata-disk functions  
ad_strategy and ad_done with using another aligned, with right boundary and 
physical address < 4GB and copying data from an to it from bp->b_data
(or request->data). At least this one works, but copying from one to another 
buffer is not quite elegant and the code doesn't really belong there.
So I thought of putting something into busdma_machdep, but right now I have 
now clue to where to hook in, because this function cannot modify buffer 
given from vfs_bio => geom => ata.

Regards,
Marc Loerner

P.S.:
I'm using kernel-sources from 7.0-RELEASE-p3


More information about the freebsd-hackers mailing list