[Linaro-dev] Second "Linaro kernel merge result of the moment"aka "arm_next" published
Catalin Marinas
catalin.marinas at arm.com
Wed Jul 14 13:09:58 UTC 2010
On Wed, 2010-07-14 at 07:05 +0100, John Rigby wrote:
> Here is an update. First, I am still getting errors of the form:
>
> /home/jcrigby/work/git-trees/kernelbuild/linux/drivers/mtd/onenand/onenand_sim.c:142:
> error: expected expression before 'do'
>
> The 'do' here is from arch/arm/include/asm/io.h:
> #define writew(v,c) do { wmb(); writew_relaxed(v,c); }
> while (0)
>
> That looks ok until you find out how it is used in
> drivers/mtd/onenand/onenand_sim.c:
>
> #define ONENAND_SET_WP_STATUS(v, this)
> \
> (writew(v, this->base + ONENAND_REG_WP_STATUS))
>
> The parens around it make the valid statement into an invalid
> expression.
This was discussed recently on the ARM Linux list. The conclusion was
that using brackets around writew() is dangerous as it gives writew() a
type and the compiler may generate code which forces a read back from
the register being written. Using inline functions for writew() has some
performance impact (it seems to add around 78K in size to the Linux
kernel).
So we could change the driver above to remove the brackets but any other
suggestion is welcome.
--
Catalin
More information about the kernel-team
mailing list