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" |
