aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2021-12-17 12:17:21 +1000
committerCédric Le Goater <clg@kaod.org>2021-12-23 18:47:26 +0100
commit175170ba6a181682ad9368b184f2241acce568c3 (patch)
tree3007f201c818e4b68a00e1a6425e006761846f0a /core
parentf79b5735aa03d6253f2a38e289af242f0100f032 (diff)
downloadskiboot-175170ba6a181682ad9368b184f2241acce568c3.zip
skiboot-175170ba6a181682ad9368b184f2241acce568c3.tar.gz
skiboot-175170ba6a181682ad9368b184f2241acce568c3.tar.bz2
core/cpu: refactor IPI sending
Pull the IPI sending code into its own function where it is used in two places. cpu_wake() already checks in_idle, so its caller does not need to check pm_enabled. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Diffstat (limited to 'core')
-rw-r--r--core/cpu.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/core/cpu.c b/core/cpu.c
index 20b3f6a..e915d44 100644
--- a/core/cpu.c
+++ b/core/cpu.c
@@ -96,13 +96,8 @@ void __nomcount cpu_relax(void)
barrier();
}
-static void cpu_wake(struct cpu_thread *cpu)
+static void cpu_send_ipi(struct cpu_thread *cpu)
{
- /* Is it idle ? If not, no need to wake */
- sync();
- if (!cpu->in_idle)
- return;
-
if (proc_gen == proc_gen_p8) {
/* Poke IPI */
icp_kick_cpu(cpu);
@@ -111,6 +106,14 @@ static void cpu_wake(struct cpu_thread *cpu)
}
}
+static void cpu_wake(struct cpu_thread *cpu)
+{
+ /* Is it idle ? If not, no need to wake */
+ sync();
+ if (cpu->in_idle)
+ cpu_send_ipi(cpu);
+}
+
/*
* If chip_id is >= 0, schedule the job on that node.
* Otherwise schedule the job anywhere.
@@ -195,8 +198,7 @@ static void queue_job_on_cpu(struct cpu_thread *cpu, struct cpu_job *job)
cpu->job_has_no_return = true;
else
cpu->job_count++;
- if (pm_enabled)
- cpu_wake(cpu);
+ cpu_wake(cpu);
unlock(&cpu->job_lock);
}
@@ -607,16 +609,9 @@ static void reconfigure_idle_start(void)
*/
sync();
- if (proc_gen == proc_gen_p8) {
- for_each_available_cpu(cpu) {
- if (cpu->in_sleep || cpu->in_idle)
- icp_kick_cpu(cpu);
- }
- } else if (proc_gen == proc_gen_p9 || proc_gen == proc_gen_p10) {
- for_each_available_cpu(cpu) {
- if (cpu->in_sleep || cpu->in_idle)
- p9_dbell_send(cpu->pir);
- }
+ for_each_available_cpu(cpu) {
+ if (cpu->in_sleep || cpu->in_idle)
+ cpu_send_ipi(cpu);
}
/*