Re: Being more anal about iospace accesses..

From: Jörn Engel
Date: Wed Sep 15 2004 - 12:55:22 EST


On Wed, 15 September 2004 10:07:29 -0700, Linus Torvalds wrote:
> On Wed, 15 Sep 2004, Jörn Engel wrote:
> >
> > C now supports pointer arithmetic with void*?
>
> C doesn't. gcc does. It's a documented extension, and it acts like if it
> was done on a byte.
>
> See gcc's user guide "Extension to the C Language Family".
>
> It's a singularly good feature.

Nice.

But it still leaves me confused. Before I had this code:

struct regs {
uint32_t status;
...
}

...

struct regs *regs = ioremap(...);
uint32_t status = regs->status;
...

So now I should do it like this:

#define REG_STATUS 0

...

void __iomem *regs = ioremap(...);
uint32_t status = readl(regs + REG_STATUS);
...

But wait, that only works when long is 32bit wide. Plus I could be
stupid enough and "#define REG_STATUS 64" while the register space is
just 64 bytes long. It solves the confusion about address spaces,
agreed, but overall I'm more confused now. Hope it's just temporary.

Jörn

--
There is no worse hell than that provided by the regrets
for wasted opportunities.
-- Andre-Louis Moreau in Scarabouche
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/