]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.39/patches.arch/amd_magny_cour_topology_fix_1.patch
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / amd_magny_cour_topology_fix_1.patch
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
4 Patch-Mainline: yes
5 Commit-ID: 5a925b4282d7f805deafde62001a83dbaf8be275
6
7 Signed-off-by: Thomas Renninger <trenn@suse.de>
8
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):
12
13 # echo 0 >> /sys/devices/system/cpu/sched_mc_power_savings
14 CPU0 attaching sched-domain:
15 domain 0: span 0-5 level MC
16 groups: 0 1 2 3 4 5
17 domain 1: span 0-23 level NODE
18 groups: 0-5 6-11 18-23 12-17
19 ...
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
30 groups:
31 ERROR: domain->cpu_power not set
32
33 ERROR: groups don't span domain->span
34 ...
35
36 Fixing all aspects of power-savings scheduling for Magny-Cours needs
37 some larger changes in the sched domain creation code.
38
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
42 is calculated.
43
44 With this I get:
45
46 # echo 1 >> /sys/devices/system/cpu/sched_mc_power_savings
47 CPU0 attaching sched-domain:
48 domain 0: span 0-5 level MC
49 groups: 0 1 2 3 4 5
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)
54 ...
55
56 I.e. no errors during sched domain creation, no system hangs, and also
57 mc_power_savings scheduling works to a certain extend.
58
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>
62
63 ---
64 arch/x86/kernel/smpboot.c | 3 ++-
65 1 file changed, 2 insertions(+), 1 deletion(-)
66
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
74 */
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);
79 else
80 return c->llc_shared_map;