diff options
Diffstat (limited to 'arch/x86/kernel')
27 files changed, 266 insertions, 296 deletions
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index b13d3c4dbd42..566a08466b19 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c | |||
@@ -31,9 +31,11 @@ | |||
31 | #include <linux/dmi.h> | 31 | #include <linux/dmi.h> |
32 | #include <linux/dmar.h> | 32 | #include <linux/dmar.h> |
33 | #include <linux/ftrace.h> | 33 | #include <linux/ftrace.h> |
34 | #include <linux/smp.h> | ||
35 | #include <linux/nmi.h> | ||
36 | #include <linux/timex.h> | ||
34 | 37 | ||
35 | #include <asm/atomic.h> | 38 | #include <asm/atomic.h> |
36 | #include <asm/smp.h> | ||
37 | #include <asm/mtrr.h> | 39 | #include <asm/mtrr.h> |
38 | #include <asm/mpspec.h> | 40 | #include <asm/mpspec.h> |
39 | #include <asm/desc.h> | 41 | #include <asm/desc.h> |
@@ -41,10 +43,8 @@ | |||
41 | #include <asm/hpet.h> | 43 | #include <asm/hpet.h> |
42 | #include <asm/pgalloc.h> | 44 | #include <asm/pgalloc.h> |
43 | #include <asm/i8253.h> | 45 | #include <asm/i8253.h> |
44 | #include <asm/nmi.h> | ||
45 | #include <asm/idle.h> | 46 | #include <asm/idle.h> |
46 | #include <asm/proto.h> | 47 | #include <asm/proto.h> |
47 | #include <asm/timex.h> | ||
48 | #include <asm/apic.h> | 48 | #include <asm/apic.h> |
49 | #include <asm/i8259.h> | 49 | #include <asm/i8259.h> |
50 | 50 | ||
@@ -687,7 +687,7 @@ static int __init calibrate_APIC_clock(void) | |||
687 | local_irq_enable(); | 687 | local_irq_enable(); |
688 | 688 | ||
689 | if (levt->features & CLOCK_EVT_FEAT_DUMMY) { | 689 | if (levt->features & CLOCK_EVT_FEAT_DUMMY) { |
690 | pr_warning("APIC timer disabled due to verification failure.\n"); | 690 | pr_warning("APIC timer disabled due to verification failure\n"); |
691 | return -1; | 691 | return -1; |
692 | } | 692 | } |
693 | 693 | ||
@@ -2087,14 +2087,12 @@ __cpuinit int apic_is_clustered_box(void) | |||
2087 | /* are we being called early in kernel startup? */ | 2087 | /* are we being called early in kernel startup? */ |
2088 | if (bios_cpu_apicid) { | 2088 | if (bios_cpu_apicid) { |
2089 | id = bios_cpu_apicid[i]; | 2089 | id = bios_cpu_apicid[i]; |
2090 | } | 2090 | } else if (i < nr_cpu_ids) { |
2091 | else if (i < nr_cpu_ids) { | ||
2092 | if (cpu_present(i)) | 2091 | if (cpu_present(i)) |
2093 | id = per_cpu(x86_bios_cpu_apicid, i); | 2092 | id = per_cpu(x86_bios_cpu_apicid, i); |
2094 | else | 2093 | else |
2095 | continue; | 2094 | continue; |
2096 | } | 2095 | } else |
2097 | else | ||
2098 | break; | 2096 | break; |
2099 | 2097 | ||
2100 | if (id != BAD_APICID) | 2098 | if (id != BAD_APICID) |
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c index 3a26525a3f31..98807bb095ad 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c | |||
@@ -160,9 +160,9 @@ | |||
160 | * Work around byte swap bug in one of the Vaio's BIOS's | 160 | * Work around byte swap bug in one of the Vaio's BIOS's |
161 | * (Marc Boucher <marc@mbsi.ca>). | 161 | * (Marc Boucher <marc@mbsi.ca>). |
162 | * Exposed the disable flag to dmi so that we can handle known | 162 | * Exposed the disable flag to dmi so that we can handle known |
163 | * broken APM (Alan Cox <alan@redhat.com>). | 163 | * broken APM (Alan Cox <alan@lxorguk.ukuu.org.uk>). |
164 | * 1.14ac: If the BIOS says "I slowed the CPU down" then don't spin | 164 | * 1.14ac: If the BIOS says "I slowed the CPU down" then don't spin |
165 | * calling it - instead idle. (Alan Cox <alan@redhat.com>) | 165 | * calling it - instead idle. (Alan Cox <alan@lxorguk.ukuu.org.uk>) |
166 | * If an APM idle fails log it and idle sensibly | 166 | * If an APM idle fails log it and idle sensibly |
167 | * 1.15: Don't queue events to clients who open the device O_WRONLY. | 167 | * 1.15: Don't queue events to clients who open the device O_WRONLY. |
168 | * Don't expect replies from clients who open the device O_RDONLY. | 168 | * Don't expect replies from clients who open the device O_RDONLY. |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_32.c b/arch/x86/kernel/cpu/mcheck/mce_32.c index 0ebf3fc6a610..dfaebce3633e 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_32.c +++ b/arch/x86/kernel/cpu/mcheck/mce_32.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * mce.c - x86 Machine Check Exception Reporting | 2 | * mce.c - x86 Machine Check Exception Reporting |
3 | * (c) 2002 Alan Cox <alan@redhat.com>, Dave Jones <davej@redhat.com> | 3 | * (c) 2002 Alan Cox <alan@lxorguk.ukuu.org.uk>, Dave Jones <davej@redhat.com> |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c index a5a5e0530370..8ae8c4ff094d 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c | |||
@@ -462,7 +462,7 @@ out_free: | |||
462 | return err; | 462 | return err; |
463 | } | 463 | } |
464 | 464 | ||
465 | static long local_allocate_threshold_blocks(void *_bank) | 465 | static __cpuinit long local_allocate_threshold_blocks(void *_bank) |
466 | { | 466 | { |
467 | unsigned int *bank = _bank; | 467 | unsigned int *bank = _bank; |
468 | 468 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/p5.c b/arch/x86/kernel/cpu/mcheck/p5.c index bfa5817afdda..c9f77ea69edc 100644 --- a/arch/x86/kernel/cpu/mcheck/p5.c +++ b/arch/x86/kernel/cpu/mcheck/p5.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * P5 specific Machine Check Exception Reporting | 2 | * P5 specific Machine Check Exception Reporting |
3 | * (C) Copyright 2002 Alan Cox <alan@redhat.com> | 3 | * (C) Copyright 2002 Alan Cox <alan@lxorguk.ukuu.org.uk> |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
diff --git a/arch/x86/kernel/cpu/mcheck/p6.c b/arch/x86/kernel/cpu/mcheck/p6.c index 62efc9c2b3af..2ac52d7b434b 100644 --- a/arch/x86/kernel/cpu/mcheck/p6.c +++ b/arch/x86/kernel/cpu/mcheck/p6.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * P6 specific Machine Check Exception Reporting | 2 | * P6 specific Machine Check Exception Reporting |
3 | * (C) Copyright 2002 Alan Cox <alan@redhat.com> | 3 | * (C) Copyright 2002 Alan Cox <alan@lxorguk.ukuu.org.uk> |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
diff --git a/arch/x86/kernel/cpu/mcheck/winchip.c b/arch/x86/kernel/cpu/mcheck/winchip.c index f2be3e190c6b..2a043d89811d 100644 --- a/arch/x86/kernel/cpu/mcheck/winchip.c +++ b/arch/x86/kernel/cpu/mcheck/winchip.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * IDT Winchip specific Machine Check Exception Reporting | 2 | * IDT Winchip specific Machine Check Exception Reporting |
3 | * (C) Copyright 2002 Alan Cox <alan@redhat.com> | 3 | * (C) Copyright 2002 Alan Cox <alan@lxorguk.ukuu.org.uk> |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 26cfdc1d7c7f..0e275d495563 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -305,7 +305,7 @@ ENTRY(early_idt_handler) | |||
305 | call dump_stack | 305 | call dump_stack |
306 | #ifdef CONFIG_KALLSYMS | 306 | #ifdef CONFIG_KALLSYMS |
307 | leaq early_idt_ripmsg(%rip),%rdi | 307 | leaq early_idt_ripmsg(%rip),%rdi |
308 | movq 8(%rsp),%rsi # get rip again | 308 | movq 0(%rsp),%rsi # get rip again |
309 | call __print_symbol | 309 | call __print_symbol |
310 | #endif | 310 | #endif |
311 | #endif /* EARLY_PRINTK */ | 311 | #endif /* EARLY_PRINTK */ |
diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c index 4b8a53d841f7..11d5093eb281 100644 --- a/arch/x86/kernel/i8259.c +++ b/arch/x86/kernel/i8259.c | |||
@@ -11,15 +11,15 @@ | |||
11 | #include <linux/kernel_stat.h> | 11 | #include <linux/kernel_stat.h> |
12 | #include <linux/sysdev.h> | 12 | #include <linux/sysdev.h> |
13 | #include <linux/bitops.h> | 13 | #include <linux/bitops.h> |
14 | #include <linux/acpi.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/delay.h> | ||
14 | 17 | ||
15 | #include <asm/acpi.h> | ||
16 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
17 | #include <asm/system.h> | 19 | #include <asm/system.h> |
18 | #include <asm/io.h> | ||
19 | #include <asm/timer.h> | 20 | #include <asm/timer.h> |
20 | #include <asm/hw_irq.h> | 21 | #include <asm/hw_irq.h> |
21 | #include <asm/pgtable.h> | 22 | #include <asm/pgtable.h> |
22 | #include <asm/delay.h> | ||
23 | #include <asm/desc.h> | 23 | #include <asm/desc.h> |
24 | #include <asm/apic.h> | 24 | #include <asm/apic.h> |
25 | #include <asm/arch_hooks.h> | 25 | #include <asm/arch_hooks.h> |
@@ -323,7 +323,7 @@ void init_8259A(int auto_eoi) | |||
323 | outb_pic(0x11, PIC_MASTER_CMD); /* ICW1: select 8259A-1 init */ | 323 | outb_pic(0x11, PIC_MASTER_CMD); /* ICW1: select 8259A-1 init */ |
324 | 324 | ||
325 | /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 on x86-64, | 325 | /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 on x86-64, |
326 | to 0x20-0x27 on i386 */ | 326 | to 0x20-0x27 on i386 */ |
327 | outb_pic(IRQ0_VECTOR, PIC_MASTER_IMR); | 327 | outb_pic(IRQ0_VECTOR, PIC_MASTER_IMR); |
328 | 328 | ||
329 | /* 8259A-1 (the master) has a slave on IR2 */ | 329 | /* 8259A-1 (the master) has a slave on IR2 */ |
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c index 3639442aa7a4..1c4a1302536c 100644 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c | |||
@@ -129,7 +129,6 @@ static struct irq_pin_list *get_one_free_irq_2_pin(int cpu) | |||
129 | node = cpu_to_node(cpu); | 129 | node = cpu_to_node(cpu); |
130 | 130 | ||
131 | pin = kzalloc_node(sizeof(*pin), GFP_ATOMIC, node); | 131 | pin = kzalloc_node(sizeof(*pin), GFP_ATOMIC, node); |
132 | printk(KERN_DEBUG " alloc irq_2_pin on cpu %d node %d\n", cpu, node); | ||
133 | 132 | ||
134 | return pin; | 133 | return pin; |
135 | } | 134 | } |
@@ -227,7 +226,6 @@ static struct irq_cfg *get_one_free_irq_cfg(int cpu) | |||
227 | cpumask_clear(cfg->old_domain); | 226 | cpumask_clear(cfg->old_domain); |
228 | } | 227 | } |
229 | } | 228 | } |
230 | printk(KERN_DEBUG " alloc irq_cfg on cpu %d node %d\n", cpu, node); | ||
231 | 229 | ||
232 | return cfg; | 230 | return cfg; |
233 | } | 231 | } |
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c index 191914302744..b12208f4dfee 100644 --- a/arch/x86/kernel/ioport.c +++ b/arch/x86/kernel/ioport.c | |||
@@ -35,8 +35,8 @@ static void set_bitmap(unsigned long *bitmap, unsigned int base, | |||
35 | */ | 35 | */ |
36 | asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on) | 36 | asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on) |
37 | { | 37 | { |
38 | struct thread_struct * t = ¤t->thread; | 38 | struct thread_struct *t = ¤t->thread; |
39 | struct tss_struct * tss; | 39 | struct tss_struct *tss; |
40 | unsigned int i, max_long, bytes, bytes_updated; | 40 | unsigned int i, max_long, bytes, bytes_updated; |
41 | 41 | ||
42 | if ((from + num <= from) || (from + num > IO_BITMAP_BITS)) | 42 | if ((from + num <= from) || (from + num > IO_BITMAP_BITS)) |
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index bce53e1352a0..3973e2df7f87 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c | |||
@@ -5,10 +5,10 @@ | |||
5 | #include <linux/interrupt.h> | 5 | #include <linux/interrupt.h> |
6 | #include <linux/kernel_stat.h> | 6 | #include <linux/kernel_stat.h> |
7 | #include <linux/seq_file.h> | 7 | #include <linux/seq_file.h> |
8 | #include <linux/smp.h> | ||
8 | 9 | ||
9 | #include <asm/apic.h> | 10 | #include <asm/apic.h> |
10 | #include <asm/io_apic.h> | 11 | #include <asm/io_apic.h> |
11 | #include <asm/smp.h> | ||
12 | #include <asm/irq.h> | 12 | #include <asm/irq.h> |
13 | 13 | ||
14 | atomic_t irq_err_count; | 14 | atomic_t irq_err_count; |
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index 9dc5588f336a..74b9ff7341e9 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c | |||
@@ -15,9 +15,9 @@ | |||
15 | #include <linux/notifier.h> | 15 | #include <linux/notifier.h> |
16 | #include <linux/cpu.h> | 16 | #include <linux/cpu.h> |
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/uaccess.h> | ||
18 | 19 | ||
19 | #include <asm/apic.h> | 20 | #include <asm/apic.h> |
20 | #include <asm/uaccess.h> | ||
21 | 21 | ||
22 | DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); | 22 | DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); |
23 | EXPORT_PER_CPU_SYMBOL(irq_stat); | 23 | EXPORT_PER_CPU_SYMBOL(irq_stat); |
@@ -93,7 +93,7 @@ execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) | |||
93 | return 0; | 93 | return 0; |
94 | 94 | ||
95 | /* build the stack frame on the IRQ stack */ | 95 | /* build the stack frame on the IRQ stack */ |
96 | isp = (u32 *) ((char*)irqctx + sizeof(*irqctx)); | 96 | isp = (u32 *) ((char *)irqctx + sizeof(*irqctx)); |
97 | irqctx->tinfo.task = curctx->tinfo.task; | 97 | irqctx->tinfo.task = curctx->tinfo.task; |
98 | irqctx->tinfo.previous_esp = current_stack_pointer; | 98 | irqctx->tinfo.previous_esp = current_stack_pointer; |
99 | 99 | ||
@@ -137,7 +137,7 @@ void __cpuinit irq_ctx_init(int cpu) | |||
137 | 137 | ||
138 | hardirq_ctx[cpu] = irqctx; | 138 | hardirq_ctx[cpu] = irqctx; |
139 | 139 | ||
140 | irqctx = (union irq_ctx*) &softirq_stack[cpu*THREAD_SIZE]; | 140 | irqctx = (union irq_ctx *) &softirq_stack[cpu*THREAD_SIZE]; |
141 | irqctx->tinfo.task = NULL; | 141 | irqctx->tinfo.task = NULL; |
142 | irqctx->tinfo.exec_domain = NULL; | 142 | irqctx->tinfo.exec_domain = NULL; |
143 | irqctx->tinfo.cpu = cpu; | 143 | irqctx->tinfo.cpu = cpu; |
@@ -147,7 +147,7 @@ void __cpuinit irq_ctx_init(int cpu) | |||
147 | softirq_ctx[cpu] = irqctx; | 147 | softirq_ctx[cpu] = irqctx; |
148 | 148 | ||
149 | printk(KERN_DEBUG "CPU %u irqstacks, hard=%p soft=%p\n", | 149 | printk(KERN_DEBUG "CPU %u irqstacks, hard=%p soft=%p\n", |
150 | cpu,hardirq_ctx[cpu],softirq_ctx[cpu]); | 150 | cpu, hardirq_ctx[cpu], softirq_ctx[cpu]); |
151 | } | 151 | } |
152 | 152 | ||
153 | void irq_ctx_exit(int cpu) | 153 | void irq_ctx_exit(int cpu) |
@@ -174,7 +174,7 @@ asmlinkage void do_softirq(void) | |||
174 | irqctx->tinfo.previous_esp = current_stack_pointer; | 174 | irqctx->tinfo.previous_esp = current_stack_pointer; |
175 | 175 | ||
176 | /* build the stack frame on the softirq stack */ | 176 | /* build the stack frame on the softirq stack */ |
177 | isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); | 177 | isp = (u32 *) ((char *)irqctx + sizeof(*irqctx)); |
178 | 178 | ||
179 | call_on_stack(__do_softirq, isp); | 179 | call_on_stack(__do_softirq, isp); |
180 | /* | 180 | /* |
diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 6383d50f82ea..63c88e6ec025 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c | |||
@@ -14,10 +14,10 @@ | |||
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/delay.h> | 15 | #include <linux/delay.h> |
16 | #include <linux/ftrace.h> | 16 | #include <linux/ftrace.h> |
17 | #include <asm/uaccess.h> | 17 | #include <linux/uaccess.h> |
18 | #include <linux/smp.h> | ||
18 | #include <asm/io_apic.h> | 19 | #include <asm/io_apic.h> |
19 | #include <asm/idle.h> | 20 | #include <asm/idle.h> |
20 | #include <asm/smp.h> | ||
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Probabilistic stack overflow check: | 23 | * Probabilistic stack overflow check: |
@@ -142,18 +142,18 @@ extern void call_softirq(void); | |||
142 | 142 | ||
143 | asmlinkage void do_softirq(void) | 143 | asmlinkage void do_softirq(void) |
144 | { | 144 | { |
145 | __u32 pending; | 145 | __u32 pending; |
146 | unsigned long flags; | 146 | unsigned long flags; |
147 | 147 | ||
148 | if (in_interrupt()) | 148 | if (in_interrupt()) |
149 | return; | 149 | return; |
150 | 150 | ||
151 | local_irq_save(flags); | 151 | local_irq_save(flags); |
152 | pending = local_softirq_pending(); | 152 | pending = local_softirq_pending(); |
153 | /* Switch to interrupt stack */ | 153 | /* Switch to interrupt stack */ |
154 | if (pending) { | 154 | if (pending) { |
155 | call_softirq(); | 155 | call_softirq(); |
156 | WARN_ON_ONCE(softirq_count()); | 156 | WARN_ON_ONCE(softirq_count()); |
157 | } | 157 | } |
158 | local_irq_restore(flags); | 158 | local_irq_restore(flags); |
159 | } | 159 | } |
diff --git a/arch/x86/kernel/irqinit_32.c b/arch/x86/kernel/irqinit_32.c index 84723295f88a..1507ad4e674d 100644 --- a/arch/x86/kernel/irqinit_32.c +++ b/arch/x86/kernel/irqinit_32.c | |||
@@ -9,18 +9,18 @@ | |||
9 | #include <linux/kernel_stat.h> | 9 | #include <linux/kernel_stat.h> |
10 | #include <linux/sysdev.h> | 10 | #include <linux/sysdev.h> |
11 | #include <linux/bitops.h> | 11 | #include <linux/bitops.h> |
12 | #include <linux/io.h> | ||
13 | #include <linux/delay.h> | ||
12 | 14 | ||
13 | #include <asm/atomic.h> | 15 | #include <asm/atomic.h> |
14 | #include <asm/system.h> | 16 | #include <asm/system.h> |
15 | #include <asm/io.h> | ||
16 | #include <asm/timer.h> | 17 | #include <asm/timer.h> |
17 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
18 | #include <asm/delay.h> | ||
19 | #include <asm/desc.h> | 19 | #include <asm/desc.h> |
20 | #include <asm/apic.h> | 20 | #include <asm/apic.h> |
21 | #include <asm/arch_hooks.h> | 21 | #include <asm/arch_hooks.h> |
22 | #include <asm/i8259.h> | 22 | #include <asm/i8259.h> |
23 | 23 | #include <asm/traps.h> | |
24 | 24 | ||
25 | 25 | ||
26 | /* | 26 | /* |
@@ -34,12 +34,10 @@ | |||
34 | * leads to races. IBM designers who came up with it should | 34 | * leads to races. IBM designers who came up with it should |
35 | * be shot. | 35 | * be shot. |
36 | */ | 36 | */ |
37 | |||
38 | 37 | ||
39 | static irqreturn_t math_error_irq(int cpl, void *dev_id) | 38 | static irqreturn_t math_error_irq(int cpl, void *dev_id) |
40 | { | 39 | { |
41 | extern void math_error(void __user *); | 40 | outb(0, 0xF0); |
42 | outb(0,0xF0); | ||
43 | if (ignore_fpu_irq || !boot_cpu_data.hard_math) | 41 | if (ignore_fpu_irq || !boot_cpu_data.hard_math) |
44 | return IRQ_NONE; | 42 | return IRQ_NONE; |
45 | math_error((void __user *)get_irq_regs()->ip); | 43 | math_error((void __user *)get_irq_regs()->ip); |
@@ -56,7 +54,7 @@ static struct irqaction fpu_irq = { | |||
56 | .name = "fpu", | 54 | .name = "fpu", |
57 | }; | 55 | }; |
58 | 56 | ||
59 | void __init init_ISA_irqs (void) | 57 | void __init init_ISA_irqs(void) |
60 | { | 58 | { |
61 | int i; | 59 | int i; |
62 | 60 | ||
diff --git a/arch/x86/kernel/irqinit_64.c b/arch/x86/kernel/irqinit_64.c index 31ebfe38e96c..da481a1e3f30 100644 --- a/arch/x86/kernel/irqinit_64.c +++ b/arch/x86/kernel/irqinit_64.c | |||
@@ -11,14 +11,14 @@ | |||
11 | #include <linux/kernel_stat.h> | 11 | #include <linux/kernel_stat.h> |
12 | #include <linux/sysdev.h> | 12 | #include <linux/sysdev.h> |
13 | #include <linux/bitops.h> | 13 | #include <linux/bitops.h> |
14 | #include <linux/acpi.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/delay.h> | ||
14 | 17 | ||
15 | #include <asm/acpi.h> | ||
16 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
17 | #include <asm/system.h> | 19 | #include <asm/system.h> |
18 | #include <asm/io.h> | ||
19 | #include <asm/hw_irq.h> | 20 | #include <asm/hw_irq.h> |
20 | #include <asm/pgtable.h> | 21 | #include <asm/pgtable.h> |
21 | #include <asm/delay.h> | ||
22 | #include <asm/desc.h> | 22 | #include <asm/desc.h> |
23 | #include <asm/apic.h> | 23 | #include <asm/apic.h> |
24 | #include <asm/i8259.h> | 24 | #include <asm/i8259.h> |
@@ -81,7 +81,7 @@ int vector_used_by_percpu_irq(unsigned int vector) | |||
81 | return 0; | 81 | return 0; |
82 | } | 82 | } |
83 | 83 | ||
84 | void __init init_ISA_irqs(void) | 84 | static void __init init_ISA_irqs(void) |
85 | { | 85 | { |
86 | int i; | 86 | int i; |
87 | 87 | ||
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index c5c5b8df1dbc..c0601c2848a1 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * Intel Multiprocessor Specification 1.1 and 1.4 | 2 | * Intel Multiprocessor Specification 1.1 and 1.4 |
3 | * compliant MP-table parsing routines. | 3 | * compliant MP-table parsing routines. |
4 | * | 4 | * |
5 | * (c) 1995 Alan Cox, Building #3 <alan@redhat.com> | 5 | * (c) 1995 Alan Cox, Building #3 <alan@lxorguk.ukuu.org.uk> |
6 | * (c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com> | 6 | * (c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com> |
7 | * (c) 2008 Alexey Starikovskiy <astarikovskiy@suse.de> | 7 | * (c) 2008 Alexey Starikovskiy <astarikovskiy@suse.de> |
8 | */ | 8 | */ |
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/acpi.h> | 17 | #include <linux/acpi.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
20 | #include <linux/acpi.h> | ||
21 | 20 | ||
22 | #include <asm/mtrr.h> | 21 | #include <asm/mtrr.h> |
23 | #include <asm/mpspec.h> | 22 | #include <asm/mpspec.h> |
@@ -49,12 +48,12 @@ static int __init mpf_checksum(unsigned char *mp, int len) | |||
49 | return sum & 0xFF; | 48 | return sum & 0xFF; |
50 | } | 49 | } |
51 | 50 | ||
52 | static void __init MP_processor_info(struct mpc_config_processor *m) | 51 | static void __init MP_processor_info(struct mpc_cpu *m) |
53 | { | 52 | { |
54 | int apicid; | 53 | int apicid; |
55 | char *bootup_cpu = ""; | 54 | char *bootup_cpu = ""; |
56 | 55 | ||
57 | if (!(m->mpc_cpuflag & CPU_ENABLED)) { | 56 | if (!(m->cpuflag & CPU_ENABLED)) { |
58 | disabled_cpus++; | 57 | disabled_cpus++; |
59 | return; | 58 | return; |
60 | } | 59 | } |
@@ -62,54 +61,54 @@ static void __init MP_processor_info(struct mpc_config_processor *m) | |||
62 | if (x86_quirks->mpc_apic_id) | 61 | if (x86_quirks->mpc_apic_id) |
63 | apicid = x86_quirks->mpc_apic_id(m); | 62 | apicid = x86_quirks->mpc_apic_id(m); |
64 | else | 63 | else |
65 | apicid = m->mpc_apicid; | 64 | apicid = m->apicid; |
66 | 65 | ||
67 | if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) { | 66 | if (m->cpuflag & CPU_BOOTPROCESSOR) { |
68 | bootup_cpu = " (Bootup-CPU)"; | 67 | bootup_cpu = " (Bootup-CPU)"; |
69 | boot_cpu_physical_apicid = m->mpc_apicid; | 68 | boot_cpu_physical_apicid = m->apicid; |
70 | } | 69 | } |
71 | 70 | ||
72 | printk(KERN_INFO "Processor #%d%s\n", m->mpc_apicid, bootup_cpu); | 71 | printk(KERN_INFO "Processor #%d%s\n", m->apicid, bootup_cpu); |
73 | generic_processor_info(apicid, m->mpc_apicver); | 72 | generic_processor_info(apicid, m->apicver); |
74 | } | 73 | } |
75 | 74 | ||
76 | #ifdef CONFIG_X86_IO_APIC | 75 | #ifdef CONFIG_X86_IO_APIC |
77 | static void __init MP_bus_info(struct mpc_config_bus *m) | 76 | static void __init MP_bus_info(struct mpc_bus *m) |
78 | { | 77 | { |
79 | char str[7]; | 78 | char str[7]; |
80 | memcpy(str, m->mpc_bustype, 6); | 79 | memcpy(str, m->bustype, 6); |
81 | str[6] = 0; | 80 | str[6] = 0; |
82 | 81 | ||
83 | if (x86_quirks->mpc_oem_bus_info) | 82 | if (x86_quirks->mpc_oem_bus_info) |
84 | x86_quirks->mpc_oem_bus_info(m, str); | 83 | x86_quirks->mpc_oem_bus_info(m, str); |
85 | else | 84 | else |
86 | apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->mpc_busid, str); | 85 | apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->busid, str); |
87 | 86 | ||
88 | #if MAX_MP_BUSSES < 256 | 87 | #if MAX_MP_BUSSES < 256 |
89 | if (m->mpc_busid >= MAX_MP_BUSSES) { | 88 | if (m->busid >= MAX_MP_BUSSES) { |
90 | printk(KERN_WARNING "MP table busid value (%d) for bustype %s " | 89 | printk(KERN_WARNING "MP table busid value (%d) for bustype %s " |
91 | " is too large, max. supported is %d\n", | 90 | " is too large, max. supported is %d\n", |
92 | m->mpc_busid, str, MAX_MP_BUSSES - 1); | 91 | m->busid, str, MAX_MP_BUSSES - 1); |
93 | return; | 92 | return; |
94 | } | 93 | } |
95 | #endif | 94 | #endif |
96 | 95 | ||
97 | if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA) - 1) == 0) { | 96 | if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA) - 1) == 0) { |
98 | set_bit(m->mpc_busid, mp_bus_not_pci); | 97 | set_bit(m->busid, mp_bus_not_pci); |
99 | #if defined(CONFIG_EISA) || defined(CONFIG_MCA) | 98 | #if defined(CONFIG_EISA) || defined(CONFIG_MCA) |
100 | mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA; | 99 | mp_bus_id_to_type[m->busid] = MP_BUS_ISA; |
101 | #endif | 100 | #endif |
102 | } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) { | 101 | } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) { |
103 | if (x86_quirks->mpc_oem_pci_bus) | 102 | if (x86_quirks->mpc_oem_pci_bus) |
104 | x86_quirks->mpc_oem_pci_bus(m); | 103 | x86_quirks->mpc_oem_pci_bus(m); |
105 | 104 | ||
106 | clear_bit(m->mpc_busid, mp_bus_not_pci); | 105 | clear_bit(m->busid, mp_bus_not_pci); |
107 | #if defined(CONFIG_EISA) || defined(CONFIG_MCA) | 106 | #if defined(CONFIG_EISA) || defined(CONFIG_MCA) |
108 | mp_bus_id_to_type[m->mpc_busid] = MP_BUS_PCI; | 107 | mp_bus_id_to_type[m->busid] = MP_BUS_PCI; |
109 | } else if (strncmp(str, BUSTYPE_EISA, sizeof(BUSTYPE_EISA) - 1) == 0) { | 108 | } else if (strncmp(str, BUSTYPE_EISA, sizeof(BUSTYPE_EISA) - 1) == 0) { |
110 | mp_bus_id_to_type[m->mpc_busid] = MP_BUS_EISA; | 109 | mp_bus_id_to_type[m->busid] = MP_BUS_EISA; |
111 | } else if (strncmp(str, BUSTYPE_MCA, sizeof(BUSTYPE_MCA) - 1) == 0) { | 110 | } else if (strncmp(str, BUSTYPE_MCA, sizeof(BUSTYPE_MCA) - 1) == 0) { |
112 | mp_bus_id_to_type[m->mpc_busid] = MP_BUS_MCA; | 111 | mp_bus_id_to_type[m->busid] = MP_BUS_MCA; |
113 | #endif | 112 | #endif |
114 | } else | 113 | } else |
115 | printk(KERN_WARNING "Unknown bustype %s - ignoring\n", str); | 114 | printk(KERN_WARNING "Unknown bustype %s - ignoring\n", str); |
@@ -133,32 +132,31 @@ static int bad_ioapic(unsigned long address) | |||
133 | return 0; | 132 | return 0; |
134 | } | 133 | } |
135 | 134 | ||
136 | static void __init MP_ioapic_info(struct mpc_config_ioapic *m) | 135 | static void __init MP_ioapic_info(struct mpc_ioapic *m) |
137 | { | 136 | { |
138 | if (!(m->mpc_flags & MPC_APIC_USABLE)) | 137 | if (!(m->flags & MPC_APIC_USABLE)) |
139 | return; | 138 | return; |
140 | 139 | ||
141 | printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n", | 140 | printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n", |
142 | m->mpc_apicid, m->mpc_apicver, m->mpc_apicaddr); | 141 | m->apicid, m->apicver, m->apicaddr); |
143 | 142 | ||
144 | if (bad_ioapic(m->mpc_apicaddr)) | 143 | if (bad_ioapic(m->apicaddr)) |
145 | return; | 144 | return; |
146 | 145 | ||
147 | mp_ioapics[nr_ioapics].mp_apicaddr = m->mpc_apicaddr; | 146 | mp_ioapics[nr_ioapics].mp_apicaddr = m->apicaddr; |
148 | mp_ioapics[nr_ioapics].mp_apicid = m->mpc_apicid; | 147 | mp_ioapics[nr_ioapics].mp_apicid = m->apicid; |
149 | mp_ioapics[nr_ioapics].mp_type = m->mpc_type; | 148 | mp_ioapics[nr_ioapics].mp_type = m->type; |
150 | mp_ioapics[nr_ioapics].mp_apicver = m->mpc_apicver; | 149 | mp_ioapics[nr_ioapics].mp_apicver = m->apicver; |
151 | mp_ioapics[nr_ioapics].mp_flags = m->mpc_flags; | 150 | mp_ioapics[nr_ioapics].mp_flags = m->flags; |
152 | nr_ioapics++; | 151 | nr_ioapics++; |
153 | } | 152 | } |
154 | 153 | ||
155 | static void print_MP_intsrc_info(struct mpc_config_intsrc *m) | 154 | static void print_MP_intsrc_info(struct mpc_intsrc *m) |
156 | { | 155 | { |
157 | apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x," | 156 | apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x," |
158 | " IRQ %02x, APIC ID %x, APIC INT %02x\n", | 157 | " IRQ %02x, APIC ID %x, APIC INT %02x\n", |
159 | m->mpc_irqtype, m->mpc_irqflag & 3, | 158 | m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbus, |
160 | (m->mpc_irqflag >> 2) & 3, m->mpc_srcbus, | 159 | m->srcbusirq, m->dstapic, m->dstirq); |
161 | m->mpc_srcbusirq, m->mpc_dstapic, m->mpc_dstirq); | ||
162 | } | 160 | } |
163 | 161 | ||
164 | static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq) | 162 | static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq) |
@@ -170,52 +168,52 @@ static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq) | |||
170 | mp_irq->mp_srcbusirq, mp_irq->mp_dstapic, mp_irq->mp_dstirq); | 168 | mp_irq->mp_srcbusirq, mp_irq->mp_dstapic, mp_irq->mp_dstirq); |
171 | } | 169 | } |
172 | 170 | ||
173 | static void __init assign_to_mp_irq(struct mpc_config_intsrc *m, | 171 | static void __init assign_to_mp_irq(struct mpc_intsrc *m, |
174 | struct mp_config_intsrc *mp_irq) | 172 | struct mp_config_intsrc *mp_irq) |
175 | { | 173 | { |
176 | mp_irq->mp_dstapic = m->mpc_dstapic; | 174 | mp_irq->mp_dstapic = m->dstapic; |
177 | mp_irq->mp_type = m->mpc_type; | 175 | mp_irq->mp_type = m->type; |
178 | mp_irq->mp_irqtype = m->mpc_irqtype; | 176 | mp_irq->mp_irqtype = m->irqtype; |
179 | mp_irq->mp_irqflag = m->mpc_irqflag; | 177 | mp_irq->mp_irqflag = m->irqflag; |
180 | mp_irq->mp_srcbus = m->mpc_srcbus; | 178 | mp_irq->mp_srcbus = m->srcbus; |
181 | mp_irq->mp_srcbusirq = m->mpc_srcbusirq; | 179 | mp_irq->mp_srcbusirq = m->srcbusirq; |
182 | mp_irq->mp_dstirq = m->mpc_dstirq; | 180 | mp_irq->mp_dstirq = m->dstirq; |
183 | } | 181 | } |
184 | 182 | ||
185 | static void __init assign_to_mpc_intsrc(struct mp_config_intsrc *mp_irq, | 183 | static void __init assign_to_mpc_intsrc(struct mp_config_intsrc *mp_irq, |
186 | struct mpc_config_intsrc *m) | 184 | struct mpc_intsrc *m) |
187 | { | 185 | { |
188 | m->mpc_dstapic = mp_irq->mp_dstapic; | 186 | m->dstapic = mp_irq->mp_dstapic; |
189 | m->mpc_type = mp_irq->mp_type; | 187 | m->type = mp_irq->mp_type; |
190 | m->mpc_irqtype = mp_irq->mp_irqtype; | 188 | m->irqtype = mp_irq->mp_irqtype; |
191 | m->mpc_irqflag = mp_irq->mp_irqflag; | 189 | m->irqflag = mp_irq->mp_irqflag; |
192 | m->mpc_srcbus = mp_irq->mp_srcbus; | 190 | m->srcbus = mp_irq->mp_srcbus; |
193 | m->mpc_srcbusirq = mp_irq->mp_srcbusirq; | 191 | m->srcbusirq = mp_irq->mp_srcbusirq; |
194 | m->mpc_dstirq = mp_irq->mp_dstirq; | 192 | m->dstirq = mp_irq->mp_dstirq; |
195 | } | 193 | } |
196 | 194 | ||
197 | static int __init mp_irq_mpc_intsrc_cmp(struct mp_config_intsrc *mp_irq, | 195 | static int __init mp_irq_mpc_intsrc_cmp(struct mp_config_intsrc *mp_irq, |
198 | struct mpc_config_intsrc *m) | 196 | struct mpc_intsrc *m) |
199 | { | 197 | { |
200 | if (mp_irq->mp_dstapic != m->mpc_dstapic) | 198 | if (mp_irq->mp_dstapic != m->dstapic) |
201 | return 1; | 199 | return 1; |
202 | if (mp_irq->mp_type != m->mpc_type) | 200 | if (mp_irq->mp_type != m->type) |
203 | return 2; | 201 | return 2; |
204 | if (mp_irq->mp_irqtype != m->mpc_irqtype) | 202 | if (mp_irq->mp_irqtype != m->irqtype) |
205 | return 3; | 203 | return 3; |
206 | if (mp_irq->mp_irqflag != m->mpc_irqflag) | 204 | if (mp_irq->mp_irqflag != m->irqflag) |
207 | return 4; | 205 | return 4; |
208 | if (mp_irq->mp_srcbus != m->mpc_srcbus) | 206 | if (mp_irq->mp_srcbus != m->srcbus) |
209 | return 5; | 207 | return 5; |
210 | if (mp_irq->mp_srcbusirq != m->mpc_srcbusirq) | 208 | if (mp_irq->mp_srcbusirq != m->srcbusirq) |
211 | return 6; | 209 | return 6; |
212 | if (mp_irq->mp_dstirq != m->mpc_dstirq) | 210 | if (mp_irq->mp_dstirq != m->dstirq) |
213 | return 7; | 211 | return 7; |
214 | 212 | ||
215 | return 0; | 213 | return 0; |
216 | } | 214 | } |
217 | 215 | ||
218 | static void __init MP_intsrc_info(struct mpc_config_intsrc *m) | 216 | static void __init MP_intsrc_info(struct mpc_intsrc *m) |
219 | { | 217 | { |
220 | int i; | 218 | int i; |
221 | 219 | ||
@@ -233,57 +231,55 @@ static void __init MP_intsrc_info(struct mpc_config_intsrc *m) | |||
233 | 231 | ||
234 | #endif | 232 | #endif |
235 | 233 | ||
236 | static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m) | 234 | static void __init MP_lintsrc_info(struct mpc_lintsrc *m) |
237 | { | 235 | { |
238 | apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x," | 236 | apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x," |
239 | " IRQ %02x, APIC ID %x, APIC LINT %02x\n", | 237 | " IRQ %02x, APIC ID %x, APIC LINT %02x\n", |
240 | m->mpc_irqtype, m->mpc_irqflag & 3, | 238 | m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbusid, |
241 | (m->mpc_irqflag >> 2) & 3, m->mpc_srcbusid, | 239 | m->srcbusirq, m->destapic, m->destapiclint); |
242 | m->mpc_srcbusirq, m->mpc_destapic, m->mpc_destapiclint); | ||
243 | } | 240 | } |
244 | 241 | ||
245 | /* | 242 | /* |
246 | * Read/parse the MPC | 243 | * Read/parse the MPC |
247 | */ | 244 | */ |
248 | 245 | ||
249 | static int __init smp_check_mpc(struct mp_config_table *mpc, char *oem, | 246 | static int __init smp_check_mpc(struct mpc_table *mpc, char *oem, char *str) |
250 | char *str) | ||
251 | { | 247 | { |
252 | 248 | ||
253 | if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) { | 249 | if (memcmp(mpc->signature, MPC_SIGNATURE, 4)) { |
254 | printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n", | 250 | printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n", |
255 | mpc->mpc_signature[0], mpc->mpc_signature[1], | 251 | mpc->signature[0], mpc->signature[1], |
256 | mpc->mpc_signature[2], mpc->mpc_signature[3]); | 252 | mpc->signature[2], mpc->signature[3]); |
257 | return 0; | 253 | return 0; |
258 | } | 254 | } |
259 | if (mpf_checksum((unsigned char *)mpc, mpc->mpc_length)) { | 255 | if (mpf_checksum((unsigned char *)mpc, mpc->length)) { |
260 | printk(KERN_ERR "MPTABLE: checksum error!\n"); | 256 | printk(KERN_ERR "MPTABLE: checksum error!\n"); |
261 | return 0; | 257 | return 0; |
262 | } | 258 | } |
263 | if (mpc->mpc_spec != 0x01 && mpc->mpc_spec != 0x04) { | 259 | if (mpc->spec != 0x01 && mpc->spec != 0x04) { |
264 | printk(KERN_ERR "MPTABLE: bad table version (%d)!!\n", | 260 | printk(KERN_ERR "MPTABLE: bad table version (%d)!!\n", |
265 | mpc->mpc_spec); | 261 | mpc->spec); |
266 | return 0; | 262 | return 0; |
267 | } | 263 | } |
268 | if (!mpc->mpc_lapic) { | 264 | if (!mpc->lapic) { |
269 | printk(KERN_ERR "MPTABLE: null local APIC address!\n"); | 265 | printk(KERN_ERR "MPTABLE: null local APIC address!\n"); |
270 | return 0; | 266 | return 0; |
271 | } | 267 | } |
272 | memcpy(oem, mpc->mpc_oem, 8); | 268 | memcpy(oem, mpc->oem, 8); |
273 | oem[8] = 0; | 269 | oem[8] = 0; |
274 | printk(KERN_INFO "MPTABLE: OEM ID: %s\n", oem); | 270 | printk(KERN_INFO "MPTABLE: OEM ID: %s\n", oem); |
275 | 271 | ||
276 | memcpy(str, mpc->mpc_productid, 12); | 272 | memcpy(str, mpc->productid, 12); |
277 | str[12] = 0; | 273 | str[12] = 0; |
278 | 274 | ||
279 | printk(KERN_INFO "MPTABLE: Product ID: %s\n", str); | 275 | printk(KERN_INFO "MPTABLE: Product ID: %s\n", str); |
280 | 276 | ||
281 | printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->mpc_lapic); | 277 | printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->lapic); |
282 | 278 | ||
283 | return 1; | 279 | return 1; |
284 | } | 280 | } |
285 | 281 | ||
286 | static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) | 282 | static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) |
287 | { | 283 | { |
288 | char str[16]; | 284 | char str[16]; |
289 | char oem[10]; | 285 | char oem[10]; |
@@ -308,14 +304,14 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) | |||
308 | #endif | 304 | #endif |
309 | /* save the local APIC address, it might be non-default */ | 305 | /* save the local APIC address, it might be non-default */ |
310 | if (!acpi_lapic) | 306 | if (!acpi_lapic) |
311 | mp_lapic_addr = mpc->mpc_lapic; | 307 | mp_lapic_addr = mpc->lapic; |
312 | 308 | ||
313 | if (early) | 309 | if (early) |
314 | return 1; | 310 | return 1; |
315 | 311 | ||
316 | if (mpc->mpc_oemptr && x86_quirks->smp_read_mpc_oem) { | 312 | if (mpc->oemptr && x86_quirks->smp_read_mpc_oem) { |
317 | struct mp_config_oemtable *oem_table = (struct mp_config_oemtable *)(unsigned long)mpc->mpc_oemptr; | 313 | struct mpc_oemtable *oem_table = (void *)(long)mpc->oemptr; |
318 | x86_quirks->smp_read_mpc_oem(oem_table, mpc->mpc_oemsize); | 314 | x86_quirks->smp_read_mpc_oem(oem_table, mpc->oemsize); |
319 | } | 315 | } |
320 | 316 | ||
321 | /* | 317 | /* |
@@ -324,12 +320,11 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) | |||
324 | if (x86_quirks->mpc_record) | 320 | if (x86_quirks->mpc_record) |
325 | *x86_quirks->mpc_record = 0; | 321 | *x86_quirks->mpc_record = 0; |
326 | 322 | ||
327 | while (count < mpc->mpc_length) { | 323 | while (count < mpc->length) { |
328 | switch (*mpt) { | 324 | switch (*mpt) { |
329 | case MP_PROCESSOR: | 325 | case MP_PROCESSOR: |
330 | { | 326 | { |
331 | struct mpc_config_processor *m = | 327 | struct mpc_cpu *m = (struct mpc_cpu *)mpt; |
332 | (struct mpc_config_processor *)mpt; | ||
333 | /* ACPI may have already provided this data */ | 328 | /* ACPI may have already provided this data */ |
334 | if (!acpi_lapic) | 329 | if (!acpi_lapic) |
335 | MP_processor_info(m); | 330 | MP_processor_info(m); |
@@ -339,8 +334,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) | |||
339 | } | 334 | } |
340 | case MP_BUS: | 335 | case MP_BUS: |
341 | { | 336 | { |
342 | struct mpc_config_bus *m = | 337 | struct mpc_bus *m = (struct mpc_bus *)mpt; |
343 | (struct mpc_config_bus *)mpt; | ||
344 | #ifdef CONFIG_X86_IO_APIC | 338 | #ifdef CONFIG_X86_IO_APIC |
345 | MP_bus_info(m); | 339 | MP_bus_info(m); |
346 | #endif | 340 | #endif |
@@ -351,30 +345,28 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) | |||
351 | case MP_IOAPIC: | 345 | case MP_IOAPIC: |
352 | { | 346 | { |
353 | #ifdef CONFIG_X86_IO_APIC | 347 | #ifdef CONFIG_X86_IO_APIC |
354 | struct mpc_config_ioapic *m = | 348 | struct mpc_ioapic *m = (struct mpc_ioapic *)mpt; |
355 | (struct mpc_config_ioapic *)mpt; | ||
356 | MP_ioapic_info(m); | 349 | MP_ioapic_info(m); |
357 | #endif | 350 | #endif |
358 | mpt += sizeof(struct mpc_config_ioapic); | 351 | mpt += sizeof(struct mpc_ioapic); |
359 | count += sizeof(struct mpc_config_ioapic); | 352 | count += sizeof(struct mpc_ioapic); |
360 | break; | 353 | break; |
361 | } | 354 | } |
362 | case MP_INTSRC: | 355 | case MP_INTSRC: |
363 | { | 356 | { |
364 | #ifdef CONFIG_X86_IO_APIC | 357 | #ifdef CONFIG_X86_IO_APIC |
365 | struct mpc_config_intsrc *m = | 358 | struct mpc_intsrc *m = (struct mpc_intsrc *)mpt; |
366 | (struct mpc_config_intsrc *)mpt; | ||
367 | 359 | ||
368 | MP_intsrc_info(m); | 360 | MP_intsrc_info(m); |
369 | #endif | 361 | #endif |
370 | mpt += sizeof(struct mpc_config_intsrc); | 362 | mpt += sizeof(struct mpc_intsrc); |
371 | count += sizeof(struct mpc_config_intsrc); | 363 | count += sizeof(struct mpc_intsrc); |
372 | break; | 364 | break; |
373 | } | 365 | } |
374 | case MP_LINTSRC: | 366 | case MP_LINTSRC: |
375 | { | 367 | { |
376 | struct mpc_config_lintsrc *m = | 368 | struct mpc_lintsrc *m = |
377 | (struct mpc_config_lintsrc *)mpt; | 369 | (struct mpc_lintsrc *)mpt; |
378 | MP_lintsrc_info(m); | 370 | MP_lintsrc_info(m); |
379 | mpt += sizeof(*m); | 371 | mpt += sizeof(*m); |
380 | count += sizeof(*m); | 372 | count += sizeof(*m); |
@@ -385,8 +377,8 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) | |||
385 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); | 377 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); |
386 | printk(KERN_ERR "type %x\n", *mpt); | 378 | printk(KERN_ERR "type %x\n", *mpt); |
387 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, | 379 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, |
388 | 1, mpc, mpc->mpc_length, 1); | 380 | 1, mpc, mpc->length, 1); |
389 | count = mpc->mpc_length; | 381 | count = mpc->length; |
390 | break; | 382 | break; |
391 | } | 383 | } |
392 | if (x86_quirks->mpc_record) | 384 | if (x86_quirks->mpc_record) |
@@ -417,16 +409,16 @@ static int __init ELCR_trigger(unsigned int irq) | |||
417 | 409 | ||
418 | static void __init construct_default_ioirq_mptable(int mpc_default_type) | 410 | static void __init construct_default_ioirq_mptable(int mpc_default_type) |
419 | { | 411 | { |
420 | struct mpc_config_intsrc intsrc; | 412 | struct mpc_intsrc intsrc; |
421 | int i; | 413 | int i; |
422 | int ELCR_fallback = 0; | 414 | int ELCR_fallback = 0; |
423 | 415 | ||
424 | intsrc.mpc_type = MP_INTSRC; | 416 | intsrc.type = MP_INTSRC; |
425 | intsrc.mpc_irqflag = 0; /* conforming */ | 417 | intsrc.irqflag = 0; /* conforming */ |
426 | intsrc.mpc_srcbus = 0; | 418 | intsrc.srcbus = 0; |
427 | intsrc.mpc_dstapic = mp_ioapics[0].mp_apicid; | 419 | intsrc.dstapic = mp_ioapics[0].mp_apicid; |
428 | 420 | ||
429 | intsrc.mpc_irqtype = mp_INT; | 421 | intsrc.irqtype = mp_INT; |
430 | 422 | ||
431 | /* | 423 | /* |
432 | * If true, we have an ISA/PCI system with no IRQ entries | 424 | * If true, we have an ISA/PCI system with no IRQ entries |
@@ -469,30 +461,30 @@ static void __init construct_default_ioirq_mptable(int mpc_default_type) | |||
469 | * irqflag field (level sensitive, active high polarity). | 461 | * irqflag field (level sensitive, active high polarity). |
470 | */ | 462 | */ |
471 | if (ELCR_trigger(i)) | 463 | if (ELCR_trigger(i)) |
472 | intsrc.mpc_irqflag = 13; | 464 | intsrc.irqflag = 13; |
473 | else | 465 | else |
474 | intsrc.mpc_irqflag = 0; | 466 | intsrc.irqflag = 0; |
475 | } | 467 | } |
476 | 468 | ||
477 | intsrc.mpc_srcbusirq = i; | 469 | intsrc.srcbusirq = i; |
478 | intsrc.mpc_dstirq = i ? i : 2; /* IRQ0 to INTIN2 */ | 470 | intsrc.dstirq = i ? i : 2; /* IRQ0 to INTIN2 */ |
479 | MP_intsrc_info(&intsrc); | 471 | MP_intsrc_info(&intsrc); |
480 | } | 472 | } |
481 | 473 | ||
482 | intsrc.mpc_irqtype = mp_ExtINT; | 474 | intsrc.irqtype = mp_ExtINT; |
483 | intsrc.mpc_srcbusirq = 0; | 475 | intsrc.srcbusirq = 0; |
484 | intsrc.mpc_dstirq = 0; /* 8259A to INTIN0 */ | 476 | intsrc.dstirq = 0; /* 8259A to INTIN0 */ |
485 | MP_intsrc_info(&intsrc); | 477 | MP_intsrc_info(&intsrc); |
486 | } | 478 | } |
487 | 479 | ||
488 | 480 | ||
489 | static void __init construct_ioapic_table(int mpc_default_type) | 481 | static void __init construct_ioapic_table(int mpc_default_type) |
490 | { | 482 | { |
491 | struct mpc_config_ioapic ioapic; | 483 | struct mpc_ioapic ioapic; |
492 | struct mpc_config_bus bus; | 484 | struct mpc_bus bus; |
493 | 485 | ||
494 | bus.mpc_type = MP_BUS; | 486 | bus.type = MP_BUS; |
495 | bus.mpc_busid = 0; | 487 | bus.busid = 0; |
496 | switch (mpc_default_type) { | 488 | switch (mpc_default_type) { |
497 | default: | 489 | default: |
498 | printk(KERN_ERR "???\nUnknown standard configuration %d\n", | 490 | printk(KERN_ERR "???\nUnknown standard configuration %d\n", |
@@ -500,29 +492,29 @@ static void __init construct_ioapic_table(int mpc_default_type) | |||
500 | /* fall through */ | 492 | /* fall through */ |
501 | case 1: | 493 | case 1: |
502 | case 5: | 494 | case 5: |
503 | memcpy(bus.mpc_bustype, "ISA ", 6); | 495 | memcpy(bus.bustype, "ISA ", 6); |
504 | break; | 496 | break; |
505 | case 2: | 497 | case 2: |
506 | case 6: | 498 | case 6: |
507 | case 3: | 499 | case 3: |
508 | memcpy(bus.mpc_bustype, "EISA ", 6); | 500 | memcpy(bus.bustype, "EISA ", 6); |
509 | break; | 501 | break; |
510 | case 4: | 502 | case 4: |
511 | case 7: | 503 | case 7: |
512 | memcpy(bus.mpc_bustype, "MCA ", 6); | 504 | memcpy(bus.bustype, "MCA ", 6); |
513 | } | 505 | } |
514 | MP_bus_info(&bus); | 506 | MP_bus_info(&bus); |
515 | if (mpc_default_type > 4) { | 507 | if (mpc_default_type > 4) { |
516 | bus.mpc_busid = 1; | 508 | bus.busid = 1; |
517 | memcpy(bus.mpc_bustype, "PCI ", 6); | 509 | memcpy(bus.bustype, "PCI ", 6); |
518 | MP_bus_info(&bus); | 510 | MP_bus_info(&bus); |
519 | } | 511 | } |
520 | 512 | ||
521 | ioapic.mpc_type = MP_IOAPIC; | 513 | ioapic.type = MP_IOAPIC; |
522 | ioapic.mpc_apicid = 2; | 514 | ioapic.apicid = 2; |
523 | ioapic.mpc_apicver = mpc_default_type > 4 ? 0x10 : 0x01; | 515 | ioapic.apicver = mpc_default_type > 4 ? 0x10 : 0x01; |
524 | ioapic.mpc_flags = MPC_APIC_USABLE; | 516 | ioapic.flags = MPC_APIC_USABLE; |
525 | ioapic.mpc_apicaddr = 0xFEC00000; | 517 | ioapic.apicaddr = 0xFEC00000; |
526 | MP_ioapic_info(&ioapic); | 518 | MP_ioapic_info(&ioapic); |
527 | 519 | ||
528 | /* | 520 | /* |
@@ -536,8 +528,8 @@ static inline void __init construct_ioapic_table(int mpc_default_type) { } | |||
536 | 528 | ||
537 | static inline void __init construct_default_ISA_mptable(int mpc_default_type) | 529 | static inline void __init construct_default_ISA_mptable(int mpc_default_type) |
538 | { | 530 | { |
539 | struct mpc_config_processor processor; | 531 | struct mpc_cpu processor; |
540 | struct mpc_config_lintsrc lintsrc; | 532 | struct mpc_lintsrc lintsrc; |
541 | int linttypes[2] = { mp_ExtINT, mp_NMI }; | 533 | int linttypes[2] = { mp_ExtINT, mp_NMI }; |
542 | int i; | 534 | int i; |
543 | 535 | ||
@@ -549,30 +541,30 @@ static inline void __init construct_default_ISA_mptable(int mpc_default_type) | |||
549 | /* | 541 | /* |
550 | * 2 CPUs, numbered 0 & 1. | 542 | * 2 CPUs, numbered 0 & 1. |
551 | */ | 543 | */ |
552 | processor.mpc_type = MP_PROCESSOR; | 544 | processor.type = MP_PROCESSOR; |
553 | /* Either an integrated APIC or a discrete 82489DX. */ | 545 | /* Either an integrated APIC or a discrete 82489DX. */ |
554 | processor.mpc_apicver = mpc_default_type > 4 ? 0x10 : 0x01; | 546 | processor.apicver = mpc_default_type > 4 ? 0x10 : 0x01; |
555 | processor.mpc_cpuflag = CPU_ENABLED; | 547 | processor.cpuflag = CPU_ENABLED; |
556 | processor.mpc_cpufeature = (boot_cpu_data.x86 << 8) | | 548 | processor.cpufeature = (boot_cpu_data.x86 << 8) | |
557 | (boot_cpu_data.x86_model << 4) | boot_cpu_data.x86_mask; | 549 | (boot_cpu_data.x86_model << 4) | boot_cpu_data.x86_mask; |
558 | processor.mpc_featureflag = boot_cpu_data.x86_capability[0]; | 550 | processor.featureflag = boot_cpu_data.x86_capability[0]; |
559 | processor.mpc_reserved[0] = 0; | 551 | processor.reserved[0] = 0; |
560 | processor.mpc_reserved[1] = 0; | 552 | processor.reserved[1] = 0; |
561 | for (i = 0; i < 2; i++) { | 553 | for (i = 0; i < 2; i++) { |
562 | processor.mpc_apicid = i; | 554 | processor.apicid = i; |
563 | MP_processor_info(&processor); | 555 | MP_processor_info(&processor); |
564 | } | 556 | } |
565 | 557 | ||
566 | construct_ioapic_table(mpc_default_type); | 558 | construct_ioapic_table(mpc_default_type); |
567 | 559 | ||
568 | lintsrc.mpc_type = MP_LINTSRC; | 560 | lintsrc.type = MP_LINTSRC; |
569 | lintsrc.mpc_irqflag = 0; /* conforming */ | 561 | lintsrc.irqflag = 0; /* conforming */ |
570 | lintsrc.mpc_srcbusid = 0; | 562 | lintsrc.srcbusid = 0; |
571 | lintsrc.mpc_srcbusirq = 0; | 563 | lintsrc.srcbusirq = 0; |
572 | lintsrc.mpc_destapic = MP_APIC_ALL; | 564 | lintsrc.destapic = MP_APIC_ALL; |
573 | for (i = 0; i < 2; i++) { | 565 | for (i = 0; i < 2; i++) { |
574 | lintsrc.mpc_irqtype = linttypes[i]; | 566 | lintsrc.irqtype = linttypes[i]; |
575 | lintsrc.mpc_destapiclint = i; | 567 | lintsrc.destapiclint = i; |
576 | MP_lintsrc_info(&lintsrc); | 568 | MP_lintsrc_info(&lintsrc); |
577 | } | 569 | } |
578 | } | 570 | } |
@@ -657,15 +649,15 @@ static void __init __get_smp_config(unsigned int early) | |||
657 | * ISA defaults and hope it will work. | 649 | * ISA defaults and hope it will work. |
658 | */ | 650 | */ |
659 | if (!mp_irq_entries) { | 651 | if (!mp_irq_entries) { |
660 | struct mpc_config_bus bus; | 652 | struct mpc_bus bus; |
661 | 653 | ||
662 | printk(KERN_ERR "BIOS bug, no explicit IRQ entries, " | 654 | printk(KERN_ERR "BIOS bug, no explicit IRQ entries, " |
663 | "using default mptable. " | 655 | "using default mptable. " |
664 | "(tell your hw vendor)\n"); | 656 | "(tell your hw vendor)\n"); |
665 | 657 | ||
666 | bus.mpc_type = MP_BUS; | 658 | bus.type = MP_BUS; |
667 | bus.mpc_busid = 0; | 659 | bus.busid = 0; |
668 | memcpy(bus.mpc_bustype, "ISA ", 6); | 660 | memcpy(bus.bustype, "ISA ", 6); |
669 | MP_bus_info(&bus); | 661 | MP_bus_info(&bus); |
670 | 662 | ||
671 | construct_default_ioirq_mptable(0); | 663 | construct_default_ioirq_mptable(0); |
@@ -803,14 +795,14 @@ void __init find_smp_config(void) | |||
803 | #ifdef CONFIG_X86_IO_APIC | 795 | #ifdef CONFIG_X86_IO_APIC |
804 | static u8 __initdata irq_used[MAX_IRQ_SOURCES]; | 796 | static u8 __initdata irq_used[MAX_IRQ_SOURCES]; |
805 | 797 | ||
806 | static int __init get_MP_intsrc_index(struct mpc_config_intsrc *m) | 798 | static int __init get_MP_intsrc_index(struct mpc_intsrc *m) |
807 | { | 799 | { |
808 | int i; | 800 | int i; |
809 | 801 | ||
810 | if (m->mpc_irqtype != mp_INT) | 802 | if (m->irqtype != mp_INT) |
811 | return 0; | 803 | return 0; |
812 | 804 | ||
813 | if (m->mpc_irqflag != 0x0f) | 805 | if (m->irqflag != 0x0f) |
814 | return 0; | 806 | return 0; |
815 | 807 | ||
816 | /* not legacy */ | 808 | /* not legacy */ |
@@ -822,9 +814,9 @@ static int __init get_MP_intsrc_index(struct mpc_config_intsrc *m) | |||
822 | if (mp_irqs[i].mp_irqflag != 0x0f) | 814 | if (mp_irqs[i].mp_irqflag != 0x0f) |
823 | continue; | 815 | continue; |
824 | 816 | ||
825 | if (mp_irqs[i].mp_srcbus != m->mpc_srcbus) | 817 | if (mp_irqs[i].mp_srcbus != m->srcbus) |
826 | continue; | 818 | continue; |
827 | if (mp_irqs[i].mp_srcbusirq != m->mpc_srcbusirq) | 819 | if (mp_irqs[i].mp_srcbusirq != m->srcbusirq) |
828 | continue; | 820 | continue; |
829 | if (irq_used[i]) { | 821 | if (irq_used[i]) { |
830 | /* already claimed */ | 822 | /* already claimed */ |
@@ -840,10 +832,10 @@ static int __init get_MP_intsrc_index(struct mpc_config_intsrc *m) | |||
840 | 832 | ||
841 | #define SPARE_SLOT_NUM 20 | 833 | #define SPARE_SLOT_NUM 20 |
842 | 834 | ||
843 | static struct mpc_config_intsrc __initdata *m_spare[SPARE_SLOT_NUM]; | 835 | static struct mpc_intsrc __initdata *m_spare[SPARE_SLOT_NUM]; |
844 | #endif | 836 | #endif |
845 | 837 | ||
846 | static int __init replace_intsrc_all(struct mp_config_table *mpc, | 838 | static int __init replace_intsrc_all(struct mpc_table *mpc, |
847 | unsigned long mpc_new_phys, | 839 | unsigned long mpc_new_phys, |
848 | unsigned long mpc_new_length) | 840 | unsigned long mpc_new_length) |
849 | { | 841 | { |
@@ -855,36 +847,33 @@ static int __init replace_intsrc_all(struct mp_config_table *mpc, | |||
855 | int count = sizeof(*mpc); | 847 | int count = sizeof(*mpc); |
856 | unsigned char *mpt = ((unsigned char *)mpc) + count; | 848 | unsigned char *mpt = ((unsigned char *)mpc) + count; |
857 | 849 | ||
858 | printk(KERN_INFO "mpc_length %x\n", mpc->mpc_length); | 850 | printk(KERN_INFO "mpc_length %x\n", mpc->length); |
859 | while (count < mpc->mpc_length) { | 851 | while (count < mpc->length) { |
860 | switch (*mpt) { | 852 | switch (*mpt) { |
861 | case MP_PROCESSOR: | 853 | case MP_PROCESSOR: |
862 | { | 854 | { |
863 | struct mpc_config_processor *m = | 855 | struct mpc_cpu *m = (struct mpc_cpu *)mpt; |
864 | (struct mpc_config_processor *)mpt; | ||
865 | mpt += sizeof(*m); | 856 | mpt += sizeof(*m); |
866 | count += sizeof(*m); | 857 | count += sizeof(*m); |
867 | break; | 858 | break; |
868 | } | 859 | } |
869 | case MP_BUS: | 860 | case MP_BUS: |
870 | { | 861 | { |
871 | struct mpc_config_bus *m = | 862 | struct mpc_bus *m = (struct mpc_bus *)mpt; |
872 | (struct mpc_config_bus *)mpt; | ||
873 | mpt += sizeof(*m); | 863 | mpt += sizeof(*m); |
874 | count += sizeof(*m); | 864 | count += sizeof(*m); |
875 | break; | 865 | break; |
876 | } | 866 | } |
877 | case MP_IOAPIC: | 867 | case MP_IOAPIC: |
878 | { | 868 | { |
879 | mpt += sizeof(struct mpc_config_ioapic); | 869 | mpt += sizeof(struct mpc_ioapic); |
880 | count += sizeof(struct mpc_config_ioapic); | 870 | count += sizeof(struct mpc_ioapic); |
881 | break; | 871 | break; |
882 | } | 872 | } |
883 | case MP_INTSRC: | 873 | case MP_INTSRC: |
884 | { | 874 | { |
885 | #ifdef CONFIG_X86_IO_APIC | 875 | #ifdef CONFIG_X86_IO_APIC |
886 | struct mpc_config_intsrc *m = | 876 | struct mpc_intsrc *m = (struct mpc_intsrc *)mpt; |
887 | (struct mpc_config_intsrc *)mpt; | ||
888 | 877 | ||
889 | printk(KERN_INFO "OLD "); | 878 | printk(KERN_INFO "OLD "); |
890 | print_MP_intsrc_info(m); | 879 | print_MP_intsrc_info(m); |
@@ -905,14 +894,14 @@ static int __init replace_intsrc_all(struct mp_config_table *mpc, | |||
905 | nr_m_spare++; | 894 | nr_m_spare++; |
906 | } | 895 | } |
907 | #endif | 896 | #endif |
908 | mpt += sizeof(struct mpc_config_intsrc); | 897 | mpt += sizeof(struct mpc_intsrc); |
909 | count += sizeof(struct mpc_config_intsrc); | 898 | count += sizeof(struct mpc_intsrc); |
910 | break; | 899 | break; |
911 | } | 900 | } |
912 | case MP_LINTSRC: | 901 | case MP_LINTSRC: |
913 | { | 902 | { |
914 | struct mpc_config_lintsrc *m = | 903 | struct mpc_lintsrc *m = |
915 | (struct mpc_config_lintsrc *)mpt; | 904 | (struct mpc_lintsrc *)mpt; |
916 | mpt += sizeof(*m); | 905 | mpt += sizeof(*m); |
917 | count += sizeof(*m); | 906 | count += sizeof(*m); |
918 | break; | 907 | break; |
@@ -922,7 +911,7 @@ static int __init replace_intsrc_all(struct mp_config_table *mpc, | |||
922 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); | 911 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); |
923 | printk(KERN_ERR "type %x\n", *mpt); | 912 | printk(KERN_ERR "type %x\n", *mpt); |
924 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, | 913 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, |
925 | 1, mpc, mpc->mpc_length, 1); | 914 | 1, mpc, mpc->length, 1); |
926 | goto out; | 915 | goto out; |
927 | } | 916 | } |
928 | } | 917 | } |
@@ -944,9 +933,8 @@ static int __init replace_intsrc_all(struct mp_config_table *mpc, | |||
944 | assign_to_mpc_intsrc(&mp_irqs[i], m_spare[nr_m_spare]); | 933 | assign_to_mpc_intsrc(&mp_irqs[i], m_spare[nr_m_spare]); |
945 | m_spare[nr_m_spare] = NULL; | 934 | m_spare[nr_m_spare] = NULL; |
946 | } else { | 935 | } else { |
947 | struct mpc_config_intsrc *m = | 936 | struct mpc_intsrc *m = (struct mpc_intsrc *)mpt; |
948 | (struct mpc_config_intsrc *)mpt; | 937 | count += sizeof(struct mpc_intsrc); |
949 | count += sizeof(struct mpc_config_intsrc); | ||
950 | if (!mpc_new_phys) { | 938 | if (!mpc_new_phys) { |
951 | printk(KERN_INFO "No spare slots, try to append...take your risk, new mpc_length %x\n", count); | 939 | printk(KERN_INFO "No spare slots, try to append...take your risk, new mpc_length %x\n", count); |
952 | } else { | 940 | } else { |
@@ -958,17 +946,16 @@ static int __init replace_intsrc_all(struct mp_config_table *mpc, | |||
958 | } | 946 | } |
959 | } | 947 | } |
960 | assign_to_mpc_intsrc(&mp_irqs[i], m); | 948 | assign_to_mpc_intsrc(&mp_irqs[i], m); |
961 | mpc->mpc_length = count; | 949 | mpc->length = count; |
962 | mpt += sizeof(struct mpc_config_intsrc); | 950 | mpt += sizeof(struct mpc_intsrc); |
963 | } | 951 | } |
964 | print_mp_irq_info(&mp_irqs[i]); | 952 | print_mp_irq_info(&mp_irqs[i]); |
965 | } | 953 | } |
966 | #endif | 954 | #endif |
967 | out: | 955 | out: |
968 | /* update checksum */ | 956 | /* update checksum */ |
969 | mpc->mpc_checksum = 0; | 957 | mpc->checksum = 0; |
970 | mpc->mpc_checksum -= mpf_checksum((unsigned char *)mpc, | 958 | mpc->checksum -= mpf_checksum((unsigned char *)mpc, mpc->length); |
971 | mpc->mpc_length); | ||
972 | 959 | ||
973 | return 0; | 960 | return 0; |
974 | } | 961 | } |
@@ -1014,8 +1001,7 @@ static int __init update_mp_table(void) | |||
1014 | char str[16]; | 1001 | char str[16]; |
1015 | char oem[10]; | 1002 | char oem[10]; |
1016 | struct intel_mp_floating *mpf; | 1003 | struct intel_mp_floating *mpf; |
1017 | struct mp_config_table *mpc; | 1004 | struct mpc_table *mpc, *mpc_new; |
1018 | struct mp_config_table *mpc_new; | ||
1019 | 1005 | ||
1020 | if (!enable_update_mptable) | 1006 | if (!enable_update_mptable) |
1021 | return 0; | 1007 | return 0; |
@@ -1041,7 +1027,7 @@ static int __init update_mp_table(void) | |||
1041 | printk(KERN_INFO "mpf: %lx\n", virt_to_phys(mpf)); | 1027 | printk(KERN_INFO "mpf: %lx\n", virt_to_phys(mpf)); |
1042 | printk(KERN_INFO "mpf_physptr: %x\n", mpf->mpf_physptr); | 1028 | printk(KERN_INFO "mpf_physptr: %x\n", mpf->mpf_physptr); |
1043 | 1029 | ||
1044 | if (mpc_new_phys && mpc->mpc_length > mpc_new_length) { | 1030 | if (mpc_new_phys && mpc->length > mpc_new_length) { |
1045 | mpc_new_phys = 0; | 1031 | mpc_new_phys = 0; |
1046 | printk(KERN_INFO "mpc_new_length is %ld, please use alloc_mptable=8k\n", | 1032 | printk(KERN_INFO "mpc_new_length is %ld, please use alloc_mptable=8k\n", |
1047 | mpc_new_length); | 1033 | mpc_new_length); |
@@ -1050,10 +1036,10 @@ static int __init update_mp_table(void) | |||
1050 | if (!mpc_new_phys) { | 1036 | if (!mpc_new_phys) { |
1051 | unsigned char old, new; | 1037 | unsigned char old, new; |
1052 | /* check if we can change the postion */ | 1038 | /* check if we can change the postion */ |
1053 | mpc->mpc_checksum = 0; | 1039 | mpc->checksum = 0; |
1054 | old = mpf_checksum((unsigned char *)mpc, mpc->mpc_length); | 1040 | old = mpf_checksum((unsigned char *)mpc, mpc->length); |
1055 | mpc->mpc_checksum = 0xff; | 1041 | mpc->checksum = 0xff; |
1056 | new = mpf_checksum((unsigned char *)mpc, mpc->mpc_length); | 1042 | new = mpf_checksum((unsigned char *)mpc, mpc->length); |
1057 | if (old == new) { | 1043 | if (old == new) { |
1058 | printk(KERN_INFO "mpc is readonly, please try alloc_mptable instead\n"); | 1044 | printk(KERN_INFO "mpc is readonly, please try alloc_mptable instead\n"); |
1059 | return 0; | 1045 | return 0; |
@@ -1062,7 +1048,7 @@ static int __init update_mp_table(void) | |||
1062 | } else { | 1048 | } else { |
1063 | mpf->mpf_physptr = mpc_new_phys; | 1049 | mpf->mpf_physptr = mpc_new_phys; |
1064 | mpc_new = phys_to_virt(mpc_new_phys); | 1050 | mpc_new = phys_to_virt(mpc_new_phys); |
1065 | memcpy(mpc_new, mpc, mpc->mpc_length); | 1051 | memcpy(mpc_new, mpc, mpc->length); |
1066 | mpc = mpc_new; | 1052 | mpc = mpc_new; |
1067 | /* check if we can modify that */ | 1053 | /* check if we can modify that */ |
1068 | if (mpc_new_phys - mpf->mpf_physptr) { | 1054 | if (mpc_new_phys - mpf->mpf_physptr) { |
diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c index 45a09ccdc214..7228979f1e7f 100644 --- a/arch/x86/kernel/nmi.c +++ b/arch/x86/kernel/nmi.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <linux/kernel_stat.h> | 26 | #include <linux/kernel_stat.h> |
27 | #include <linux/kdebug.h> | 27 | #include <linux/kdebug.h> |
28 | #include <linux/smp.h> | 28 | #include <linux/smp.h> |
29 | #include <linux/nmi.h> | ||
30 | 29 | ||
31 | #include <asm/i8259.h> | 30 | #include <asm/i8259.h> |
32 | #include <asm/io_apic.h> | 31 | #include <asm/io_apic.h> |
diff --git a/arch/x86/kernel/numaq_32.c b/arch/x86/kernel/numaq_32.c index 0deea37a53cf..f2191d4f2717 100644 --- a/arch/x86/kernel/numaq_32.c +++ b/arch/x86/kernel/numaq_32.c | |||
@@ -117,16 +117,15 @@ static inline int generate_logical_apicid(int quad, int phys_apicid) | |||
117 | } | 117 | } |
118 | 118 | ||
119 | /* x86_quirks member */ | 119 | /* x86_quirks member */ |
120 | static int mpc_apic_id(struct mpc_config_processor *m) | 120 | static int mpc_apic_id(struct mpc_cpu *m) |
121 | { | 121 | { |
122 | int quad = translation_table[mpc_record]->trans_quad; | 122 | int quad = translation_table[mpc_record]->trans_quad; |
123 | int logical_apicid = generate_logical_apicid(quad, m->mpc_apicid); | 123 | int logical_apicid = generate_logical_apicid(quad, m->apicid); |
124 | 124 | ||
125 | printk(KERN_DEBUG "Processor #%d %u:%u APIC version %d (quad %d, apic %d)\n", | 125 | printk(KERN_DEBUG "Processor #%d %u:%u APIC version %d (quad %d, apic %d)\n", |
126 | m->mpc_apicid, | 126 | m->apicid, (m->cpufeature & CPU_FAMILY_MASK) >> 8, |
127 | (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8, | 127 | (m->cpufeature & CPU_MODEL_MASK) >> 4, |
128 | (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4, | 128 | m->apicver, quad, logical_apicid); |
129 | m->mpc_apicver, quad, logical_apicid); | ||
130 | return logical_apicid; | 129 | return logical_apicid; |
131 | } | 130 | } |
132 | 131 | ||
@@ -135,26 +134,26 @@ int mp_bus_id_to_node[MAX_MP_BUSSES]; | |||
135 | int mp_bus_id_to_local[MAX_MP_BUSSES]; | 134 | int mp_bus_id_to_local[MAX_MP_BUSSES]; |
136 | 135 | ||
137 | /* x86_quirks member */ | 136 | /* x86_quirks member */ |
138 | static void mpc_oem_bus_info(struct mpc_config_bus *m, char *name) | 137 | static void mpc_oem_bus_info(struct mpc_bus *m, char *name) |
139 | { | 138 | { |
140 | int quad = translation_table[mpc_record]->trans_quad; | 139 | int quad = translation_table[mpc_record]->trans_quad; |
141 | int local = translation_table[mpc_record]->trans_local; | 140 | int local = translation_table[mpc_record]->trans_local; |
142 | 141 | ||
143 | mp_bus_id_to_node[m->mpc_busid] = quad; | 142 | mp_bus_id_to_node[m->busid] = quad; |
144 | mp_bus_id_to_local[m->mpc_busid] = local; | 143 | mp_bus_id_to_local[m->busid] = local; |
145 | printk(KERN_INFO "Bus #%d is %s (node %d)\n", | 144 | printk(KERN_INFO "Bus #%d is %s (node %d)\n", |
146 | m->mpc_busid, name, quad); | 145 | m->busid, name, quad); |
147 | } | 146 | } |
148 | 147 | ||
149 | int quad_local_to_mp_bus_id [NR_CPUS/4][4]; | 148 | int quad_local_to_mp_bus_id [NR_CPUS/4][4]; |
150 | 149 | ||
151 | /* x86_quirks member */ | 150 | /* x86_quirks member */ |
152 | static void mpc_oem_pci_bus(struct mpc_config_bus *m) | 151 | static void mpc_oem_pci_bus(struct mpc_bus *m) |
153 | { | 152 | { |
154 | int quad = translation_table[mpc_record]->trans_quad; | 153 | int quad = translation_table[mpc_record]->trans_quad; |
155 | int local = translation_table[mpc_record]->trans_local; | 154 | int local = translation_table[mpc_record]->trans_local; |
156 | 155 | ||
157 | quad_local_to_mp_bus_id[quad][local] = m->mpc_busid; | 156 | quad_local_to_mp_bus_id[quad][local] = m->busid; |
158 | } | 157 | } |
159 | 158 | ||
160 | static void __init MP_translation_info(struct mpc_config_translation *m) | 159 | static void __init MP_translation_info(struct mpc_config_translation *m) |
@@ -186,7 +185,7 @@ static int __init mpf_checksum(unsigned char *mp, int len) | |||
186 | * Read/parse the MPC oem tables | 185 | * Read/parse the MPC oem tables |
187 | */ | 186 | */ |
188 | 187 | ||
189 | static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, | 188 | static void __init smp_read_mpc_oem(struct mpc_oemtable *oemtable, |
190 | unsigned short oemsize) | 189 | unsigned short oemsize) |
191 | { | 190 | { |
192 | int count = sizeof(*oemtable); /* the header size */ | 191 | int count = sizeof(*oemtable); /* the header size */ |
@@ -195,18 +194,18 @@ static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, | |||
195 | mpc_record = 0; | 194 | mpc_record = 0; |
196 | printk(KERN_INFO "Found an OEM MPC table at %8p - parsing it ... \n", | 195 | printk(KERN_INFO "Found an OEM MPC table at %8p - parsing it ... \n", |
197 | oemtable); | 196 | oemtable); |
198 | if (memcmp(oemtable->oem_signature, MPC_OEM_SIGNATURE, 4)) { | 197 | if (memcmp(oemtable->signature, MPC_OEM_SIGNATURE, 4)) { |
199 | printk(KERN_WARNING | 198 | printk(KERN_WARNING |
200 | "SMP mpc oemtable: bad signature [%c%c%c%c]!\n", | 199 | "SMP mpc oemtable: bad signature [%c%c%c%c]!\n", |
201 | oemtable->oem_signature[0], oemtable->oem_signature[1], | 200 | oemtable->signature[0], oemtable->signature[1], |
202 | oemtable->oem_signature[2], oemtable->oem_signature[3]); | 201 | oemtable->signature[2], oemtable->signature[3]); |
203 | return; | 202 | return; |
204 | } | 203 | } |
205 | if (mpf_checksum((unsigned char *)oemtable, oemtable->oem_length)) { | 204 | if (mpf_checksum((unsigned char *)oemtable, oemtable->length)) { |
206 | printk(KERN_WARNING "SMP oem mptable: checksum error!\n"); | 205 | printk(KERN_WARNING "SMP oem mptable: checksum error!\n"); |
207 | return; | 206 | return; |
208 | } | 207 | } |
209 | while (count < oemtable->oem_length) { | 208 | while (count < oemtable->length) { |
210 | switch (*oemptr) { | 209 | switch (*oemptr) { |
211 | case MP_TRANSLATION: | 210 | case MP_TRANSLATION: |
212 | { | 211 | { |
@@ -260,8 +259,7 @@ static struct x86_quirks numaq_x86_quirks __initdata = { | |||
260 | .update_genapic = numaq_update_genapic, | 259 | .update_genapic = numaq_update_genapic, |
261 | }; | 260 | }; |
262 | 261 | ||
263 | void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, | 262 | void numaq_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) |
264 | char *productid) | ||
265 | { | 263 | { |
266 | if (strncmp(oem, "IBM NUMA", 8)) | 264 | if (strncmp(oem, "IBM NUMA", 8)) |
267 | printk("Warning! Not a NUMA-Q system!\n"); | 265 | printk("Warning! Not a NUMA-Q system!\n"); |
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 3ba155d24884..a546f55c77b4 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -39,11 +39,12 @@ | |||
39 | #include <linux/prctl.h> | 39 | #include <linux/prctl.h> |
40 | #include <linux/dmi.h> | 40 | #include <linux/dmi.h> |
41 | #include <linux/ftrace.h> | 41 | #include <linux/ftrace.h> |
42 | #include <linux/uaccess.h> | ||
43 | #include <linux/io.h> | ||
44 | #include <linux/kdebug.h> | ||
42 | 45 | ||
43 | #include <asm/uaccess.h> | ||
44 | #include <asm/pgtable.h> | 46 | #include <asm/pgtable.h> |
45 | #include <asm/system.h> | 47 | #include <asm/system.h> |
46 | #include <asm/io.h> | ||
47 | #include <asm/ldt.h> | 48 | #include <asm/ldt.h> |
48 | #include <asm/processor.h> | 49 | #include <asm/processor.h> |
49 | #include <asm/i387.h> | 50 | #include <asm/i387.h> |
@@ -56,10 +57,8 @@ | |||
56 | 57 | ||
57 | #include <asm/tlbflush.h> | 58 | #include <asm/tlbflush.h> |
58 | #include <asm/cpu.h> | 59 | #include <asm/cpu.h> |
59 | #include <asm/kdebug.h> | ||
60 | #include <asm/idle.h> | 60 | #include <asm/idle.h> |
61 | #include <asm/syscalls.h> | 61 | #include <asm/syscalls.h> |
62 | #include <asm/smp.h> | ||
63 | #include <asm/ds.h> | 62 | #include <asm/ds.h> |
64 | 63 | ||
65 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); | 64 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); |
@@ -205,7 +204,7 @@ extern void kernel_thread_helper(void); | |||
205 | /* | 204 | /* |
206 | * Create a kernel thread | 205 | * Create a kernel thread |
207 | */ | 206 | */ |
208 | int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) | 207 | int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) |
209 | { | 208 | { |
210 | struct pt_regs regs; | 209 | struct pt_regs regs; |
211 | 210 | ||
@@ -266,7 +265,7 @@ void flush_thread(void) | |||
266 | tsk->thread.debugreg3 = 0; | 265 | tsk->thread.debugreg3 = 0; |
267 | tsk->thread.debugreg6 = 0; | 266 | tsk->thread.debugreg6 = 0; |
268 | tsk->thread.debugreg7 = 0; | 267 | tsk->thread.debugreg7 = 0; |
269 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); | 268 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); |
270 | clear_tsk_thread_flag(tsk, TIF_DEBUG); | 269 | clear_tsk_thread_flag(tsk, TIF_DEBUG); |
271 | /* | 270 | /* |
272 | * Forget coprocessor state.. | 271 | * Forget coprocessor state.. |
@@ -293,9 +292,9 @@ void prepare_to_copy(struct task_struct *tsk) | |||
293 | 292 | ||
294 | int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, | 293 | int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, |
295 | unsigned long unused, | 294 | unsigned long unused, |
296 | struct task_struct * p, struct pt_regs * regs) | 295 | struct task_struct *p, struct pt_regs *regs) |
297 | { | 296 | { |
298 | struct pt_regs * childregs; | 297 | struct pt_regs *childregs; |
299 | struct task_struct *tsk; | 298 | struct task_struct *tsk; |
300 | int err; | 299 | int err; |
301 | 300 | ||
@@ -347,7 +346,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, | |||
347 | void | 346 | void |
348 | start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) | 347 | start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) |
349 | { | 348 | { |
350 | __asm__("movl %0, %%gs" :: "r"(0)); | 349 | __asm__("movl %0, %%gs" : : "r"(0)); |
351 | regs->fs = 0; | 350 | regs->fs = 0; |
352 | set_fs(USER_DS); | 351 | set_fs(USER_DS); |
353 | regs->ds = __USER_DS; | 352 | regs->ds = __USER_DS; |
@@ -638,7 +637,7 @@ asmlinkage int sys_vfork(struct pt_regs regs) | |||
638 | asmlinkage int sys_execve(struct pt_regs regs) | 637 | asmlinkage int sys_execve(struct pt_regs regs) |
639 | { | 638 | { |
640 | int error; | 639 | int error; |
641 | char * filename; | 640 | char *filename; |
642 | 641 | ||
643 | filename = getname((char __user *) regs.bx); | 642 | filename = getname((char __user *) regs.bx); |
644 | error = PTR_ERR(filename); | 643 | error = PTR_ERR(filename); |
diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index aa55764602b1..55c46074eba0 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c | |||
@@ -5,12 +5,11 @@ | |||
5 | #include <linux/percpu.h> | 5 | #include <linux/percpu.h> |
6 | #include <linux/kexec.h> | 6 | #include <linux/kexec.h> |
7 | #include <linux/crash_dump.h> | 7 | #include <linux/crash_dump.h> |
8 | #include <asm/smp.h> | 8 | #include <linux/smp.h> |
9 | #include <asm/percpu.h> | 9 | #include <linux/topology.h> |
10 | #include <asm/sections.h> | 10 | #include <asm/sections.h> |
11 | #include <asm/processor.h> | 11 | #include <asm/processor.h> |
12 | #include <asm/setup.h> | 12 | #include <asm/setup.h> |
13 | #include <asm/topology.h> | ||
14 | #include <asm/mpspec.h> | 13 | #include <asm/mpspec.h> |
15 | #include <asm/apicdef.h> | 14 | #include <asm/apicdef.h> |
16 | #include <asm/highmem.h> | 15 | #include <asm/highmem.h> |
@@ -20,8 +19,8 @@ unsigned int num_processors; | |||
20 | unsigned disabled_cpus __cpuinitdata; | 19 | unsigned disabled_cpus __cpuinitdata; |
21 | /* Processor that is doing the boot up */ | 20 | /* Processor that is doing the boot up */ |
22 | unsigned int boot_cpu_physical_apicid = -1U; | 21 | unsigned int boot_cpu_physical_apicid = -1U; |
23 | unsigned int max_physical_apicid; | ||
24 | EXPORT_SYMBOL(boot_cpu_physical_apicid); | 22 | EXPORT_SYMBOL(boot_cpu_physical_apicid); |
23 | unsigned int max_physical_apicid; | ||
25 | 24 | ||
26 | /* Bitmask of physically existing CPUs */ | 25 | /* Bitmask of physically existing CPUs */ |
27 | physid_mask_t phys_cpu_present_map; | 26 | physid_mask_t phys_cpu_present_map; |
@@ -303,8 +302,8 @@ static void __cpuinit numa_set_cpumask(int cpu, int enable) | |||
303 | 302 | ||
304 | cpulist_scnprintf(buf, sizeof(buf), mask); | 303 | cpulist_scnprintf(buf, sizeof(buf), mask); |
305 | printk(KERN_DEBUG "%s cpu %d node %d: mask now %s\n", | 304 | printk(KERN_DEBUG "%s cpu %d node %d: mask now %s\n", |
306 | enable? "numa_add_cpu":"numa_remove_cpu", cpu, node, buf); | 305 | enable ? "numa_add_cpu" : "numa_remove_cpu", cpu, node, buf); |
307 | } | 306 | } |
308 | 307 | ||
309 | void __cpuinit numa_add_cpu(int cpu) | 308 | void __cpuinit numa_add_cpu(int cpu) |
310 | { | 309 | { |
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c index 182135ba1eaf..e6faa3316bd2 100644 --- a/arch/x86/kernel/smp.c +++ b/arch/x86/kernel/smp.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Intel SMP support routines. | 2 | * Intel SMP support routines. |
3 | * | 3 | * |
4 | * (c) 1995 Alan Cox, Building #3 <alan@redhat.com> | 4 | * (c) 1995 Alan Cox, Building #3 <alan@lxorguk.ukuu.org.uk> |
5 | * (c) 1998-99, 2000 Ingo Molnar <mingo@redhat.com> | 5 | * (c) 1998-99, 2000 Ingo Molnar <mingo@redhat.com> |
6 | * (c) 2002,2003 Andi Kleen, SuSE Labs. | 6 | * (c) 2002,2003 Andi Kleen, SuSE Labs. |
7 | * | 7 | * |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 00e17e589482..bb1a3b1fc87f 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * x86 SMP booting functions | 2 | * x86 SMP booting functions |
3 | * | 3 | * |
4 | * (c) 1995 Alan Cox, Building #3 <alan@redhat.com> | 4 | * (c) 1995 Alan Cox, Building #3 <alan@lxorguk.ukuu.org.uk> |
5 | * (c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com> | 5 | * (c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com> |
6 | * Copyright 2001 Andi Kleen, SuSE Labs. | 6 | * Copyright 2001 Andi Kleen, SuSE Labs. |
7 | * | 7 | * |
diff --git a/arch/x86/kernel/time_32.c b/arch/x86/kernel/time_32.c index 65309e4cb1c0..3985cac0ed47 100644 --- a/arch/x86/kernel/time_32.c +++ b/arch/x86/kernel/time_32.c | |||
@@ -105,8 +105,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id) | |||
105 | high bit of the PPI port B (0x61). Note that some PS/2s, | 105 | high bit of the PPI port B (0x61). Note that some PS/2s, |
106 | notably the 55SX, work fine if this is removed. */ | 106 | notably the 55SX, work fine if this is removed. */ |
107 | 107 | ||
108 | u8 irq_v = inb_p( 0x61 ); /* read the current state */ | 108 | u8 irq_v = inb_p(0x61); /* read the current state */ |
109 | outb_p( irq_v|0x80, 0x61 ); /* reset the IRQ */ | 109 | outb_p(irq_v | 0x80, 0x61); /* reset the IRQ */ |
110 | } | 110 | } |
111 | #endif | 111 | #endif |
112 | 112 | ||
diff --git a/arch/x86/kernel/time_64.c b/arch/x86/kernel/time_64.c index 891e7a7c4334..e6e695acd725 100644 --- a/arch/x86/kernel/time_64.c +++ b/arch/x86/kernel/time_64.c | |||
@@ -17,10 +17,10 @@ | |||
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <linux/time.h> | 18 | #include <linux/time.h> |
19 | #include <linux/mca.h> | 19 | #include <linux/mca.h> |
20 | #include <linux/nmi.h> | ||
20 | 21 | ||
21 | #include <asm/i8253.h> | 22 | #include <asm/i8253.h> |
22 | #include <asm/hpet.h> | 23 | #include <asm/hpet.h> |
23 | #include <asm/nmi.h> | ||
24 | #include <asm/vgtod.h> | 24 | #include <asm/vgtod.h> |
25 | #include <asm/time.h> | 25 | #include <asm/time.h> |
26 | #include <asm/timer.h> | 26 | #include <asm/timer.h> |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index c9a666cdd3db..98c2d055284b 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -63,9 +63,6 @@ | |||
63 | #else | 63 | #else |
64 | #include <asm/processor-flags.h> | 64 | #include <asm/processor-flags.h> |
65 | #include <asm/arch_hooks.h> | 65 | #include <asm/arch_hooks.h> |
66 | #include <asm/nmi.h> | ||
67 | #include <asm/smp.h> | ||
68 | #include <asm/io.h> | ||
69 | #include <asm/traps.h> | 66 | #include <asm/traps.h> |
70 | 67 | ||
71 | #include "cpu/mcheck/mce.h" | 68 | #include "cpu/mcheck/mce.h" |
diff --git a/arch/x86/kernel/visws_quirks.c b/arch/x86/kernel/visws_quirks.c index 0c9667f0752a..d801d06af068 100644 --- a/arch/x86/kernel/visws_quirks.c +++ b/arch/x86/kernel/visws_quirks.c | |||
@@ -176,33 +176,31 @@ static int __init visws_get_smp_config(unsigned int early) | |||
176 | * No problem for Linux. | 176 | * No problem for Linux. |
177 | */ | 177 | */ |
178 | 178 | ||
179 | static void __init MP_processor_info(struct mpc_config_processor *m) | 179 | static void __init MP_processor_info(struct mpc_cpu *m) |
180 | { | 180 | { |
181 | int ver, logical_apicid; | 181 | int ver, logical_apicid; |
182 | physid_mask_t apic_cpus; | 182 | physid_mask_t apic_cpus; |
183 | 183 | ||
184 | if (!(m->mpc_cpuflag & CPU_ENABLED)) | 184 | if (!(m->cpuflag & CPU_ENABLED)) |
185 | return; | 185 | return; |
186 | 186 | ||
187 | logical_apicid = m->mpc_apicid; | 187 | logical_apicid = m->apicid; |
188 | printk(KERN_INFO "%sCPU #%d %u:%u APIC version %d\n", | 188 | printk(KERN_INFO "%sCPU #%d %u:%u APIC version %d\n", |
189 | m->mpc_cpuflag & CPU_BOOTPROCESSOR ? "Bootup " : "", | 189 | m->cpuflag & CPU_BOOTPROCESSOR ? "Bootup " : "", |
190 | m->mpc_apicid, | 190 | m->apicid, (m->cpufeature & CPU_FAMILY_MASK) >> 8, |
191 | (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8, | 191 | (m->cpufeature & CPU_MODEL_MASK) >> 4, m->apicver); |
192 | (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4, | ||
193 | m->mpc_apicver); | ||
194 | 192 | ||
195 | if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) | 193 | if (m->cpuflag & CPU_BOOTPROCESSOR) |
196 | boot_cpu_physical_apicid = m->mpc_apicid; | 194 | boot_cpu_physical_apicid = m->apicid; |
197 | 195 | ||
198 | ver = m->mpc_apicver; | 196 | ver = m->apicver; |
199 | if ((ver >= 0x14 && m->mpc_apicid >= 0xff) || m->mpc_apicid >= 0xf) { | 197 | if ((ver >= 0x14 && m->apicid >= 0xff) || m->apicid >= 0xf) { |
200 | printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n", | 198 | printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n", |
201 | m->mpc_apicid, MAX_APICS); | 199 | m->apicid, MAX_APICS); |
202 | return; | 200 | return; |
203 | } | 201 | } |
204 | 202 | ||
205 | apic_cpus = apicid_to_cpu_present(m->mpc_apicid); | 203 | apic_cpus = apicid_to_cpu_present(m->apicid); |
206 | physids_or(phys_cpu_present_map, phys_cpu_present_map, apic_cpus); | 204 | physids_or(phys_cpu_present_map, phys_cpu_present_map, apic_cpus); |
207 | /* | 205 | /* |
208 | * Validate version | 206 | * Validate version |
@@ -210,15 +208,15 @@ static void __init MP_processor_info(struct mpc_config_processor *m) | |||
210 | if (ver == 0x0) { | 208 | if (ver == 0x0) { |
211 | printk(KERN_ERR "BIOS bug, APIC version is 0 for CPU#%d! " | 209 | printk(KERN_ERR "BIOS bug, APIC version is 0 for CPU#%d! " |
212 | "fixing up to 0x10. (tell your hw vendor)\n", | 210 | "fixing up to 0x10. (tell your hw vendor)\n", |
213 | m->mpc_apicid); | 211 | m->apicid); |
214 | ver = 0x10; | 212 | ver = 0x10; |
215 | } | 213 | } |
216 | apic_version[m->mpc_apicid] = ver; | 214 | apic_version[m->apicid] = ver; |
217 | } | 215 | } |
218 | 216 | ||
219 | static int __init visws_find_smp_config(unsigned int reserve) | 217 | static int __init visws_find_smp_config(unsigned int reserve) |
220 | { | 218 | { |
221 | struct mpc_config_processor *mp = phys_to_virt(CO_CPU_TAB_PHYS); | 219 | struct mpc_cpu *mp = phys_to_virt(CO_CPU_TAB_PHYS); |
222 | unsigned short ncpus = readw(phys_to_virt(CO_CPU_NUM_PHYS)); | 220 | unsigned short ncpus = readw(phys_to_virt(CO_CPU_NUM_PHYS)); |
223 | 221 | ||
224 | if (ncpus > CO_CPU_MAX) { | 222 | if (ncpus > CO_CPU_MAX) { |