Commit 98903688 authored by Helge Deller's avatar Helge Deller

parisc: Rewrite arch_cpu_idle_dead() for CPU hotplugging

Let the PDC firmware put the CPU into firmware idle loop with the
pdc_cpu_rendezvous() function.
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 88b3aac6
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/nmi.h> #include <linux/nmi.h>
#include <linux/sched/hotplug.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
...@@ -46,6 +47,7 @@ ...@@ -46,6 +47,7 @@
#include <asm/pdc_chassis.h> #include <asm/pdc_chassis.h>
#include <asm/unwind.h> #include <asm/unwind.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/cacheflush.h>
#define COMMAND_GLOBAL F_EXTEND(0xfffe0030) #define COMMAND_GLOBAL F_EXTEND(0xfffe0030)
#define CMD_RESET 5 /* reset any module */ #define CMD_RESET 5 /* reset any module */
...@@ -158,10 +160,29 @@ void release_thread(struct task_struct *dead_task) ...@@ -158,10 +160,29 @@ void release_thread(struct task_struct *dead_task)
int running_on_qemu __ro_after_init; int running_on_qemu __ro_after_init;
EXPORT_SYMBOL(running_on_qemu); EXPORT_SYMBOL(running_on_qemu);
void __cpuidle arch_cpu_idle_dead(void) /*
* Called from the idle thread for the CPU which has been shutdown.
*/
void arch_cpu_idle_dead(void)
{ {
/* nop on real hardware, qemu will offline CPU. */ #ifdef CONFIG_HOTPLUG_CPU
asm volatile("or %%r31,%%r31,%%r31\n":::); idle_task_exit();
local_irq_disable();
/* Tell __cpu_die() that this CPU is now safe to dispose of. */
(void)cpu_report_death();
/* Ensure that the cache lines are written out. */
flush_cache_all_local();
flush_tlb_all_local(NULL);
/* Let PDC firmware put CPU into firmware idle loop. */
__pdc_cpu_rendezvous();
pr_warn("PDC does not provide rendezvous function.\n");
#endif
while (1);
} }
void __cpuidle arch_cpu_idle(void) void __cpuidle arch_cpu_idle(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment