Re: [RFC PATCH 1/3] genirq: add support for per-cpu dev_idinterrupts

From: Thomas Gleixner
Date: Fri Sep 16 2011 - 05:37:31 EST


On Fri, 16 Sep 2011, Marc Zyngier wrote:

> Hi MichaÅ,
>
> On 15/09/11 22:36, MichaÅ MirosÅaw wrote:
> > 2011/9/15 Marc Zyngier <marc.zyngier@xxxxxxx>:
> > [...]
> >> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> >> index a103732..f9b7fa3 100644
> >> --- a/include/linux/interrupt.h
> >> +++ b/include/linux/interrupt.h
> >> @@ -95,6 +95,7 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
> >> * @flags: flags (see IRQF_* above)
> >> * @name: name of the device
> >> * @dev_id: cookie to identify the device
> >> + * @percpu_dev_id: cookie to identify the device
> >> * @next: pointer to the next irqaction for shared interrupts
> >> * @irq: interrupt number
> >> * @dir: pointer to the proc/irq/NN/name entry
> >> @@ -104,17 +105,20 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
> >> * @thread_mask: bitmask for keeping track of @thread activity
> >> */
> >> struct irqaction {
> > [...]
> >> + void *dev_id;
> >> +#ifdef CONFIG_IRQ_PERCPU_DEVID
> >> + void __percpu *percpu_dev_id;
> >> +#endif
> >
> > Those two can share the memory (in a anonymous union), if I read the
> > idea correctly.
>
> That was the initial implementation, and everything was fine until I
> tried gcc 4.4.1. Having an anonymous union breaks static initialization
> of the structure.

Bah, right. It wants to have brackets around it. So we can use a
separate pointer to get this going and then run coccinelle over it to
fix that up just before 3.2-rc1.

Thanks,

tglx