From 209ea269a862451a4bed62f2930c4ba82aaf5368 Mon Sep 17 00:00:00 2001 From: Jason Wessel Date: Wed, 3 Feb 2010 13:51:19 -0500 Subject: [PATCH] qemu, powerpc: work around for qemu powerpc 32 interrupts Workaround for QEMU powerpc 32 to force interrupt acknoledgement Signed-off-by: Jason Wessel Signed-off-by: Bruce Ashfield diff --git a/arch/powerpc/platforms/qemu/Kconfig b/arch/powerpc/platforms/qemu/Kconfig index d64ed92..366e50c 100644 --- a/arch/powerpc/platforms/qemu/Kconfig +++ b/arch/powerpc/platforms/qemu/Kconfig @@ -1,6 +1,6 @@ config PPC_QEMU bool "QEMU emulated PowerPC Reference Platform (PReP) system" - depends on PPC_MULTIPLATFORM && PPC32 + depends on PPC32 select PPC_I8259 select PPC_INDIRECT_PCI select PPC_UDBG_16550 diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 616ec1c..4a22fa6 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -137,9 +137,18 @@ struct irq_data *irq_get_irq_data(unsigned int irq) } EXPORT_SYMBOL_GPL(irq_get_irq_data); +#define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ + static void irq_state_clr_disabled(struct irq_desc *desc) { +#ifdef CONFIG_PPC_QEMU + struct irq_desc *desc = irq_data_to_desc(irq); + + if (!(desc->status & IRQ_DELAYED_DISABLE)) + desc->chip->mask(irq); +#else irqd_clear(&desc->irq_data, IRQD_IRQ_DISABLED); +#endif /* CONFIG_PPC_QEMU */ } static void irq_state_set_disabled(struct irq_desc *desc)