diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-07-13 17:30:35 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-14 03:24:16 -0400 |
commit | 87a1c441e1aeaf00f97e63dfc310ea7684ec9dda (patch) | |
tree | 0fb5840a55d833cb0be7f000e8c85e02ff1f5336 /arch/x86/kernel | |
parent | 32b23e9a7331fce57eb0af52e19e8409fdef831b (diff) |
x86: get x86_phys_bits early
when try to make hpet_enable use io_remap instead fixmap got
ioremap: invalid physical address fed00000
------------[ cut here ]------------
WARNING: at arch/x86/mm/ioremap.c:161 __ioremap_caller+0x8c/0x2f3()
Modules linked in:
Pid: 0, comm: swapper Not tainted 2.6.26-rc9-tip-01873-ga9827e7-dirty #358
Call Trace:
[<ffffffff8026615e>] warn_on_slowpath+0x6c/0xa7
[<ffffffff802e2313>] ? __slab_alloc+0x20a/0x3fb
[<ffffffff802d85c5>] ? mpol_new+0x88/0x17d
[<ffffffff8022a4f4>] ? mcount_call+0x5/0x31
[<ffffffff8022a4f4>] ? mcount_call+0x5/0x31
[<ffffffff8024b0d2>] __ioremap_caller+0x8c/0x2f3
[<ffffffff80e86dbd>] ? hpet_enable+0x39/0x241
[<ffffffff8022a4f4>] ? mcount_call+0x5/0x31
[<ffffffff8024b466>] ioremap_nocache+0x2a/0x40
[<ffffffff80e86dbd>] hpet_enable+0x39/0x241
[<ffffffff80e7a1f6>] hpet_time_init+0x21/0x4e
[<ffffffff80e730e9>] start_kernel+0x302/0x395
[<ffffffff80e722aa>] x86_64_start_reservations+0xb9/0xd4
[<ffffffff80e722fe>] ? x86_64_init_pda+0x39/0x4f
[<ffffffff80e72400>] x86_64_start_kernel+0xec/0x107
---[ end trace a7919e7f17c0a725 ]---
it seems for amd system that is set later...
try to move setting early in early_identify_cpu.
and remove same code for intel and centaur.
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/cpu/centaur_64.c | 10 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/common_64.c | 14 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/intel_64.c | 10 |
3 files changed, 8 insertions, 26 deletions
diff --git a/arch/x86/kernel/cpu/centaur_64.c b/arch/x86/kernel/cpu/centaur_64.c index 2026d2119cdb..1d181c40e2e1 100644 --- a/arch/x86/kernel/cpu/centaur_64.c +++ b/arch/x86/kernel/cpu/centaur_64.c | |||
@@ -16,16 +16,6 @@ static void __cpuinit early_init_centaur(struct cpuinfo_x86 *c) | |||
16 | 16 | ||
17 | static void __cpuinit init_centaur(struct cpuinfo_x86 *c) | 17 | static void __cpuinit init_centaur(struct cpuinfo_x86 *c) |
18 | { | 18 | { |
19 | /* Cache sizes */ | ||
20 | unsigned n; | ||
21 | |||
22 | n = c->extended_cpuid_level; | ||
23 | if (n >= 0x80000008) { | ||
24 | unsigned eax = cpuid_eax(0x80000008); | ||
25 | c->x86_virt_bits = (eax >> 8) & 0xff; | ||
26 | c->x86_phys_bits = eax & 0xff; | ||
27 | } | ||
28 | |||
29 | if (c->x86 == 0x6 && c->x86_model >= 0xf) { | 19 | if (c->x86 == 0x6 && c->x86_model >= 0xf) { |
30 | c->x86_cache_alignment = c->x86_clflush_size * 2; | 20 | c->x86_cache_alignment = c->x86_clflush_size * 2; |
31 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); | 21 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); |
diff --git a/arch/x86/kernel/cpu/common_64.c b/arch/x86/kernel/cpu/common_64.c index 36537ab9e56a..7b8cc72feb40 100644 --- a/arch/x86/kernel/cpu/common_64.c +++ b/arch/x86/kernel/cpu/common_64.c | |||
@@ -98,7 +98,7 @@ int __cpuinit get_model_name(struct cpuinfo_x86 *c) | |||
98 | 98 | ||
99 | void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c) | 99 | void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c) |
100 | { | 100 | { |
101 | unsigned int n, dummy, eax, ebx, ecx, edx; | 101 | unsigned int n, dummy, ebx, ecx, edx; |
102 | 102 | ||
103 | n = c->extended_cpuid_level; | 103 | n = c->extended_cpuid_level; |
104 | 104 | ||
@@ -121,11 +121,6 @@ void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c) | |||
121 | printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", | 121 | printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", |
122 | c->x86_cache_size, ecx & 0xFF); | 122 | c->x86_cache_size, ecx & 0xFF); |
123 | } | 123 | } |
124 | if (n >= 0x80000008) { | ||
125 | cpuid(0x80000008, &eax, &dummy, &dummy, &dummy); | ||
126 | c->x86_virt_bits = (eax >> 8) & 0xff; | ||
127 | c->x86_phys_bits = eax & 0xff; | ||
128 | } | ||
129 | } | 124 | } |
130 | 125 | ||
131 | void __cpuinit detect_ht(struct cpuinfo_x86 *c) | 126 | void __cpuinit detect_ht(struct cpuinfo_x86 *c) |
@@ -314,6 +309,13 @@ static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c) | |||
314 | if (c->extended_cpuid_level >= 0x80000007) | 309 | if (c->extended_cpuid_level >= 0x80000007) |
315 | c->x86_power = cpuid_edx(0x80000007); | 310 | c->x86_power = cpuid_edx(0x80000007); |
316 | 311 | ||
312 | if (c->extended_cpuid_level >= 0x80000008) { | ||
313 | u32 eax = cpuid_eax(0x80000008); | ||
314 | |||
315 | c->x86_virt_bits = (eax >> 8) & 0xff; | ||
316 | c->x86_phys_bits = eax & 0xff; | ||
317 | } | ||
318 | |||
317 | /* Assume all 64-bit CPUs support 32-bit syscall */ | 319 | /* Assume all 64-bit CPUs support 32-bit syscall */ |
318 | set_cpu_cap(c, X86_FEATURE_SYSCALL32); | 320 | set_cpu_cap(c, X86_FEATURE_SYSCALL32); |
319 | 321 | ||
diff --git a/arch/x86/kernel/cpu/intel_64.c b/arch/x86/kernel/cpu/intel_64.c index 02f773399e39..1019c58d39f0 100644 --- a/arch/x86/kernel/cpu/intel_64.c +++ b/arch/x86/kernel/cpu/intel_64.c | |||
@@ -54,9 +54,6 @@ static void __cpuinit srat_detect_node(void) | |||
54 | 54 | ||
55 | static void __cpuinit init_intel(struct cpuinfo_x86 *c) | 55 | static void __cpuinit init_intel(struct cpuinfo_x86 *c) |
56 | { | 56 | { |
57 | /* Cache sizes */ | ||
58 | unsigned n; | ||
59 | |||
60 | init_intel_cacheinfo(c); | 57 | init_intel_cacheinfo(c); |
61 | if (c->cpuid_level > 9) { | 58 | if (c->cpuid_level > 9) { |
62 | unsigned eax = cpuid_eax(10); | 59 | unsigned eax = cpuid_eax(10); |
@@ -78,13 +75,6 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
78 | if (cpu_has_bts) | 75 | if (cpu_has_bts) |
79 | ds_init_intel(c); | 76 | ds_init_intel(c); |
80 | 77 | ||
81 | n = c->extended_cpuid_level; | ||
82 | if (n >= 0x80000008) { | ||
83 | unsigned eax = cpuid_eax(0x80000008); | ||
84 | c->x86_virt_bits = (eax >> 8) & 0xff; | ||
85 | c->x86_phys_bits = eax & 0xff; | ||
86 | } | ||
87 | |||
88 | if (c->x86 == 15) | 78 | if (c->x86 == 15) |
89 | c->x86_cache_alignment = c->x86_clflush_size * 2; | 79 | c->x86_cache_alignment = c->x86_clflush_size * 2; |
90 | if (c->x86 == 6) | 80 | if (c->x86 == 6) |