74 lines
2.5 KiB
Diff
74 lines
2.5 KiB
Diff
From c14339cf854c01f0a801265a9b97e67b12614522 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Wed, 5 Oct 2011 14:00:26 +0200
|
|
Subject: [PATCH 012/278] powerpc: Mark IPI interrupts IRQF_NO_THREAD
|
|
|
|
IPI handlers cannot be threaded. Remove the obsolete IRQF_DISABLED
|
|
flag (see commit e58aa3d2) while at it.
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
---
|
|
arch/powerpc/kernel/smp.c | 4 ++--
|
|
arch/powerpc/platforms/powermac/smp.c | 4 ++--
|
|
arch/powerpc/sysdev/xics/xics-common.c | 5 +++--
|
|
3 files changed, 7 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
|
|
index 6df7090..abdedd3 100644
|
|
--- a/arch/powerpc/kernel/smp.c
|
|
+++ b/arch/powerpc/kernel/smp.c
|
|
@@ -187,8 +187,8 @@ int smp_request_message_ipi(int virq, int msg)
|
|
return 1;
|
|
}
|
|
#endif
|
|
- err = request_irq(virq, smp_ipi_action[msg], IRQF_PERCPU,
|
|
- smp_ipi_name[msg], 0);
|
|
+ err = request_irq(virq, smp_ipi_action[msg],
|
|
+ IRQF_PERCPU | IRQF_NO_THREAD, smp_ipi_name[msg], 0);
|
|
WARN(err < 0, "unable to request_irq %d for %s (rc %d)\n",
|
|
virq, smp_ipi_name[msg], err);
|
|
|
|
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
|
|
index 3394254..8d75ac8 100644
|
|
--- a/arch/powerpc/platforms/powermac/smp.c
|
|
+++ b/arch/powerpc/platforms/powermac/smp.c
|
|
@@ -200,7 +200,7 @@ static int psurge_secondary_ipi_init(void)
|
|
|
|
if (psurge_secondary_virq)
|
|
rc = request_irq(psurge_secondary_virq, psurge_ipi_intr,
|
|
- IRQF_PERCPU, "IPI", NULL);
|
|
+ IRQF_NO_THREAD | IRQF_PERCPU, "IPI", NULL);
|
|
|
|
if (rc)
|
|
pr_err("Failed to setup secondary cpu IPI\n");
|
|
@@ -408,7 +408,7 @@ static int __init smp_psurge_kick_cpu(int nr)
|
|
|
|
static struct irqaction psurge_irqaction = {
|
|
.handler = psurge_ipi_intr,
|
|
- .flags = IRQF_PERCPU,
|
|
+ .flags = IRQF_PERCPU | IRQF_NO_THREAD,
|
|
.name = "primary IPI",
|
|
};
|
|
|
|
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c
|
|
index 63762c6..4ba6194 100644
|
|
--- a/arch/powerpc/sysdev/xics/xics-common.c
|
|
+++ b/arch/powerpc/sysdev/xics/xics-common.c
|
|
@@ -134,10 +134,11 @@ static void xics_request_ipi(void)
|
|
BUG_ON(ipi == NO_IRQ);
|
|
|
|
/*
|
|
- * IPIs are marked IRQF_PERCPU. The handler was set in map.
|
|
+ * IPIs are marked PERCPU and also IRQF_NO_THREAD as they must
|
|
+ * run in hard interrupt context. The handler was set in map.
|
|
*/
|
|
BUG_ON(request_irq(ipi, icp_ops->ipi_action,
|
|
- IRQF_PERCPU, "IPI", NULL));
|
|
+ IRQF_NO_THREAD|IRQF_PERCPU, "IPI", NULL));
|
|
}
|
|
|
|
int __init xics_smp_probe(void)
|
|
--
|
|
1.7.10
|
|
|