aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 0caa59f747dd..2782bacdf494 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -282,8 +282,17 @@ EXPORT_SYMBOL(disable_irq);
282 282
283void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume) 283void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume)
284{ 284{
285 if (resume) 285 if (resume) {
286 if (!(desc->status & IRQ_SUSPENDED)) {
287 if (!desc->action)
288 return;
289 if (!(desc->action->flags & IRQF_FORCE_RESUME))
290 return;
291 /* Pretend that it got disabled ! */
292 desc->depth++;
293 }
286 desc->status &= ~IRQ_SUSPENDED; 294 desc->status &= ~IRQ_SUSPENDED;
295 }
287 296
288 switch (desc->depth) { 297 switch (desc->depth) {
289 case 0: 298 case 0:
@@ -1100,7 +1109,7 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler,
1100 if (retval) 1109 if (retval)
1101 kfree(action); 1110 kfree(action);
1102 1111
1103#ifdef CONFIG_DEBUG_SHIRQ 1112#ifdef CONFIG_DEBUG_SHIRQ_FIXME
1104 if (!retval && (irqflags & IRQF_SHARED)) { 1113 if (!retval && (irqflags & IRQF_SHARED)) {
1105 /* 1114 /*
1106 * It's a shared IRQ -- the driver ought to be prepared for it 1115 * It's a shared IRQ -- the driver ought to be prepared for it