The patch titled
Fix CONFIG_DEBUG_SHIRQ trigger on free_irq()
has been removed from the -mm tree. Its filename was
fix-config_debug_shirq-trigger-on-free_irq.patch
This patch was dropped because it was merged into mainline or a subsystem tree
------------------------------------------------------
Subject: Fix CONFIG_DEBUG_SHIRQ trigger on free_irq()
From: David Woodhouse <[EMAIL PROTECTED]>
Andy Gospodarek pointed out that because we return in the middle of the
free_irq() function, we never actually do call the IRQ handler that just
got deregistered. This should fix it, although I expect Andrew will want
to convert those 'return's to 'break'. That's a separate change though.
Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
Cc: Andy Gospodarek <[EMAIL PROTECTED]>
Cc: Fernando Luis Vzquez Cao <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---
kernel/irq/manage.c | 31 +++++++++++++++----------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff -puN kernel/irq/manage.c~fix-config_debug_shirq-trigger-on-free_irq
kernel/irq/manage.c
--- a/kernel/irq/manage.c~fix-config_debug_shirq-trigger-on-free_irq
+++ a/kernel/irq/manage.c
@@ -405,7 +405,6 @@ void free_irq(unsigned int irq, void *de
struct irq_desc *desc;
struct irqaction **p;
unsigned long flags;
- irqreturn_t (*handler)(int, void *) = NULL;
WARN_ON(in_interrupt());
if (irq >= NR_IRQS)
@@ -445,8 +444,21 @@ void free_irq(unsigned int irq, void *de
/* Make sure it's not being used on another CPU */
synchronize_irq(irq);
- if (action->flags & IRQF_SHARED)
- handler = action->handler;
+#ifdef CONFIG_DEBUG_SHIRQ
+ /*
+ * It's a shared IRQ -- the driver ought to be
+ * prepared for it to happen even now it's
+ * being freed, so let's make sure.... We do
+ * this after actually deregistering it, to
+ * make sure that a 'real' IRQ doesn't run in
+ * parallel with our fake
+ */
+ if (action->flags & IRQF_SHARED) {
+ local_irq_save(flags);
+ action->handler(irq, dev_id);
+ local_irq_restore(flags);
+ }
+#endif
kfree(action);
return;
}
@@ -454,19 +466,6 @@ void free_irq(unsigned int irq, void *de
spin_unlock_irqrestore(&desc->lock, flags);
return;
}
-#ifdef CONFIG_DEBUG_SHIRQ
- if (handler) {
- /*
- * It's a shared IRQ -- the driver ought to be prepared for it
- * to happen even now it's being freed, so let's make sure....
- * We do this after actually deregistering it, to make sure that
- * a 'real' IRQ doesn't run in parallel with our fake
- */
- local_irq_save(flags);
- handler(irq, dev_id);
- local_irq_restore(flags);
- }
-#endif
}
EXPORT_SYMBOL(free_irq);
_
Patches currently in -mm which might be from [EMAIL PROTECTED] are
origin.patch
remove-fs-jffs2-ioctlc.patch
console-events-and-accessibility-fix.patch
whitespace-fixes-audit-filtering.patch
whitespace-fixes-syscall-auditing.patch
whitespace-fixes-system-auditing.patch
add-missing-newlines-to-some-uses-of-dev_level-messages.patch
-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html