1 From: Andreas Herrmann <andreas.herrmann3@amd.com>
2 Subject: x86, sched: Workaround broken sched domain creation for AMD Magny-Cours
3 References: fate#307306
5 Commit-ID: 5a925b4282d7f805deafde62001a83dbaf8be275
7 Signed-off-by: Thomas Renninger <trenn@suse.de>
9 Current sched domain creation code can't handle multi-node processors.
10 When switching to power_savings scheduling errors show up and
11 system might hang later on (due to broken sched domain hierarchy):
13 # echo 0 >> /sys/devices/system/cpu/sched_mc_power_savings
14 CPU0 attaching sched-domain:
15 domain 0: span 0-5 level MC
17 domain 1: span 0-23 level NODE
18 groups: 0-5 6-11 18-23 12-17
20 # echo 1 >> /sys/devices/system/cpu/sched_mc_power_savings
21 CPU0 attaching sched-domain:
22 domain 0: span 0-11 level MC
23 groups: 0 1 2 3 4 5 6 7 8 9 10 11
24 ERROR: parent span is not a superset of domain->span
25 domain 1: span 0-5 level CPU
26 ERROR: domain->groups does not contain CPU0
27 groups: 6-11 (__cpu_power = 12288)
28 ERROR: groups don't span domain->span
29 domain 2: span 0-23 level NODE
31 ERROR: domain->cpu_power not set
33 ERROR: groups don't span domain->span
36 Fixing all aspects of power-savings scheduling for Magny-Cours needs
37 some larger changes in the sched domain creation code.
39 As a short-term and temporary workaround avoid the problems by
40 extending "the worst possible hack" ;-(
41 and always use llc_shared_map on AMD Magny-Cours when MC domain span
46 # echo 1 >> /sys/devices/system/cpu/sched_mc_power_savings
47 CPU0 attaching sched-domain:
48 domain 0: span 0-5 level MC
50 domain 1: span 0-5 level CPU
51 groups: 0-5 (__cpu_power = 6144)
52 domain 2: span 0-23 level NODE
53 groups: 0-5 (__cpu_power = 6144) 6-11 (__cpu_power = 6144) 18-23 (__cpu_power = 6144) 12-17 (__cpu_power = 6144)
56 I.e. no errors during sched domain creation, no system hangs, and also
57 mc_power_savings scheduling works to a certain extend.
59 Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
60 Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
61 Signed-off-by: H. Peter Anvin <hpa@zytor.com>
64 arch/x86/kernel/smpboot.c | 3 ++-
65 1 file changed, 2 insertions(+), 1 deletion(-)
67 Index: linux-2.6.27-SLE11_BRANCH/arch/x86/kernel/smpboot.c
68 ===================================================================
69 --- linux-2.6.27-SLE11_BRANCH.orig/arch/x86/kernel/smpboot.c
70 +++ linux-2.6.27-SLE11_BRANCH/arch/x86/kernel/smpboot.c
71 @@ -502,7 +502,8 @@ cpumask_t cpu_coregroup_map(int cpu)
72 * For perf, we return last level cache shared map.
73 * And for power savings, we return cpu_core_map
75 - if (sched_mc_power_savings || sched_smt_power_savings)
76 + if ((sched_mc_power_savings || sched_smt_power_savings) &&
77 + !(cpu_has(c, X86_FEATURE_AMD_DCM)))
78 return per_cpu(cpu_core_map, cpu);
80 return c->llc_shared_map;