diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-10 09:13:09 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-10 09:13:09 -0500 |
commit | 3d14bdad40315b54470cb7812293d14c8af2bf7d (patch) | |
tree | 270503b36cb671cea2f9b283168a3f932f9677d2 | |
parent | 4e9b1c184cadbece3694603de5f880b6e35bd7a7 (diff) | |
parent | 51d7a1398d1851e892504e97ca20521610dfcece (diff) |
Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (36 commits)
x86: fix section mismatch warnings in mcheck/mce_amd_64.c
x86: offer frame pointers in all build modes
x86: remove duplicated #include's
x86: k8 numa register active regions later
x86: update Alan Cox's email addresses
x86: rename all fields of mpc_table mpc_X to X
x86: rename all fields of mpc_oemtable oem_X to X
x86: rename all fields of mpc_bus mpc_X to X
x86: rename all fields of mpc_cpu mpc_X to X
x86: rename all fields of mpc_intsrc mpc_X to X
x86: rename all fields of mpc_lintsrc mpc_X to X
x86: rename all fields of mpc_iopic mpc_X to X
x86: irqinit_64.c init_ISA_irqs should be static
Documentation/x86/boot.txt: payload length was changed to payload_length
x86: setup_percpu.c fix style problems
x86: irqinit_64.c fix style problems
x86: irqinit_32.c fix style problems
x86: i8259.c fix style problems
x86: irq_32.c fix style problems
x86: ioport.c fix style problems
...
43 files changed, 363 insertions, 399 deletions
diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt index fcdc62b3c3d8..7b4596ac4120 100644 --- a/Documentation/x86/boot.txt +++ b/Documentation/x86/boot.txt | |||
@@ -44,7 +44,7 @@ Protocol 2.07: (Kernel 2.6.24) Added paravirtualised boot protocol. | |||
44 | and KEEP_SEGMENTS flag in load_flags. | 44 | and KEEP_SEGMENTS flag in load_flags. |
45 | 45 | ||
46 | Protocol 2.08: (Kernel 2.6.26) Added crc32 checksum and ELF format | 46 | Protocol 2.08: (Kernel 2.6.26) Added crc32 checksum and ELF format |
47 | payload. Introduced payload_offset and payload length | 47 | payload. Introduced payload_offset and payload_length |
48 | fields to aid in locating the payload. | 48 | fields to aid in locating the payload. |
49 | 49 | ||
50 | Protocol 2.09: (Kernel 2.6.26) Added a field of 64-bit physical | 50 | Protocol 2.09: (Kernel 2.6.26) Added a field of 64-bit physical |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 862adb9bf0d4..73f7fe8fd4d1 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -27,6 +27,7 @@ config X86 | |||
27 | select HAVE_IOREMAP_PROT | 27 | select HAVE_IOREMAP_PROT |
28 | select HAVE_KPROBES | 28 | select HAVE_KPROBES |
29 | select ARCH_WANT_OPTIONAL_GPIOLIB | 29 | select ARCH_WANT_OPTIONAL_GPIOLIB |
30 | select ARCH_WANT_FRAME_POINTERS | ||
30 | select HAVE_KRETPROBES | 31 | select HAVE_KRETPROBES |
31 | select HAVE_FTRACE_MCOUNT_RECORD | 32 | select HAVE_FTRACE_MCOUNT_RECORD |
32 | select HAVE_DYNAMIC_FTRACE | 33 | select HAVE_DYNAMIC_FTRACE |
diff --git a/arch/x86/include/asm/es7000/mpparse.h b/arch/x86/include/asm/es7000/mpparse.h index ed5a3caae141..c1629b090ec2 100644 --- a/arch/x86/include/asm/es7000/mpparse.h +++ b/arch/x86/include/asm/es7000/mpparse.h | |||
@@ -10,8 +10,7 @@ extern void setup_unisys(void); | |||
10 | 10 | ||
11 | #ifndef CONFIG_X86_GENERICARCH | 11 | #ifndef CONFIG_X86_GENERICARCH |
12 | extern int acpi_madt_oem_check(char *oem_id, char *oem_table_id); | 12 | extern int acpi_madt_oem_check(char *oem_id, char *oem_table_id); |
13 | extern int mps_oem_check(struct mp_config_table *mpc, char *oem, | 13 | extern int mps_oem_check(struct mpc_table *mpc, char *oem, char *productid); |
14 | char *productid); | ||
15 | #endif | 14 | #endif |
16 | 15 | ||
17 | #ifdef CONFIG_ACPI | 16 | #ifdef CONFIG_ACPI |
diff --git a/arch/x86/include/asm/genapic_32.h b/arch/x86/include/asm/genapic_32.h index 746f37a7963a..2c05b737ee22 100644 --- a/arch/x86/include/asm/genapic_32.h +++ b/arch/x86/include/asm/genapic_32.h | |||
@@ -15,9 +15,9 @@ | |||
15 | * Copyright 2003 Andi Kleen, SuSE Labs. | 15 | * Copyright 2003 Andi Kleen, SuSE Labs. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | struct mpc_config_bus; | 18 | struct mpc_bus; |
19 | struct mp_config_table; | 19 | struct mpc_table; |
20 | struct mpc_config_processor; | 20 | struct mpc_cpu; |
21 | 21 | ||
22 | struct genapic { | 22 | struct genapic { |
23 | char *name; | 23 | char *name; |
@@ -51,7 +51,7 @@ struct genapic { | |||
51 | /* When one of the next two hooks returns 1 the genapic | 51 | /* When one of the next two hooks returns 1 the genapic |
52 | is switched to this. Essentially they are additional probe | 52 | is switched to this. Essentially they are additional probe |
53 | functions. */ | 53 | functions. */ |
54 | int (*mps_oem_check)(struct mp_config_table *mpc, char *oem, | 54 | int (*mps_oem_check)(struct mpc_table *mpc, char *oem, |
55 | char *productid); | 55 | char *productid); |
56 | int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); | 56 | int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); |
57 | 57 | ||
diff --git a/arch/x86/include/asm/mach-default/mach_mpparse.h b/arch/x86/include/asm/mach-default/mach_mpparse.h index 8c1ea21238a7..c70a263d68cd 100644 --- a/arch/x86/include/asm/mach-default/mach_mpparse.h +++ b/arch/x86/include/asm/mach-default/mach_mpparse.h | |||
@@ -1,8 +1,8 @@ | |||
1 | #ifndef _ASM_X86_MACH_DEFAULT_MACH_MPPARSE_H | 1 | #ifndef _ASM_X86_MACH_DEFAULT_MACH_MPPARSE_H |
2 | #define _ASM_X86_MACH_DEFAULT_MACH_MPPARSE_H | 2 | #define _ASM_X86_MACH_DEFAULT_MACH_MPPARSE_H |
3 | 3 | ||
4 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 4 | static inline int |
5 | char *productid) | 5 | mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) |
6 | { | 6 | { |
7 | return 0; | 7 | return 0; |
8 | } | 8 | } |
diff --git a/arch/x86/include/asm/mach-generic/mach_mpparse.h b/arch/x86/include/asm/mach-generic/mach_mpparse.h index 048f1d468535..9444ab8dca94 100644 --- a/arch/x86/include/asm/mach-generic/mach_mpparse.h +++ b/arch/x86/include/asm/mach-generic/mach_mpparse.h | |||
@@ -2,9 +2,8 @@ | |||
2 | #define _ASM_X86_MACH_GENERIC_MACH_MPPARSE_H | 2 | #define _ASM_X86_MACH_GENERIC_MACH_MPPARSE_H |
3 | 3 | ||
4 | 4 | ||
5 | extern int mps_oem_check(struct mp_config_table *mpc, char *oem, | 5 | extern int mps_oem_check(struct mpc_table *, char *, char *); |
6 | char *productid); | ||
7 | 6 | ||
8 | extern int acpi_madt_oem_check(char *oem_id, char *oem_table_id); | 7 | extern int acpi_madt_oem_check(char *, char *); |
9 | 8 | ||
10 | #endif /* _ASM_X86_MACH_GENERIC_MACH_MPPARSE_H */ | 9 | #endif /* _ASM_X86_MACH_GENERIC_MACH_MPPARSE_H */ |
diff --git a/arch/x86/include/asm/mach-generic/mach_mpspec.h b/arch/x86/include/asm/mach-generic/mach_mpspec.h index bbab5ccfd4fe..3bc407226578 100644 --- a/arch/x86/include/asm/mach-generic/mach_mpspec.h +++ b/arch/x86/include/asm/mach-generic/mach_mpspec.h | |||
@@ -7,6 +7,6 @@ | |||
7 | /* Maximum 256 PCI busses, plus 1 ISA bus in each of 4 cabinets. */ | 7 | /* Maximum 256 PCI busses, plus 1 ISA bus in each of 4 cabinets. */ |
8 | #define MAX_MP_BUSSES 260 | 8 | #define MAX_MP_BUSSES 260 |
9 | 9 | ||
10 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, | 10 | extern void numaq_mps_oem_check(struct mpc_table *, char *, char *); |
11 | char *productid); | 11 | |
12 | #endif /* _ASM_X86_MACH_GENERIC_MACH_MPSPEC_H */ | 12 | #endif /* _ASM_X86_MACH_GENERIC_MACH_MPSPEC_H */ |
diff --git a/arch/x86/include/asm/mpspec_def.h b/arch/x86/include/asm/mpspec_def.h index e3ace7d1d35d..59568bc4767f 100644 --- a/arch/x86/include/asm/mpspec_def.h +++ b/arch/x86/include/asm/mpspec_def.h | |||
@@ -39,17 +39,17 @@ struct intel_mp_floating { | |||
39 | 39 | ||
40 | #define MPC_SIGNATURE "PCMP" | 40 | #define MPC_SIGNATURE "PCMP" |
41 | 41 | ||
42 | struct mp_config_table { | 42 | struct mpc_table { |
43 | char mpc_signature[4]; | 43 | char signature[4]; |
44 | unsigned short mpc_length; /* Size of table */ | 44 | unsigned short length; /* Size of table */ |
45 | char mpc_spec; /* 0x01 */ | 45 | char spec; /* 0x01 */ |
46 | char mpc_checksum; | 46 | char checksum; |
47 | char mpc_oem[8]; | 47 | char oem[8]; |
48 | char mpc_productid[12]; | 48 | char productid[12]; |
49 | unsigned int mpc_oemptr; /* 0 if not present */ | 49 | unsigned int oemptr; /* 0 if not present */ |
50 | unsigned short mpc_oemsize; /* 0 if not present */ | 50 | unsigned short oemsize; /* 0 if not present */ |
51 | unsigned short mpc_oemcount; | 51 | unsigned short oemcount; |
52 | unsigned int mpc_lapic; /* APIC address */ | 52 | unsigned int lapic; /* APIC address */ |
53 | unsigned int reserved; | 53 | unsigned int reserved; |
54 | }; | 54 | }; |
55 | 55 | ||
@@ -70,20 +70,20 @@ struct mp_config_table { | |||
70 | #define CPU_MODEL_MASK 0x00F0 | 70 | #define CPU_MODEL_MASK 0x00F0 |
71 | #define CPU_FAMILY_MASK 0x0F00 | 71 | #define CPU_FAMILY_MASK 0x0F00 |
72 | 72 | ||
73 | struct mpc_config_processor { | 73 | struct mpc_cpu { |
74 | unsigned char mpc_type; | 74 | unsigned char type; |
75 | unsigned char mpc_apicid; /* Local APIC number */ | 75 | unsigned char apicid; /* Local APIC number */ |
76 | unsigned char mpc_apicver; /* Its versions */ | 76 | unsigned char apicver; /* Its versions */ |
77 | unsigned char mpc_cpuflag; | 77 | unsigned char cpuflag; |
78 | unsigned int mpc_cpufeature; | 78 | unsigned int cpufeature; |
79 | unsigned int mpc_featureflag; /* CPUID feature value */ | 79 | unsigned int featureflag; /* CPUID feature value */ |
80 | unsigned int mpc_reserved[2]; | 80 | unsigned int reserved[2]; |
81 | }; | 81 | }; |
82 | 82 | ||
83 | struct mpc_config_bus { | 83 | struct mpc_bus { |
84 | unsigned char mpc_type; | 84 | unsigned char type; |
85 | unsigned char mpc_busid; | 85 | unsigned char busid; |
86 | unsigned char mpc_bustype[6]; | 86 | unsigned char bustype[6]; |
87 | }; | 87 | }; |
88 | 88 | ||
89 | /* List of Bus Type string values, Intel MP Spec. */ | 89 | /* List of Bus Type string values, Intel MP Spec. */ |
@@ -108,22 +108,22 @@ struct mpc_config_bus { | |||
108 | 108 | ||
109 | #define MPC_APIC_USABLE 0x01 | 109 | #define MPC_APIC_USABLE 0x01 |
110 | 110 | ||
111 | struct mpc_config_ioapic { | 111 | struct mpc_ioapic { |
112 | unsigned char mpc_type; | 112 | unsigned char type; |
113 | unsigned char mpc_apicid; | 113 | unsigned char apicid; |
114 | unsigned char mpc_apicver; | 114 | unsigned char apicver; |
115 | unsigned char mpc_flags; | 115 | unsigned char flags; |
116 | unsigned int mpc_apicaddr; | 116 | unsigned int apicaddr; |
117 | }; | 117 | }; |
118 | 118 | ||
119 | struct mpc_config_intsrc { | 119 | struct mpc_intsrc { |
120 | unsigned char mpc_type; | 120 | unsigned char type; |
121 | unsigned char mpc_irqtype; | 121 | unsigned char irqtype; |
122 | unsigned short mpc_irqflag; | 122 | unsigned short irqflag; |
123 | unsigned char mpc_srcbus; | 123 | unsigned char srcbus; |
124 | unsigned char mpc_srcbusirq; | 124 | unsigned char srcbusirq; |
125 | unsigned char mpc_dstapic; | 125 | unsigned char dstapic; |
126 | unsigned char mpc_dstirq; | 126 | unsigned char dstirq; |
127 | }; | 127 | }; |
128 | 128 | ||
129 | enum mp_irq_source_types { | 129 | enum mp_irq_source_types { |
@@ -139,24 +139,24 @@ enum mp_irq_source_types { | |||
139 | 139 | ||
140 | #define MP_APIC_ALL 0xFF | 140 | #define MP_APIC_ALL 0xFF |
141 | 141 | ||
142 | struct mpc_config_lintsrc { | 142 | struct mpc_lintsrc { |
143 | unsigned char mpc_type; | 143 | unsigned char type; |
144 | unsigned char mpc_irqtype; | 144 | unsigned char irqtype; |
145 | unsigned short mpc_irqflag; | 145 | unsigned short irqflag; |
146 | unsigned char mpc_srcbusid; | 146 | unsigned char srcbusid; |
147 | unsigned char mpc_srcbusirq; | 147 | unsigned char srcbusirq; |
148 | unsigned char mpc_destapic; | 148 | unsigned char destapic; |
149 | unsigned char mpc_destapiclint; | 149 | unsigned char destapiclint; |
150 | }; | 150 | }; |
151 | 151 | ||
152 | #define MPC_OEM_SIGNATURE "_OEM" | 152 | #define MPC_OEM_SIGNATURE "_OEM" |
153 | 153 | ||
154 | struct mp_config_oemtable { | 154 | struct mpc_oemtable { |
155 | char oem_signature[4]; | 155 | char signature[4]; |
156 | unsigned short oem_length; /* Size of table */ | 156 | unsigned short length; /* Size of table */ |
157 | char oem_rev; /* 0x01 */ | 157 | char rev; /* 0x01 */ |
158 | char oem_checksum; | 158 | char checksum; |
159 | char mpc_oem[8]; | 159 | char mpc[8]; |
160 | }; | 160 | }; |
161 | 161 | ||
162 | /* | 162 | /* |
diff --git a/arch/x86/include/asm/numaq/mpparse.h b/arch/x86/include/asm/numaq/mpparse.h index 252292e077b6..a2eeefcd1cc7 100644 --- a/arch/x86/include/asm/numaq/mpparse.h +++ b/arch/x86/include/asm/numaq/mpparse.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef __ASM_NUMAQ_MPPARSE_H | 1 | #ifndef __ASM_NUMAQ_MPPARSE_H |
2 | #define __ASM_NUMAQ_MPPARSE_H | 2 | #define __ASM_NUMAQ_MPPARSE_H |
3 | 3 | ||
4 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, | 4 | extern void numaq_mps_oem_check(struct mpc_table *, char *, char *); |
5 | char *productid); | ||
6 | 5 | ||
7 | #endif /* __ASM_NUMAQ_MPPARSE_H */ | 6 | #endif /* __ASM_NUMAQ_MPPARSE_H */ |
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 4fcd53fd5f43..ebe858cdc8a3 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h | |||
@@ -25,9 +25,9 @@ extern int wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip); | |||
25 | /* | 25 | /* |
26 | * Any setup quirks to be performed? | 26 | * Any setup quirks to be performed? |
27 | */ | 27 | */ |
28 | struct mpc_config_processor; | 28 | struct mpc_cpu; |
29 | struct mpc_config_bus; | 29 | struct mpc_bus; |
30 | struct mp_config_oemtable; | 30 | struct mpc_oemtable; |
31 | struct x86_quirks { | 31 | struct x86_quirks { |
32 | int (*arch_pre_time_init)(void); | 32 | int (*arch_pre_time_init)(void); |
33 | int (*arch_time_init)(void); | 33 | int (*arch_time_init)(void); |
@@ -39,10 +39,10 @@ struct x86_quirks { | |||
39 | int (*mach_find_smp_config)(unsigned int reserve); | 39 | int (*mach_find_smp_config)(unsigned int reserve); |
40 | 40 | ||
41 | int *mpc_record; | 41 | int *mpc_record; |
42 | int (*mpc_apic_id)(struct mpc_config_processor *m); | 42 | int (*mpc_apic_id)(struct mpc_cpu *m); |
43 | void (*mpc_oem_bus_info)(struct mpc_config_bus *m, char *name); | 43 | void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name); |
44 | void (*mpc_oem_pci_bus)(struct mpc_config_bus *m); | 44 | void (*mpc_oem_pci_bus)(struct mpc_bus *m); |
45 | void (*smp_read_mpc_oem)(struct mp_config_oemtable *oemtable, | 45 | void (*smp_read_mpc_oem)(struct mpc_oemtable *oemtable, |
46 | unsigned short oemsize); | 46 | unsigned short oemsize); |
47 | int (*setup_ioapic_ids)(void); | 47 | int (*setup_ioapic_ids)(void); |
48 | int (*update_genapic)(void); | 48 | int (*update_genapic)(void); |
diff --git a/arch/x86/include/asm/summit/mpparse.h b/arch/x86/include/asm/summit/mpparse.h index 013ce6fab2d5..380e86c02363 100644 --- a/arch/x86/include/asm/summit/mpparse.h +++ b/arch/x86/include/asm/summit/mpparse.h | |||
@@ -11,7 +11,7 @@ extern void setup_summit(void); | |||
11 | #define setup_summit() {} | 11 | #define setup_summit() {} |
12 | #endif | 12 | #endif |
13 | 13 | ||
14 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 14 | static inline int mps_oem_check(struct mpc_table *mpc, char *oem, |
15 | char *productid) | 15 | char *productid) |
16 | { | 16 | { |
17 | if (!strncmp(oem, "IBM ENSW", 8) && | 17 | if (!strncmp(oem, "IBM ENSW", 8) && |
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) { |
diff --git a/arch/x86/mach-generic/es7000.c b/arch/x86/mach-generic/es7000.c index 4ba5ccaa1584..c2ded1448024 100644 --- a/arch/x86/mach-generic/es7000.c +++ b/arch/x86/mach-generic/es7000.c | |||
@@ -43,12 +43,12 @@ static void __init enable_apic_mode(void) | |||
43 | return; | 43 | return; |
44 | } | 44 | } |
45 | 45 | ||
46 | static __init int mps_oem_check(struct mp_config_table *mpc, char *oem, | 46 | static __init int |
47 | char *productid) | 47 | mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) |
48 | { | 48 | { |
49 | if (mpc->mpc_oemptr) { | 49 | if (mpc->oemptr) { |
50 | struct mp_config_oemtable *oem_table = | 50 | struct mpc_oemtable *oem_table = |
51 | (struct mp_config_oemtable *)mpc->mpc_oemptr; | 51 | (struct mpc_oemtable *)mpc->oemptr; |
52 | if (!strncmp(oem, "UNISYS", 6)) | 52 | if (!strncmp(oem, "UNISYS", 6)) |
53 | return parse_unisys_oem((char *)oem_table); | 53 | return parse_unisys_oem((char *)oem_table); |
54 | } | 54 | } |
diff --git a/arch/x86/mach-generic/numaq.c b/arch/x86/mach-generic/numaq.c index 511d7941364f..3679e2255645 100644 --- a/arch/x86/mach-generic/numaq.c +++ b/arch/x86/mach-generic/numaq.c | |||
@@ -19,8 +19,7 @@ | |||
19 | #include <asm/numaq/wakecpu.h> | 19 | #include <asm/numaq/wakecpu.h> |
20 | #include <asm/numaq.h> | 20 | #include <asm/numaq.h> |
21 | 21 | ||
22 | static int mps_oem_check(struct mp_config_table *mpc, char *oem, | 22 | static int mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) |
23 | char *productid) | ||
24 | { | 23 | { |
25 | numaq_mps_oem_check(mpc, oem, productid); | 24 | numaq_mps_oem_check(mpc, oem, productid); |
26 | return found_numaq; | 25 | return found_numaq; |
diff --git a/arch/x86/mach-generic/probe.c b/arch/x86/mach-generic/probe.c index c346d9d0226f..15a38daef1a8 100644 --- a/arch/x86/mach-generic/probe.c +++ b/arch/x86/mach-generic/probe.c | |||
@@ -110,8 +110,7 @@ void __init generic_apic_probe(void) | |||
110 | 110 | ||
111 | /* These functions can switch the APIC even after the initial ->probe() */ | 111 | /* These functions can switch the APIC even after the initial ->probe() */ |
112 | 112 | ||
113 | int __init mps_oem_check(struct mp_config_table *mpc, char *oem, | 113 | int __init mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) |
114 | char *productid) | ||
115 | { | 114 | { |
116 | int i; | 115 | int i; |
117 | for (i = 0; apic_probe[i]; ++i) { | 116 | for (i = 0; apic_probe[i]; ++i) { |
diff --git a/arch/x86/mm/k8topology_64.c b/arch/x86/mm/k8topology_64.c index 41f1b5c00a1d..268f8255280f 100644 --- a/arch/x86/mm/k8topology_64.c +++ b/arch/x86/mm/k8topology_64.c | |||
@@ -81,7 +81,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
81 | unsigned numnodes, cores, bits, apicid_base; | 81 | unsigned numnodes, cores, bits, apicid_base; |
82 | unsigned long prevbase; | 82 | unsigned long prevbase; |
83 | struct bootnode nodes[8]; | 83 | struct bootnode nodes[8]; |
84 | unsigned char nodeids[8]; | ||
85 | int i, j, nb, found = 0; | 84 | int i, j, nb, found = 0; |
86 | u32 nodeid, reg; | 85 | u32 nodeid, reg; |
87 | 86 | ||
@@ -110,7 +109,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
110 | limit = read_pci_config(0, nb, 1, 0x44 + i*8); | 109 | limit = read_pci_config(0, nb, 1, 0x44 + i*8); |
111 | 110 | ||
112 | nodeid = limit & 7; | 111 | nodeid = limit & 7; |
113 | nodeids[i] = nodeid; | ||
114 | if ((base & 3) == 0) { | 112 | if ((base & 3) == 0) { |
115 | if (i < numnodes) | 113 | if (i < numnodes) |
116 | printk("Skipping disabled node %d\n", i); | 114 | printk("Skipping disabled node %d\n", i); |
@@ -179,9 +177,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
179 | 177 | ||
180 | nodes[nodeid].start = base; | 178 | nodes[nodeid].start = base; |
181 | nodes[nodeid].end = limit; | 179 | nodes[nodeid].end = limit; |
182 | e820_register_active_regions(nodeid, | ||
183 | nodes[nodeid].start >> PAGE_SHIFT, | ||
184 | nodes[nodeid].end >> PAGE_SHIFT); | ||
185 | 180 | ||
186 | prevbase = base; | 181 | prevbase = base; |
187 | 182 | ||
@@ -211,12 +206,15 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
211 | } | 206 | } |
212 | 207 | ||
213 | for (i = 0; i < 8; i++) { | 208 | for (i = 0; i < 8; i++) { |
214 | if (nodes[i].start != nodes[i].end) { | 209 | if (nodes[i].start == nodes[i].end) |
215 | nodeid = nodeids[i]; | 210 | continue; |
216 | for (j = apicid_base; j < cores + apicid_base; j++) | 211 | |
217 | apicid_to_node[(nodeid << bits) + j] = i; | 212 | e820_register_active_regions(i, |
218 | setup_node_bootmem(i, nodes[i].start, nodes[i].end); | 213 | nodes[i].start >> PAGE_SHIFT, |
219 | } | 214 | nodes[i].end >> PAGE_SHIFT); |
215 | for (j = apicid_base; j < cores + apicid_base; j++) | ||
216 | apicid_to_node[(i << bits) + j] = i; | ||
217 | setup_node_bootmem(i, nodes[i].start, nodes[i].end); | ||
220 | } | 218 | } |
221 | 219 | ||
222 | numa_init_array(); | 220 | numa_init_array(); |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index d0a32aab03ff..4c9ae6085c75 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -573,14 +573,14 @@ config DEBUG_NOTIFIERS | |||
573 | config FRAME_POINTER | 573 | config FRAME_POINTER |
574 | bool "Compile the kernel with frame pointers" | 574 | bool "Compile the kernel with frame pointers" |
575 | depends on DEBUG_KERNEL && \ | 575 | depends on DEBUG_KERNEL && \ |
576 | (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || \ | 576 | (CRIS || M68K || M68KNOMMU || FRV || UML || S390 || \ |
577 | AVR32 || SUPERH || BLACKFIN || MN10300) | 577 | AVR32 || SUPERH || BLACKFIN || MN10300) || \ |
578 | default y if DEBUG_INFO && UML | 578 | ARCH_WANT_FRAME_POINTERS |
579 | help | 579 | default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS |
580 | If you say Y here the resulting kernel image will be slightly larger | 580 | help |
581 | and slower, but it might give very useful debugging information on | 581 | If you say Y here the resulting kernel image will be slightly |
582 | some architectures or if you use external debuggers. | 582 | larger and slower, but it gives very useful debugging information |
583 | If you don't debug the kernel, you can say N. | 583 | in case of kernel bugs. (precise oopses/stacktraces/warnings) |
584 | 584 | ||
585 | config BOOT_PRINTK_DELAY | 585 | config BOOT_PRINTK_DELAY |
586 | bool "Delay each boot printk message by N milliseconds" | 586 | bool "Delay each boot printk message by N milliseconds" |