Patch "cpu/SMT: Enable SMT only if a core is online" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    cpu/SMT: Enable SMT only if a core is online

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     cpu-smt-enable-smt-only-if-a-core-is-online.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit fe4005a1634762b93e63e0ed5edca8211994b75c
Author: Nysal Jan K.A <nysal@xxxxxxxxxxxxx>
Date:   Wed Jul 31 08:31:12 2024 +0530

    cpu/SMT: Enable SMT only if a core is online
    
    [ Upstream commit 6c17ea1f3eaa330d445ac14a9428402ce4e3055e ]
    
    If a core is offline then enabling SMT should not online CPUs of
    this core. By enabling SMT, what is intended is either changing the SMT
    value from "off" to "on" or setting the SMT level (threads per core) from a
    lower to higher value.
    
    On PowerPC the ppc64_cpu utility can be used, among other things, to
    perform the following functions:
    
    ppc64_cpu --cores-on                # Get the number of online cores
    ppc64_cpu --cores-on=X              # Put exactly X cores online
    ppc64_cpu --offline-cores=X[,Y,...] # Put specified cores offline
    ppc64_cpu --smt={on|off|value}      # Enable, disable or change SMT level
    
    If the user has decided to offline certain cores, enabling SMT should
    not online CPUs in those cores. This patch fixes the issue and changes
    the behaviour as described, by introducing an arch specific function
    topology_is_core_online(). It is currently implemented only for PowerPC.
    
    Fixes: 73c58e7e1412 ("powerpc: Add HOTPLUG_SMT support")
    Reported-by: Tyrel Datwyler <tyreld@xxxxxxxxxxxxx>
    Closes: https://groups.google.com/g/powerpc-utils-devel/c/wrwVzAAnRlI/m/5KJSoqP4BAAJ
    Signed-off-by: Nysal Jan K.A <nysal@xxxxxxxxxxxxx>
    Reviewed-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
    Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://msgid.link/20240731030126.956210-2-nysal@xxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu
index e7e160954e798..0579860b55299 100644
--- a/Documentation/ABI/testing/sysfs-devices-system-cpu
+++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
@@ -562,7 +562,8 @@ Description:	Control Symmetric Multi Threading (SMT)
 			 ================ =========================================
 
 			 If control status is "forceoff" or "notsupported" writes
-			 are rejected.
+			 are rejected. Note that enabling SMT on PowerPC skips
+			 offline cores.
 
 What:		/sys/devices/system/cpu/cpuX/power/energy_perf_bias
 Date:		March 2019
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 3d2bf1d50a0c4..6dee328bfe6fd 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -2679,6 +2679,16 @@ int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
 	return ret;
 }
 
+/**
+ * Check if the core a CPU belongs to is online
+ */
+#if !defined(topology_is_core_online)
+static inline bool topology_is_core_online(unsigned int cpu)
+{
+	return true;
+}
+#endif
+
 int cpuhp_smt_enable(void)
 {
 	int cpu, ret = 0;
@@ -2689,7 +2699,7 @@ int cpuhp_smt_enable(void)
 		/* Skip online CPUs and CPUs on offline nodes */
 		if (cpu_online(cpu) || !node_online(cpu_to_node(cpu)))
 			continue;
-		if (!cpu_smt_thread_allowed(cpu))
+		if (!cpu_smt_thread_allowed(cpu) || !topology_is_core_online(cpu))
 			continue;
 		ret = _cpu_up(cpu, 0, CPUHP_ONLINE);
 		if (ret)




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux