diff options
author | Julien Grall <julien.grall@linaro.org> | 2013-06-28 12:25:57 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2013-06-28 12:35:59 +0100 |
commit | 751554bfc9dc0363fabf882f6e8855022590ec4d (patch) | |
tree | cea2e284324715e0b20492a107be22aeabb6f06a | |
parent | 665ddd98c4d418ced6f303b79b7a6322c69b7247 (diff) | |
download | xen-751554bfc9dc0363fabf882f6e8855022590ec4d.tar.gz xen-751554bfc9dc0363fabf882f6e8855022590ec4d.tar.bz2 xen-751554bfc9dc0363fabf882f6e8855022590ec4d.zip |
xen/arm: gic_shutdown_irq must only disable the right IRQ
When GICD_ICENABLERn is read, all the 1s bit represent enabled IRQs.
Currently gic_shutdown_irq:
- read GICD_ICENABLER
- set the corresping bit to 1
- write back the new value
That means, Xen will disable more IRQs than necessary.
Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
-rw-r--r-- | xen/arch/arm/gic.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index 177560e3d1..cafb68110a 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -117,12 +117,10 @@ static unsigned int gic_irq_startup(struct irq_desc *desc) static void gic_irq_shutdown(struct irq_desc *desc) { - uint32_t enabler; int irq = desc->irq; /* Disable routing */ - enabler = GICD[GICD_ICENABLER + irq / 32]; - GICD[GICD_ICENABLER + irq / 32] = enabler | (1u << (irq % 32)); + GICD[GICD_ICENABLER + irq / 32] = (1u << (irq % 32)); } static void gic_irq_enable(struct irq_desc *desc) |