projects
/
platform
/
kernel
/
linux-exynos.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
3fb450a
)
x86: do not crash on non-Geode PCs in TSC probe
author
Ingo Molnar
<mingo@elte.hu>
Wed, 17 Oct 2007 16:04:34 +0000
(18:04 +0200)
committer
Thomas Gleixner
<tglx@inhelltoy.tec.linutronix.de>
Wed, 17 Oct 2007 18:15:37 +0000
(20:15 +0200)
with this fix Geode kernels can be booted (and QA-ed) on generic PCs.
otherwise it crashes and burns during early bootup:
Detected 2160.212 MHz processor.
general protection fault: 0000 [#1]
PREEMPT SMP
Modules linked in:
CPU: 0
EIP: 0060:[<
c09071f6
>] Not tainted VLI
EFLAGS:
00010002
(2.6.23-rc9 #90)
EIP is at tsc_init+0xa6/0x150
eax:
00000001
ebx:
c1dce000
ecx:
00001900
edx:
00000001
esi:
00051000
edi:
00051000
ebp:
c08fdfc4
esp:
c08fdfa4
ds: 007b es: 007b fs: 00d8 gs: 0000 ss: 0068
Process swapper (pid: 0, ti=
c08fc000
task=
c082a180
task.ti=
c08fc000
)
Stack:
c076b870
00000870
000000d4
0000001d
c0831e80
c1dce000
00051000
00051000
c08fdfcc
c09053f8
c08fdff8
c09045ff
000001e2
c09040a0
00051000
00000020
0004e500
c0932140
00020800
00099800
c08ed000
01409007
00000000
Call Trace:
[<
c010517a
>] show_trace_log_lvl+0x1a/0x30
[<
c0105246
>] show_stack_log_lvl+0xb6/0x100
[<
c0105732
>] show_registers+0x212/0x3a0
[<
c0105aa4
>] die+0x104/0x220
[<
c0105f5f
>] do_general_protection+0x1ef/0x2b0
[<
c06699f2
>] error_code+0x72/0x78
[<
c09053f8
>] time_init+0x8/0x20
[<
c09045ff
>] start_kernel+0x1af/0x320
[<
00000000
>] 0x0
=======================
Code: 31 d2 b8 00 00 09 3d f7 35 2c 70 9b c0 a3 04 95 8f c0 e8 ce 4e 99 ff b8 e0 45 93 c0 e8 94 b1 c5 ff e8 7f 3d 80 ff b9 00 19 00 00 <0f> 32 f6 c4 01 74 07 83 25 24 ce 82 c0 fd 8b 0d 20 ce 82 c0 b8
EIP: [<
c09071f6
>] tsc_init+0xa6/0x150 SS:ESP 0068:
c08fdfa4
Kernel panic - not syncing: Attempted to kill the idle task!
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/tsc_32.c
patch
|
blob
|
history
diff --git
a/arch/x86/kernel/tsc_32.c
b/arch/x86/kernel/tsc_32.c
index
b85ad75
..
e87a393
100644
(file)
--- a/
arch/x86/kernel/tsc_32.c
+++ b/
arch/x86/kernel/tsc_32.c
@@
-349,10
+349,10
@@
__cpuinit int unsynchronized_tsc(void)
static void __init check_geode_tsc_reliable(void)
{
- unsigned long
val
;
+ unsigned long
res_low, res_high
;
- rdmsr
l(MSR_GEODE_BUSCONT_CONF0, val
);
- if (
(val & RTSC_SUSP)
)
+ rdmsr
_safe(MSR_GEODE_BUSCONT_CONF0, &res_low, &res_high
);
+ if (
res_low & RTSC_SUSP
)
clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
}
#else