diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2012-10-09 15:05:40 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2012-10-09 15:05:40 +0100 |
commit | de43d7a373eef95bedcd816f1fcf8c062e1ac328 (patch) | |
tree | 4b78f73c75a74ff0400d9920e66aae2d013db3a9 /xen/include/asm-arm/irq.h | |
parent | 55ba3b2be653e85e73cbad96f5cd2e5307e83730 (diff) | |
download | xen-de43d7a373eef95bedcd816f1fcf8c062e1ac328.tar.gz xen-de43d7a373eef95bedcd816f1fcf8c062e1ac328.tar.bz2 xen-de43d7a373eef95bedcd816f1fcf8c062e1ac328.zip |
arm: Use per-CPU irq_desc for PPIs and SGIs
The first 32 interrupts on a GIC are the Peripheral Private Interrupts
and Software-Generated Interrupts and are local to each processor.
The irq_desc cannot be shared since we use irq_desc->status to track
whether the IRQ is in-progress etc. Therefore give each processor its
own local irq_desc for each of these interupts.
We must also route them on each CPU, so do so.
This feels like a bit of a layering violation (since the core ARM
irq.c now knows about thinkgs wich are really gic.c business)
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'xen/include/asm-arm/irq.h')
-rw-r--r-- | xen/include/asm-arm/irq.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/xen/include/asm-arm/irq.h b/xen/include/asm-arm/irq.h index 21e0b85f26..abde83951f 100644 --- a/xen/include/asm-arm/irq.h +++ b/xen/include/asm-arm/irq.h @@ -17,10 +17,23 @@ struct irq_cfg { #define arch_irq_desc irq_cfg }; +#define NR_LOCAL_IRQS 32 +#define NR_IRQS 1024 +#define nr_irqs NR_IRQS + +struct irq_desc; + +struct irq_desc *__irq_to_desc(int irq); + +#define irq_to_desc(irq) __irq_to_desc(irq) + void do_IRQ(struct cpu_user_regs *regs, unsigned int irq, int is_fiq); #define domain_pirq_to_irq(d, pirq) (pirq) +void init_IRQ(void); +void init_secondary_IRQ(void); + #endif /* _ASM_HW_IRQ_H */ /* * Local variables: |