Re: virt_to_bus and >1G of memory (was MAX_DMA_ADDRESS ...)

Kurt Garloff (garloff@kg1.ping.de)
Fri, 13 Nov 1998 00:27:55 +0100


> > And it crashes with an ,,Unable to handle kernel paging request at
> > e4414007`` in the ncr53c8xx (3.0i) driver, if I apply the following patch.
> > So is the idea about what it should look like wrong, or is it the ncr53c8xx
> > driver?
>
> For DMAing from devices, drivers call virt_to_bus() that provides the
> address devices have to use to hit the right memory location from the bus.
> Being wrong is harder then being right for that, but obviously a bug is
> always possible.
>
> > -#define __io_virt(x) ((void *)(PAGE_OFFSET | (unsigned long)(x)))
> > -#define __io_phys(x) ((unsigned long)(x) & ~PAGE_OFFSET)
> > +#define __io_virt(x) ((void *)(PAGE_OFFSET + (unsigned long)(x)))
> > +#define __io_phys(x) ((unsigned long)(x) - PAGE_OFFSET)
>
> Only the __io_phys(x) macro should be involved in virt_to_bus().
> The previous versions of the macros left result unchanged if they are
> called more than once, but your versions will break. So probably
> such a bug exists somewhere.
>
> BTW, what was wrong with previous macro versions?
> (Sorry, if I just missed your initial posting. Will search it).

Hi Gerard,

Imagine a PAGE_OFFSET of 0x789abcde. The macros obiously give different
results then. OK, nobody will do this, but maybe 0x70000000 and maybe some IO
remapped addresses larger than 0x10000000 might appear. Or even 0x7f000000
and IO mapped adresses larger then 0x01000000. See, what I mean?
I'd say that the version with plus and minus is cleaner.

BTW, the initial posting was not by me ...
The discussion was about accessing io-space. It changed to why we can't
change PAGE_OFFSET to an arbitrary value. (We should be INMHO.)

How did you find this posting. I don't belive you read all in linux-scsi
and/or linux-kernel. Do you grep through your mailbox? Does your mailreader
do that for you? procmail? (Just curious ...)

-- 
Kurt Garloff <K.Garloff@ping.de>  (Dortmund, FRG)
PGP key on http://student.physik.uni-dortmund.de/homepages/garloff
Unix IS user friendly - it's just selective about who its friends are!

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/