aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Grall <julien.grall@linaro.org>2013-06-28 12:25:57 +0100
committerIan Campbell <ian.campbell@citrix.com>2013-06-28 12:35:59 +0100
commit751554bfc9dc0363fabf882f6e8855022590ec4d (patch)
treecea2e284324715e0b20492a107be22aeabb6f06a
parent665ddd98c4d418ced6f303b79b7a6322c69b7247 (diff)
downloadxen-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.c4
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)