Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Nov 2008 18:23:14 +0100
From:      Marc =?iso-8859-1?q?L=F6rner?= <marc.loerner@hob.de>
To:        freebsd-hackers@freebsd.org
Subject:   ide with DMA and ram > 4GB
Message-ID:  <200811121823.14400.marc.loerner@hob.de>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811121823.14400.marc.loerner>