summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-03-03 12:02:02 -0500
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-03-03 12:02:02 -0500
commit8aef4857d26c46ca3d4f1a7f3a7aa4b51a72385e (patch)
treecb1665891daf2a12b4028953e86dde5072b359e7 /kernel
parentf611f2da99420abc973c32cdbddbf5c365d0a20c (diff)
parentdc5f219e88294b93009eef946251251ffffb6d60 (diff)
Merge branch 'irq/for-xen' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip into HEAD
* 'irq/for-xen' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: genirq: Add IRQF_FORCE_RESUME
Diffstat (limited to 'kernel')
-rw-r--r--kernel/irq/manage.c11
-rw-r--r--kernel/irq/pm.c3
2 files changed, 10 insertions, 4 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 0caa59f747d..b4198ee8cfd 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -282,8 +282,17 @@ EXPORT_SYMBOL(disable_irq);
void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume)
{
- if (resume)
+ if (resume) {
+ if (!(desc->status & IRQ_SUSPENDED)) {
+ if (!desc->action)
+ return;
+ if (!(desc->action->flags & IRQF_FORCE_RESUME))
+ return;
+ /* Pretend that it got disabled ! */
+ desc->depth++;
+ }
desc->status &= ~IRQ_SUSPENDED;
+ }
switch (desc->depth) {
case 0:
diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c
index 0d4005d85b0..d6bfb89cce9 100644
--- a/kernel/irq/pm.c
+++ b/kernel/irq/pm.c
@@ -53,9 +53,6 @@ void resume_device_irqs(void)
for_each_irq_desc(irq, desc) {
unsigned long flags;
- if (!(desc->status & IRQ_SUSPENDED))
- continue;
-
raw_spin_lock_irqsave(&desc->lock, flags);
__enable_irq(desc, irq, true);
raw_spin_unlock_irqrestore(&desc->lock, flags);