Re: unsigned long ioremap()?

Jonathan Lundell
2001-05-03T07:37:38Z

At 8:55 AM +0200 2001-05-03, Geert Uytterhoeven wrote:
>Since you're not allowed to use direct memory dereferencing on ioremapped
>areas, wouldn't it be more logical to let ioremap() return an unsigned long
>instead of a void *?
>
>Of course we then have to change readb() and friends to take a long as well,
>but at least we'd get compiler warnings when someone tries to do a direct
>dereference.

Better yet, seems to me, its own type. Say: typedef unsigned long io_ref_t;

It's already done for dma_addr_t, and this seems like an analogous case.

The bigger job would be to fix all the direct dereferences (a
worthwhile thing, I guess; a quick scan shows at least a few), as
well as to fix uncast assignments of ioremap(). Or ideally to get rid
of the casts (most that I see are casts to unsigned long) and type
the receiving buffer appropriately.

It'd be a big job. And Linus further suggests that ioremap's first
argument is an architecture-specific object, not necessarily either a
physical CPU address or a PCI address (though it's typically both in
many (most?) i386 implementations). Now *there'd* be a cleanup.
--
/Jonathan Lundell.