summaryrefslogtreecommitdiff
path: root/arch/arm64/kernel/smp.c
diff options
context:
space:
mode:
authorAbhimanyu Kapur <abhimany@codeaurora.org>2014-02-08 00:45:00 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:10:12 -0700
commite38a985cba26ed5a3cb3c1b1bc4be2ff5d220630 (patch)
tree6de8bbf88c7b32b63ef9b77da39eebb6f23cf842 /arch/arm64/kernel/smp.c
parent1e97815c3dfbc9311429022b6d46f6011184aac0 (diff)
arm64: smp: Add wakeup IPI support
Add support for IPI_WAKEUP which is used by hotplug code path to wake up CPU from low power states. Change-Id: I258d05e109a377613064624a5bfda21ab8ea9869 Signed-off-by: Abhimanyu Kapur <abhimany@codeaurora.org> [satyap@codeaurora.org: trivial merge conflict resolution] Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
Diffstat (limited to 'arch/arm64/kernel/smp.c')
-rw-r--r--arch/arm64/kernel/smp.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 60946e1c30cf..b76b4b096694 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -70,6 +70,7 @@ enum ipi_msg_type {
IPI_CPU_STOP,
IPI_TIMER,
IPI_IRQ_WORK,
+ IPI_WAKEUP,
};
/*
@@ -629,6 +630,7 @@ static const char *ipi_types[NR_IPI] __tracepoint_string = {
S(IPI_CPU_STOP, "CPU stop interrupts"),
S(IPI_TIMER, "Timer broadcast interrupts"),
S(IPI_IRQ_WORK, "IRQ work interrupts"),
+ S(IPI_WAKEUP, "CPU wakeup interrupts"),
};
static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
@@ -677,6 +679,11 @@ void arch_send_call_function_single_ipi(int cpu)
smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC);
}
+void arch_send_wakeup_ipi_mask(const struct cpumask *mask)
+{
+ smp_cross_call(mask, IPI_WAKEUP);
+}
+
#ifdef CONFIG_IRQ_WORK
void arch_irq_work_raise(void)
{
@@ -758,6 +765,9 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
break;
#endif
+ case IPI_WAKEUP:
+ break;
+
default:
pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr);
break;