Re: [-next Sept 13] s390 build break [nclude/linux/interrupt.h:local_softirq_pending()]

From: Tony Luck
Date: Mon Sep 13 2010 - 18:05:32 EST


On Mon, Sep 13, 2010 at 4:02 AM, Sachin Sant <sachinp@xxxxxxxxxx> wrote:
> Today's next build failed on a s390 box with following
> include/linux/interrupt.h: In function '__raise_softirq_irqoff':
> include/linux/interrupt.h:429: error: implicit declaration of function
> 'local_softirq_pending'
> include/linux/interrupt.h:429: error: lvalue required as left operand of
> assignment
> In file included from /tmp/build/linux/arch/s390/include/asm/hardirq.h:18,

Same problem on ia64. The problem seem to be the conversion of
__raise_softirq_irqoff() from #define macro to static function. This means
the compiler looks more closely at the:
or_softirq_pending(1UL << nr);
line ... which expands to
(local_softirq_pending() |= (1UL << nr);
on every architecture where __ARCH_SET_SOFTIRQ_PENDING is not
set (everything except x86). It seems that s390 and ia64 don't have an
in scope #define for local_softirq_pending() at this point, hence the "lvalue
required" error message.

I think we need <asm/hardirq.h> to provide this ... but the dependencies here
are a bit messy.

-Tony
--
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/