96 lines
4.4 KiB
Diff
96 lines
4.4 KiB
Diff
|
# HG changeset patch
|
||
|
# User Ian Campbell <ian.campbell@citrix.com>
|
||
|
# Date 1321363478 -3600
|
||
|
# Node ID cd3ef25f207a3925f1f8650c227e24f839da13ad
|
||
|
# Parent 848049b14ec7fbd28bd4cd756e01609698b60c7a
|
||
|
xen: avoid crash enabling turbo mode
|
||
|
|
||
|
On a system which has not had P-state information pushed down into the
|
||
|
hypervisor running "xenpm enable-turbo-mode" will reliably crash the host.
|
||
|
|
||
|
(XEN) PM OP 38 on CPU0
|
||
|
(XEN) ----[ Xen-4.2-unstable x86_64 debug=y Not tainted ]----
|
||
|
(XEN) CPU: 0
|
||
|
(XEN) RIP: e008:[<ffff82c48013ceed>] cpufreq_enable_turbo+0x1d/0x29
|
||
|
(XEN) RFLAGS: 0000000000010297 CONTEXT: hypervisor
|
||
|
(XEN) rax: 0000000000000000 rbx: ffff82c48029fe40 rcx: 0000000000000000
|
||
|
(XEN) rdx: 0000000000000000 rsi: 000000000000000a rdi: 0000000000000000
|
||
|
(XEN) rbp: ffff82c48029fd08 rsp: ffff82c48029fd08 r8: 0000000000000004
|
||
|
(XEN) r9: 0000000000000000 r10: 00000000fffffffd r11: ffff82c480218f20
|
||
|
(XEN) r12: ffff830106e720b0 r13: 0000000000000000 r14: ffff82c4802bff80
|
||
|
(XEN) r15: ffff82c48025c0e4 cr0: 000000008005003b cr4: 00000000000026f0
|
||
|
(XEN) cr3: 000000011f459000 cr2: 0000000000000051
|
||
|
(XEN) ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0000 cs: e008
|
||
|
(XEN) Xen stack trace from rsp=ffff82c48029fd08:
|
||
|
(XEN) ffff82c48029fdb8 ffff82c48014c427 ffff82c48029fd98 ffff82c48016b2d6
|
||
|
(XEN) ffff82c48029fdb8 ffff82c48029fd60 00000000001196c5 0000000116bbe025
|
||
|
(XEN) 0000000116bbe025 ffff8301196c5338 ffff82f6022d77c0 0000000000000000
|
||
|
(XEN) ffff82f60205edf0 0000000000000000 0000000000000000 ffff8300dffba000
|
||
|
(XEN) ffff82c48029fdb8 ffff82c48029ff18 0000000008050004 0000000000000000
|
||
|
(XEN) ffff82c4802bff80 ffff82c48025c0e4 ffff82c48029fef8 ffff82c480124fd8
|
||
|
(XEN) 0000000000000000 ffff83011f48c000 0000000116bbe025 0000000000000025
|
||
|
(XEN) ffff82c48029fe28 0000000080167722 ffff82c48029ff08 ffff83011f48c000
|
||
|
(XEN) ffff82f60232d8a0 ffff8300dffba000 ffff83011f48c000 ffff82f60232d8a0
|
||
|
(XEN) ffff82c48029fed8 ffff82c48017296a 000000080000000c 0000000000000026
|
||
|
(XEN) bfb338b000000000 bfb33874bfb33868 b78988f800000000 0000008800000000
|
||
|
(XEN) b787a6e0b78533a0 ffffffff00000001 080487aeb7897ff4 bfb3389000000001
|
||
|
(XEN) b7898ab0b7889626 0000000100000000 0000000000000001 0804867800000001
|
||
|
(XEN) 000000000804e998 00000000b78533a0 bfb33e70bfb33a7c 0000000000000000
|
||
|
(XEN) 0000000000000000 ffff8300dffba000 0000000000000000 0000000000000000
|
||
|
(XEN) 0000000000000000 0000000000000000 00007d3b7fd600c7 ffff82c48021511e
|
||
|
(XEN) 00000000c1002467 0000000000000023 0000000000000000 0000000000000000
|
||
|
(XEN) 0000000000000000 0000000000000000 00000000dbf5bef8 0000000008050004
|
||
|
(XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000
|
||
|
(XEN) 0000000000000023 00000000bfb33874 00000000bfb33868 0000000000000000
|
||
|
(XEN) Xen call trace:
|
||
|
(XEN) [<ffff82c48013ceed>] cpufreq_enable_turbo+0x1d/0x29
|
||
|
(XEN) [<ffff82c48014c427>] do_pm_op+0x884/0x8e7
|
||
|
(XEN) [<ffff82c480124fd8>] do_sysctl+0x6d8/0x9f0
|
||
|
(XEN) [<ffff82c48021511e>] compat_hypercall+0xae/0x107
|
||
|
(XEN)
|
||
|
(XEN) Pagetable walk from 0000000000000051:
|
||
|
(XEN) L4[0x000] = 0000000116dbc027 000000000001bd22
|
||
|
(XEN) L3[0x000] = 0000000119ba8027 000000000001eb36
|
||
|
(XEN) L2[0x000] = 0000000000000000 ffffffffffffffff
|
||
|
(XEN)
|
||
|
(XEN) ****************************************
|
||
|
(XEN) Panic on CPU 0:
|
||
|
(XEN) FATAL PAGE FAULT
|
||
|
(XEN) [error_code=0000]
|
||
|
(XEN) Faulting linear address: 0000000000000051
|
||
|
(XEN) ****************************************
|
||
|
(XEN)
|
||
|
|
||
|
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
|
||
|
Committed-by: Jan Beulich <jbeulich@suse.com>
|
||
|
|
||
|
--- a/xen/drivers/cpufreq/utility.c
|
||
|
+++ b/xen/drivers/cpufreq/utility.c
|
||
|
@@ -400,7 +400,7 @@ void cpufreq_enable_turbo(int cpuid)
|
||
|
struct cpufreq_policy *policy;
|
||
|
|
||
|
policy = per_cpu(cpufreq_cpu_policy, cpuid);
|
||
|
- if (policy->turbo != CPUFREQ_TURBO_UNSUPPORTED)
|
||
|
+ if (policy && policy->turbo != CPUFREQ_TURBO_UNSUPPORTED)
|
||
|
policy->turbo = CPUFREQ_TURBO_ENABLED;
|
||
|
}
|
||
|
|
||
|
@@ -409,7 +409,7 @@ void cpufreq_disable_turbo(int cpuid)
|
||
|
struct cpufreq_policy *policy;
|
||
|
|
||
|
policy = per_cpu(cpufreq_cpu_policy, cpuid);
|
||
|
- if (policy->turbo != CPUFREQ_TURBO_UNSUPPORTED)
|
||
|
+ if (policy && policy->turbo != CPUFREQ_TURBO_UNSUPPORTED)
|
||
|
policy->turbo = CPUFREQ_TURBO_DISABLED;
|
||
|
}
|
||
|
|
||
|
@@ -418,7 +418,7 @@ int cpufreq_get_turbo_status(int cpuid)
|
||
|
struct cpufreq_policy *policy;
|
||
|
|
||
|
policy = per_cpu(cpufreq_cpu_policy, cpuid);
|
||
|
- return policy->turbo;
|
||
|
+ return policy && policy->turbo;
|
||
|
}
|
||
|
|
||
|
/*********************************************************************
|