Skip to contentSkip to conversation

Use common outgoing-CPU-notification code

PATCH In review Paul E. McKenney 2 participants 5 messages Jun 11, 2019 – Jun 26, 2019 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Use common outgoing-CPU-notification code

This commit removes the open-coded CPU-offline notification with new common code. In particular, this change avoids calling scheduler code using RCU from an offline CPU that RCU is ignoring. This is a minimal change. A more intrusive change might invoke the cpu_check_up_prepare() and cpu_set_state_online() functions at CPU-online time, which would allow onlining throw an error if the CPU did not go offline properly.

arch/arm/kernel/smp.c +2 -4
index ebc53804d57b..8687d619260f 100644
@@ -267,15 +267,13 @@ int __cpu_disable(void)
 	return 0;
 }
 
-static DECLARE_COMPLETION(cpu_died);
-
 /*
  * called on the thread which is asking for a CPU to be shutdown -
  * waits until shutdown has completed, or it is timed out.
  */
 void __cpu_die(unsigned int cpu)
 {
-	if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) {
+	if (!cpu_wait_death(cpu, 5)) {
 		pr_err("CPU%u: cpu didn't die\n", cpu);
 		return;
 	}
@@ -322,7 +320,7 @@ void arch_cpu_idle_dead(void)
 	 * this returns, power and/or clocks can be removed at any point
 	 * from this CPU and its cache by platform_cpu_kill().
 	 */
-	complete(&cpu_died);
+	(void)cpu_report_death();
 
 	/*
 	 * Ensure that the cache lines associated with that completion are
Acked-by on v1 1/1
#1 lore raw
Quoted 7 lines · Paul E. McKenney

This commit removes the open-coded CPU-offline notification with new common code. In particular, this change avoids calling scheduler code using RCU from an offline CPU that RCU is ignoring. This is a minimal change. A more intrusive change might invoke the cpu_check_up_prepare() and cpu_set_state_online() functions at CPU-online time, which would allow onlining throw an error if the CPU did not go offline properly.

Quoted 5 lines

FWIW:

On the assumption that Russell is ok with this, I think this should be dropped into the ARM patch system [1].

Paul, are you familiar with that, or would you prefer that someone else submits the patch there? I can do so if you'd like.

Thanks,
Mark.

[1] https://www.armlinux.org.uk/developer/patches/info.php

Quoted 32 lines
arch/arm/kernel/smp.c +2 -4
index ebc53804d57b..8687d619260f 100644
@@ -267,15 +267,13 @@ int __cpu_disable(void)
 	return 0;
 }
 
-static DECLARE_COMPLETION(cpu_died);
-
 /*
  * called on the thread which is asking for a CPU to be shutdown -
  * waits until shutdown has completed, or it is timed out.
  */
 void __cpu_die(unsigned int cpu)
 {
-	if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) {
+	if (!cpu_wait_death(cpu, 5)) {
 		pr_err("CPU%u: cpu didn't die\n", cpu);
 		return;
 	}
@@ -322,7 +320,7 @@ void arch_cpu_idle_dead(void)
 	 * this returns, power and/or clocks can be removed at any point
 	 * from this CPU and its cache by platform_cpu_kill().
 	 */
-	complete(&cpu_died);
+	(void)cpu_report_death();
 
 	/*
 	 * Ensure that the cache lines associated with that completion are
#2 lore raw
Quoted 16 lines · Mark Rutland
Quoted 7 lines · Paul E. McKenney

This commit removes the open-coded CPU-offline notification with new common code. In particular, this change avoids calling scheduler code using RCU from an offline CPU that RCU is ignoring. This is a minimal change. A more intrusive change might invoke the cpu_check_up_prepare() and cpu_set_state_online() functions at CPU-online time, which would allow onlining throw an error if the CPU did not go offline properly.

Quoted 5 lines

FWIW:

Quoted 7 lines

On the assumption that Russell is ok with this, I think this should be dropped into the ARM patch system [1].

Paul, are you familiar with that, or would you prefer that someone else submits the patch there? I can do so if you'd like.

I never have used this system, so please do drop it in there! Let me know when you have done so, and I will then drop it from -rcu.

Thanx, Paul

Quoted 34 lines

Thanks,
Mark.

[1] https://www.armlinux.org.uk/developer/patches/info.php

Quoted 29 lines
arch/arm/kernel/smp.c +2 -4
index ebc53804d57b..8687d619260f 100644
@@ -267,15 +267,13 @@ int __cpu_disable(void)
 	return 0;
 }
 
-static DECLARE_COMPLETION(cpu_died);
-
 /*
  * called on the thread which is asking for a CPU to be shutdown -
  * waits until shutdown has completed, or it is timed out.
  */
 void __cpu_die(unsigned int cpu)
 {
-	if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) {
+	if (!cpu_wait_death(cpu, 5)) {
 		pr_err("CPU%u: cpu didn't die\n", cpu);
 		return;
 	}
@@ -322,7 +320,7 @@ void arch_cpu_idle_dead(void)
 	 * this returns, power and/or clocks can be removed at any point
 	 * from this CPU and its cache by platform_cpu_kill().
 	 */
-	complete(&cpu_died);
+	(void)cpu_report_death();
 
Quoted 4 lines

arch/arm/kernel/smp.c void arch_cpu_idle_dead(void) · line 326

Quoted 3 lines
arch/arm/kernel/smp.c +0 -0
 	/*
 	 * Ensure that the cache lines associated with that completion are

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#3 lore raw
Quoted 19 lines · Paul E. McKenney
Quoted 18 lines · Mark Rutland
Quoted 7 lines · Paul E. McKenney

This commit removes the open-coded CPU-offline notification with new common code. In particular, this change avoids calling scheduler code using RCU from an offline CPU that RCU is ignoring. This is a minimal change. A more intrusive change might invoke the cpu_check_up_prepare() and cpu_set_state_online() functions at CPU-online time, which would allow onlining throw an error if the CPU did not go offline properly.

Quoted 5 lines

FWIW:

Quoted 8 lines
Quoted 5 lines

On the assumption that Russell is ok with this, I think this should be dropped into the ARM patch system [1].

Paul, are you familiar with that, or would you prefer that someone else submits the patch there? I can do so if you'd like.

I never have used this system, so please do drop it in there! Let me know when you have done so, and I will then drop it from -rcu.

After testing that multi_v7_defconfig built, I've just submitted this as 8872/1:

https://www.armlinux.org.uk/developer/patches/viewpatch.php?id=8872/1

Thanks,
Mark.

#4 lore raw
Quoted 26 lines · Mark Rutland
Quoted 25 lines · Paul E. McKenney
Quoted 23 lines · Mark Rutland
Quoted 7 lines · Paul E. McKenney

This commit removes the open-coded CPU-offline notification with new common code. In particular, this change avoids calling scheduler code using RCU from an offline CPU that RCU is ignoring. This is a minimal change. A more intrusive change might invoke the cpu_check_up_prepare() and cpu_set_state_online() functions at CPU-online time, which would allow onlining throw an error if the CPU did not go offline properly.

Quoted 5 lines

FWIW:

On the assumption that Russell is ok with this, I think this should be dropped into the ARM patch system [1].

Paul, are you familiar with that, or would you prefer that someone else submits the patch there? I can do so if you'd like.

Quoted 7 lines
Quoted 2 lines

I never have used this system, so please do drop it in there! Let me know when you have done so, and I will then drop it from -rcu.

After testing that multi_v7_defconfig built, I've just submitted this as 8872/1:

https://www.armlinux.org.uk/developer/patches/viewpatch.php?id=8872/1

Very good, thank you! I will drop this from my -rcu tree.

Thanx, Paul