aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2006-09-26 04:52:32 -0400
committerAndi Kleen <andi@basil.nowhere.org>2006-09-26 04:52:32 -0400
commit9ca33eb6981549c0d1b7aea7f99f1ba602161356 (patch)
tree9b74231b83fdf834f40fac40b95b0b6656835b9b /arch
parentd4d35854a1cf7fb170c8e133a5e40a9d19e7fc17 (diff)
[PATCH] Use early CPU identify before early command line parsing
This makes it possible to modify CPU flags in command line options without hacks. And remove another copy in head64.c Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/kernel/head64.c19
-rw-r--r--arch/x86_64/kernel/setup.c4
2 files changed, 2 insertions, 21 deletions
diff --git a/arch/x86_64/kernel/head64.c b/arch/x86_64/kernel/head64.c
index bacbd75c63ad..f2461fde9f8f 100644
--- a/arch/x86_64/kernel/head64.c
+++ b/arch/x86_64/kernel/head64.c
@@ -56,24 +56,6 @@ static void __init copy_bootdata(char *real_mode_data)
56 printk("Bootdata ok (command line is %s)\n", saved_command_line); 56 printk("Bootdata ok (command line is %s)\n", saved_command_line);
57} 57}
58 58
59static void __init setup_boot_cpu_data(void)
60{
61 unsigned int dummy, eax;
62
63 /* get vendor info */
64 cpuid(0, (unsigned int *)&boot_cpu_data.cpuid_level,
65 (unsigned int *)&boot_cpu_data.x86_vendor_id[0],
66 (unsigned int *)&boot_cpu_data.x86_vendor_id[8],
67 (unsigned int *)&boot_cpu_data.x86_vendor_id[4]);
68
69 /* get cpu type */
70 cpuid(1, &eax, &dummy, &dummy,
71 (unsigned int *) &boot_cpu_data.x86_capability);
72 boot_cpu_data.x86 = (eax >> 8) & 0xf;
73 boot_cpu_data.x86_model = (eax >> 4) & 0xf;
74 boot_cpu_data.x86_mask = eax & 0xf;
75}
76
77void __init x86_64_start_kernel(char * real_mode_data) 59void __init x86_64_start_kernel(char * real_mode_data)
78{ 60{
79 char *s; 61 char *s;
@@ -117,6 +99,5 @@ void __init x86_64_start_kernel(char * real_mode_data)
117 if (__pa_symbol(&_end) >= KERNEL_TEXT_SIZE) 99 if (__pa_symbol(&_end) >= KERNEL_TEXT_SIZE)
118 panic("Kernel too big for kernel mapping\n"); 100 panic("Kernel too big for kernel mapping\n");
119 101
120 setup_boot_cpu_data();
121 start_kernel(); 102 start_kernel();
122} 103}
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index ddc3b2d9a165..73f1cdd140fe 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -545,10 +545,10 @@ void __init setup_arch(char **cmdline_p)
545 data_resource.start = virt_to_phys(&_etext); 545 data_resource.start = virt_to_phys(&_etext);
546 data_resource.end = virt_to_phys(&_edata)-1; 546 data_resource.end = virt_to_phys(&_edata)-1;
547 547
548 parse_cmdline_early(cmdline_p);
549
550 early_identify_cpu(&boot_cpu_data); 548 early_identify_cpu(&boot_cpu_data);
551 549
550 parse_cmdline_early(cmdline_p);
551
552 /* 552 /*
553 * partially used pages are not usable - thus 553 * partially used pages are not usable - thus
554 * we are rounding upwards: 554 * we are rounding upwards: