Re: unsigned long ioremap()?

David S. Miller
2001-05-03T07:09:35Z

Geert Uytterhoeven writes:
> 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.

There is a school of thought which believes that:

struct xdev_regs {
u32 reg1;
u32 reg2;
};

val = readl(&regs->reg2);

is cleaner than:

#define REG1 0x00
#define REG2 0x04

val = readl(regs + REG2);

I'm personally ambivalent and believe that both cases should be allowed.

BTW, current {read,write}{b,w,l}() allow both pointer and unsigned
long arguments. If your implementation isn't casting the port address
arg right now, perhaps you haven't tried to compile very many drivers
which use these interfaces or you're just ignoreing the warnings :-)

Later,
David S. Miller
davem@redhat.com