]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.arch/amd_magny_cour_topology_fix_1.patch
Fix oinkmaster patch.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / amd_magny_cour_topology_fix_1.patch
CommitLineData
82094b55
AF
1From: Andreas Herrmann <andreas.herrmann3@amd.com>
2Subject: x86, sched: Workaround broken sched domain creation for AMD Magny-Cours
3References: fate#307306
4Patch-Mainline: yes
5Commit-ID: 5a925b4282d7f805deafde62001a83dbaf8be275
6
7Signed-off-by: Thomas Renninger <trenn@suse.de>
8
9Current sched domain creation code can't handle multi-node processors.
10When switching to power_savings scheduling errors show up and
11system 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
36Fixing all aspects of power-savings scheduling for Magny-Cours needs
37some larger changes in the sched domain creation code.
38
39As a short-term and temporary workaround avoid the problems by
40extending "the worst possible hack" ;-(
41and always use llc_shared_map on AMD Magny-Cours when MC domain span
42is calculated.
43
44With 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
56I.e. no errors during sched domain creation, no system hangs, and also
57mc_power_savings scheduling works to a certain extend.
58
59Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
60Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
61Signed-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
67Index: 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;