diff options
42 files changed, 492 insertions, 492 deletions
diff --git a/Documentation/x86_64/mm.txt b/Documentation/x86_64/mm.txt index b89b6d2bebfa..efce75097369 100644 --- a/Documentation/x86_64/mm.txt +++ b/Documentation/x86_64/mm.txt | |||
@@ -11,9 +11,8 @@ ffffc10000000000 - ffffc1ffffffffff (=40 bits) hole | |||
11 | ffffc20000000000 - ffffe1ffffffffff (=45 bits) vmalloc/ioremap space | 11 | ffffc20000000000 - ffffe1ffffffffff (=45 bits) vmalloc/ioremap space |
12 | ffffe20000000000 - ffffe2ffffffffff (=40 bits) virtual memory map (1TB) | 12 | ffffe20000000000 - ffffe2ffffffffff (=40 bits) virtual memory map (1TB) |
13 | ... unused hole ... | 13 | ... unused hole ... |
14 | ffffffff80000000 - ffffffff82800000 (=40 MB) kernel text mapping, from phys 0 | 14 | ffffffff80000000 - ffffffffa0000000 (=512 MB) kernel text mapping, from phys 0 |
15 | ... unused hole ... | 15 | ffffffffa0000000 - fffffffffff00000 (=1536 MB) module mapping space |
16 | ffffffff88000000 - fffffffffff00000 (=1919 MB) module mapping space | ||
17 | 16 | ||
18 | The direct mapping covers all memory in the system up to the highest | 17 | The direct mapping covers all memory in the system up to the highest |
19 | memory address (this means in some cases it can also include PCI memory | 18 | memory address (this means in some cases it can also include PCI memory |
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index d8819efac81d..1d5dff4123e1 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/page.h> | 30 | #include <asm/page.h> |
31 | #include <asm/boot.h> | 31 | #include <asm/boot.h> |
32 | #include <asm/msr.h> | 32 | #include <asm/msr.h> |
33 | #include <asm/processor-flags.h> | ||
33 | #include <asm/asm-offsets.h> | 34 | #include <asm/asm-offsets.h> |
34 | 35 | ||
35 | .section ".text.head" | 36 | .section ".text.head" |
@@ -109,7 +110,7 @@ startup_32: | |||
109 | 110 | ||
110 | /* Enable PAE mode */ | 111 | /* Enable PAE mode */ |
111 | xorl %eax, %eax | 112 | xorl %eax, %eax |
112 | orl $(1 << 5), %eax | 113 | orl $(X86_CR4_PAE), %eax |
113 | movl %eax, %cr4 | 114 | movl %eax, %cr4 |
114 | 115 | ||
115 | /* | 116 | /* |
@@ -170,7 +171,7 @@ startup_32: | |||
170 | pushl %eax | 171 | pushl %eax |
171 | 172 | ||
172 | /* Enter paged protected Mode, activating Long Mode */ | 173 | /* Enter paged protected Mode, activating Long Mode */ |
173 | movl $0x80000001, %eax /* Enable Paging and Protected mode */ | 174 | movl $(X86_CR0_PG | X86_CR0_PE), %eax /* Enable Paging and Protected mode */ |
174 | movl %eax, %cr0 | 175 | movl %eax, %cr0 |
175 | 176 | ||
176 | /* Jump from 32bit compatibility mode into 64bit mode. */ | 177 | /* Jump from 32bit compatibility mode into 64bit mode. */ |
diff --git a/arch/x86/boot/video-vga.c b/arch/x86/boot/video-vga.c index 40ecb8d7688c..b939cb476dec 100644 --- a/arch/x86/boot/video-vga.c +++ b/arch/x86/boot/video-vga.c | |||
@@ -259,8 +259,7 @@ static int vga_probe(void) | |||
259 | return mode_count[adapter]; | 259 | return mode_count[adapter]; |
260 | } | 260 | } |
261 | 261 | ||
262 | __videocard video_vga = | 262 | __videocard video_vga = { |
263 | { | ||
264 | .card_name = "VGA", | 263 | .card_name = "VGA", |
265 | .probe = vga_probe, | 264 | .probe = vga_probe, |
266 | .set_mode = vga_set_mode, | 265 | .set_mode = vga_set_mode, |
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index 170d2f5523b2..1b1c56bb338f 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c | |||
@@ -59,8 +59,12 @@ static void __init check_fpu(void) | |||
59 | return; | 59 | return; |
60 | } | 60 | } |
61 | 61 | ||
62 | /* trap_init() enabled FXSR and company _before_ testing for FP problems here. */ | 62 | /* |
63 | /* Test for the divl bug.. */ | 63 | * trap_init() enabled FXSR and company _before_ testing for FP |
64 | * problems here. | ||
65 | * | ||
66 | * Test for the divl bug.. | ||
67 | */ | ||
64 | __asm__("fninit\n\t" | 68 | __asm__("fninit\n\t" |
65 | "fldl %1\n\t" | 69 | "fldl %1\n\t" |
66 | "fdivl %2\n\t" | 70 | "fdivl %2\n\t" |
@@ -108,10 +112,15 @@ static void __init check_popad(void) | |||
108 | "movl $12345678,%%eax; movl $0,%%edi; pusha; popa; movl (%%edx,%%edi),%%ecx " | 112 | "movl $12345678,%%eax; movl $0,%%edi; pusha; popa; movl (%%edx,%%edi),%%ecx " |
109 | : "=&a" (res) | 113 | : "=&a" (res) |
110 | : "d" (inp) | 114 | : "d" (inp) |
111 | : "ecx", "edi" ); | 115 | : "ecx", "edi"); |
112 | /* If this fails, it means that any user program may lock the CPU hard. Too bad. */ | 116 | /* |
113 | if (res != 12345678) printk( "Buggy.\n" ); | 117 | * If this fails, it means that any user program may lock the |
114 | else printk( "OK.\n" ); | 118 | * CPU hard. Too bad. |
119 | */ | ||
120 | if (res != 12345678) | ||
121 | printk("Buggy.\n"); | ||
122 | else | ||
123 | printk("OK.\n"); | ||
115 | #endif | 124 | #endif |
116 | } | 125 | } |
117 | 126 | ||
@@ -137,7 +146,8 @@ static void __init check_config(void) | |||
137 | * i486+ only features! (WP works in supervisor mode and the | 146 | * i486+ only features! (WP works in supervisor mode and the |
138 | * new "invlpg" and "bswap" instructions) | 147 | * new "invlpg" and "bswap" instructions) |
139 | */ | 148 | */ |
140 | #if defined(CONFIG_X86_WP_WORKS_OK) || defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_BSWAP) | 149 | #if defined(CONFIG_X86_WP_WORKS_OK) || defined(CONFIG_X86_INVLPG) || \ |
150 | defined(CONFIG_X86_BSWAP) | ||
141 | if (boot_cpu_data.x86 == 3) | 151 | if (boot_cpu_data.x86 == 3) |
142 | panic("Kernel requires i486+ for 'invlpg' and other features"); | 152 | panic("Kernel requires i486+ for 'invlpg' and other features"); |
143 | #endif | 153 | #endif |
@@ -170,6 +180,7 @@ void __init check_bugs(void) | |||
170 | check_fpu(); | 180 | check_fpu(); |
171 | check_hlt(); | 181 | check_hlt(); |
172 | check_popad(); | 182 | check_popad(); |
173 | init_utsname()->machine[1] = '0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86); | 183 | init_utsname()->machine[1] = |
184 | '0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86); | ||
174 | alternative_instructions(); | 185 | alternative_instructions(); |
175 | } | 186 | } |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 556a8df522a7..1f1751dfb2f3 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -1120,10 +1120,6 @@ ENTRY(coprocessor_segment_overrun) | |||
1120 | zeroentry do_coprocessor_segment_overrun | 1120 | zeroentry do_coprocessor_segment_overrun |
1121 | END(coprocessor_segment_overrun) | 1121 | END(coprocessor_segment_overrun) |
1122 | 1122 | ||
1123 | ENTRY(reserved) | ||
1124 | zeroentry do_reserved | ||
1125 | END(reserved) | ||
1126 | |||
1127 | /* runs on exception stack */ | 1123 | /* runs on exception stack */ |
1128 | ENTRY(double_fault) | 1124 | ENTRY(double_fault) |
1129 | XCPT_FRAME | 1125 | XCPT_FRAME |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 10a1955bb1d1..d8ed3259e6e4 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/page.h> | 18 | #include <asm/page.h> |
19 | #include <asm/msr.h> | 19 | #include <asm/msr.h> |
20 | #include <asm/cache.h> | 20 | #include <asm/cache.h> |
21 | #include <asm/processor-flags.h> | ||
21 | 22 | ||
22 | #ifdef CONFIG_PARAVIRT | 23 | #ifdef CONFIG_PARAVIRT |
23 | #include <asm/asm-offsets.h> | 24 | #include <asm/asm-offsets.h> |
@@ -154,9 +155,7 @@ ENTRY(secondary_startup_64) | |||
154 | */ | 155 | */ |
155 | 156 | ||
156 | /* Enable PAE mode and PGE */ | 157 | /* Enable PAE mode and PGE */ |
157 | xorq %rax, %rax | 158 | movl $(X86_CR4_PAE | X86_CR4_PGE), %eax |
158 | btsq $5, %rax | ||
159 | btsq $7, %rax | ||
160 | movq %rax, %cr4 | 159 | movq %rax, %cr4 |
161 | 160 | ||
162 | /* Setup early boot stage 4 level pagetables. */ | 161 | /* Setup early boot stage 4 level pagetables. */ |
@@ -184,14 +183,10 @@ ENTRY(secondary_startup_64) | |||
184 | 1: wrmsr /* Make changes effective */ | 183 | 1: wrmsr /* Make changes effective */ |
185 | 184 | ||
186 | /* Setup cr0 */ | 185 | /* Setup cr0 */ |
187 | #define CR0_PM 1 /* protected mode */ | 186 | #define CR0_STATE (X86_CR0_PE | X86_CR0_MP | X86_CR0_ET | \ |
188 | #define CR0_MP (1<<1) | 187 | X86_CR0_NE | X86_CR0_WP | X86_CR0_AM | \ |
189 | #define CR0_ET (1<<4) | 188 | X86_CR0_PG) |
190 | #define CR0_NE (1<<5) | 189 | movl $CR0_STATE, %eax |
191 | #define CR0_WP (1<<16) | ||
192 | #define CR0_AM (1<<18) | ||
193 | #define CR0_PAGING (1<<31) | ||
194 | movl $CR0_PM|CR0_MP|CR0_ET|CR0_NE|CR0_WP|CR0_AM|CR0_PAGING,%eax | ||
195 | /* Make changes effective */ | 190 | /* Make changes effective */ |
196 | movq %rax, %cr0 | 191 | movq %rax, %cr0 |
197 | 192 | ||
@@ -327,11 +322,11 @@ early_idt_ripmsg: | |||
327 | ENTRY(name) | 322 | ENTRY(name) |
328 | 323 | ||
329 | /* Automate the creation of 1 to 1 mapping pmd entries */ | 324 | /* Automate the creation of 1 to 1 mapping pmd entries */ |
330 | #define PMDS(START, PERM, COUNT) \ | 325 | #define PMDS(START, PERM, COUNT) \ |
331 | i = 0 ; \ | 326 | i = 0 ; \ |
332 | .rept (COUNT) ; \ | 327 | .rept (COUNT) ; \ |
333 | .quad (START) + (i << 21) + (PERM) ; \ | 328 | .quad (START) + (i << PMD_SHIFT) + (PERM) ; \ |
334 | i = i + 1 ; \ | 329 | i = i + 1 ; \ |
335 | .endr | 330 | .endr |
336 | 331 | ||
337 | /* | 332 | /* |
diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c index 4dc8600d9d20..3808b7ff93ea 100644 --- a/arch/x86/kernel/io_apic_32.c +++ b/arch/x86/kernel/io_apic_32.c | |||
@@ -1489,6 +1489,7 @@ void /*__init*/ print_local_APIC(void * dummy) | |||
1489 | 1489 | ||
1490 | printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", | 1490 | printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", |
1491 | smp_processor_id(), hard_smp_processor_id()); | 1491 | smp_processor_id(), hard_smp_processor_id()); |
1492 | v = apic_read(APIC_ID); | ||
1492 | printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, | 1493 | printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, |
1493 | GET_APIC_ID(read_apic_id())); | 1494 | GET_APIC_ID(read_apic_id())); |
1494 | v = apic_read(APIC_LVR); | 1495 | v = apic_read(APIC_LVR); |
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index ef1a8dfcc529..c7c6b005f665 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c | |||
@@ -1077,6 +1077,7 @@ void __apicdebuginit print_local_APIC(void * dummy) | |||
1077 | 1077 | ||
1078 | printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", | 1078 | printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", |
1079 | smp_processor_id(), hard_smp_processor_id()); | 1079 | smp_processor_id(), hard_smp_processor_id()); |
1080 | v = apic_read(APIC_ID); | ||
1080 | printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, GET_APIC_ID(read_apic_id())); | 1081 | printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, GET_APIC_ID(read_apic_id())); |
1081 | v = apic_read(APIC_LVR); | 1082 | v = apic_read(APIC_LVR); |
1082 | printk(KERN_INFO "... APIC VERSION: %08x\n", v); | 1083 | printk(KERN_INFO "... APIC VERSION: %08x\n", v); |
diff --git a/arch/x86/kernel/ipi.c b/arch/x86/kernel/ipi.c index c0df7b89ca23..9d98cda39ad9 100644 --- a/arch/x86/kernel/ipi.c +++ b/arch/x86/kernel/ipi.c | |||
@@ -8,7 +8,6 @@ | |||
8 | #include <linux/kernel_stat.h> | 8 | #include <linux/kernel_stat.h> |
9 | #include <linux/mc146818rtc.h> | 9 | #include <linux/mc146818rtc.h> |
10 | #include <linux/cache.h> | 10 | #include <linux/cache.h> |
11 | #include <linux/interrupt.h> | ||
12 | #include <linux/cpu.h> | 11 | #include <linux/cpu.h> |
13 | #include <linux/module.h> | 12 | #include <linux/module.h> |
14 | 13 | ||
diff --git a/arch/x86/kernel/mmconf-fam10h_64.c b/arch/x86/kernel/mmconf-fam10h_64.c index edc5fbfe85c0..fdfdc550b366 100644 --- a/arch/x86/kernel/mmconf-fam10h_64.c +++ b/arch/x86/kernel/mmconf-fam10h_64.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <asm/io.h> | 12 | #include <asm/io.h> |
13 | #include <asm/msr.h> | 13 | #include <asm/msr.h> |
14 | #include <asm/acpi.h> | 14 | #include <asm/acpi.h> |
15 | #include <asm/mmconfig.h> | ||
15 | 16 | ||
16 | #include "../pci/pci.h" | 17 | #include "../pci/pci.h" |
17 | 18 | ||
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index dc00a1331ace..3cc36b872ae4 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -357,7 +357,7 @@ int dma_supported(struct device *dev, u64 mask) | |||
357 | EXPORT_SYMBOL(dma_supported); | 357 | EXPORT_SYMBOL(dma_supported); |
358 | 358 | ||
359 | /* Allocate DMA memory on node near device */ | 359 | /* Allocate DMA memory on node near device */ |
360 | noinline struct page * | 360 | static noinline struct page * |
361 | dma_alloc_pages(struct device *dev, gfp_t gfp, unsigned order) | 361 | dma_alloc_pages(struct device *dev, gfp_t gfp, unsigned order) |
362 | { | 362 | { |
363 | int node; | 363 | int node; |
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index f6be7d5f82f8..f8a62160e151 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
@@ -27,7 +27,7 @@ | |||
27 | void (*pm_power_off)(void); | 27 | void (*pm_power_off)(void); |
28 | EXPORT_SYMBOL(pm_power_off); | 28 | EXPORT_SYMBOL(pm_power_off); |
29 | 29 | ||
30 | static long no_idt[3]; | 30 | static const struct desc_ptr no_idt = {}; |
31 | static int reboot_mode; | 31 | static int reboot_mode; |
32 | enum reboot_type reboot_type = BOOT_KBD; | 32 | enum reboot_type reboot_type = BOOT_KBD; |
33 | int reboot_force; | 33 | int reboot_force; |
@@ -201,15 +201,15 @@ core_initcall(reboot_init); | |||
201 | controller to pulse the CPU reset line, which is more thorough, but | 201 | controller to pulse the CPU reset line, which is more thorough, but |
202 | doesn't work with at least one type of 486 motherboard. It is easy | 202 | doesn't work with at least one type of 486 motherboard. It is easy |
203 | to stop this code working; hence the copious comments. */ | 203 | to stop this code working; hence the copious comments. */ |
204 | static unsigned long long | 204 | static const unsigned long long |
205 | real_mode_gdt_entries [3] = | 205 | real_mode_gdt_entries [3] = |
206 | { | 206 | { |
207 | 0x0000000000000000ULL, /* Null descriptor */ | 207 | 0x0000000000000000ULL, /* Null descriptor */ |
208 | 0x00009a000000ffffULL, /* 16-bit real-mode 64k code at 0x00000000 */ | 208 | 0x00009b000000ffffULL, /* 16-bit real-mode 64k code at 0x00000000 */ |
209 | 0x000092000100ffffULL /* 16-bit real-mode 64k data at 0x00000100 */ | 209 | 0x000093000100ffffULL /* 16-bit real-mode 64k data at 0x00000100 */ |
210 | }; | 210 | }; |
211 | 211 | ||
212 | static struct desc_ptr | 212 | static const struct desc_ptr |
213 | real_mode_gdt = { sizeof (real_mode_gdt_entries) - 1, (long)real_mode_gdt_entries }, | 213 | real_mode_gdt = { sizeof (real_mode_gdt_entries) - 1, (long)real_mode_gdt_entries }, |
214 | real_mode_idt = { 0x3ff, 0 }; | 214 | real_mode_idt = { 0x3ff, 0 }; |
215 | 215 | ||
@@ -231,7 +231,7 @@ real_mode_idt = { 0x3ff, 0 }; | |||
231 | 231 | ||
232 | More could be done here to set up the registers as if a CPU reset had | 232 | More could be done here to set up the registers as if a CPU reset had |
233 | occurred; hopefully real BIOSs don't assume much. */ | 233 | occurred; hopefully real BIOSs don't assume much. */ |
234 | static unsigned char real_mode_switch [] = | 234 | static const unsigned char real_mode_switch [] = |
235 | { | 235 | { |
236 | 0x66, 0x0f, 0x20, 0xc0, /* movl %cr0,%eax */ | 236 | 0x66, 0x0f, 0x20, 0xc0, /* movl %cr0,%eax */ |
237 | 0x66, 0x83, 0xe0, 0x11, /* andl $0x00000011,%eax */ | 237 | 0x66, 0x83, 0xe0, 0x11, /* andl $0x00000011,%eax */ |
@@ -245,7 +245,7 @@ static unsigned char real_mode_switch [] = | |||
245 | 0x24, 0x10, /* f: andb $0x10,al */ | 245 | 0x24, 0x10, /* f: andb $0x10,al */ |
246 | 0x66, 0x0f, 0x22, 0xc0 /* movl %eax,%cr0 */ | 246 | 0x66, 0x0f, 0x22, 0xc0 /* movl %eax,%cr0 */ |
247 | }; | 247 | }; |
248 | static unsigned char jump_to_bios [] = | 248 | static const unsigned char jump_to_bios [] = |
249 | { | 249 | { |
250 | 0xea, 0x00, 0x00, 0xff, 0xff /* ljmp $0xffff,$0x0000 */ | 250 | 0xea, 0x00, 0x00, 0xff, 0xff /* ljmp $0xffff,$0x0000 */ |
251 | }; | 251 | }; |
@@ -255,7 +255,7 @@ static unsigned char jump_to_bios [] = | |||
255 | * specified by the code and length parameters. | 255 | * specified by the code and length parameters. |
256 | * We assume that length will aways be less that 100! | 256 | * We assume that length will aways be less that 100! |
257 | */ | 257 | */ |
258 | void machine_real_restart(unsigned char *code, int length) | 258 | void machine_real_restart(const unsigned char *code, int length) |
259 | { | 259 | { |
260 | local_irq_disable(); | 260 | local_irq_disable(); |
261 | 261 | ||
@@ -368,7 +368,7 @@ static void native_machine_emergency_restart(void) | |||
368 | } | 368 | } |
369 | 369 | ||
370 | case BOOT_TRIPLE: | 370 | case BOOT_TRIPLE: |
371 | load_idt((const struct desc_ptr *)&no_idt); | 371 | load_idt(&no_idt); |
372 | __asm__ __volatile__("int3"); | 372 | __asm__ __volatile__("int3"); |
373 | 373 | ||
374 | reboot_type = BOOT_KBD; | 374 | reboot_type = BOOT_KBD; |
diff --git a/arch/x86/kernel/reboot_fixups_32.c b/arch/x86/kernel/reboot_fixups_32.c index dec0b5ec25c2..61a837743fe5 100644 --- a/arch/x86/kernel/reboot_fixups_32.c +++ b/arch/x86/kernel/reboot_fixups_32.c | |||
@@ -49,7 +49,7 @@ struct device_fixup { | |||
49 | void (*reboot_fixup)(struct pci_dev *); | 49 | void (*reboot_fixup)(struct pci_dev *); |
50 | }; | 50 | }; |
51 | 51 | ||
52 | static struct device_fixup fixups_table[] = { | 52 | static const struct device_fixup fixups_table[] = { |
53 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset }, | 53 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset }, |
54 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, cs5536_warm_reset }, | 54 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, cs5536_warm_reset }, |
55 | { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_BRIDGE, cs5530a_warm_reset }, | 55 | { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_BRIDGE, cs5530a_warm_reset }, |
@@ -64,7 +64,7 @@ static struct device_fixup fixups_table[] = { | |||
64 | */ | 64 | */ |
65 | void mach_reboot_fixups(void) | 65 | void mach_reboot_fixups(void) |
66 | { | 66 | { |
67 | struct device_fixup *cur; | 67 | const struct device_fixup *cur; |
68 | struct pci_dev *dev; | 68 | struct pci_dev *dev; |
69 | int i; | 69 | int i; |
70 | 70 | ||
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 6dff1286ad8a..78c1be69c6d3 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c | |||
@@ -71,6 +71,7 @@ | |||
71 | #include <asm/topology.h> | 71 | #include <asm/topology.h> |
72 | #include <asm/trampoline.h> | 72 | #include <asm/trampoline.h> |
73 | #include <asm/pat.h> | 73 | #include <asm/pat.h> |
74 | #include <asm/mmconfig.h> | ||
74 | 75 | ||
75 | #include <mach_apic.h> | 76 | #include <mach_apic.h> |
76 | #ifdef CONFIG_PARAVIRT | 77 | #ifdef CONFIG_PARAVIRT |
@@ -118,7 +119,7 @@ EXPORT_SYMBOL_GPL(edid_info); | |||
118 | 119 | ||
119 | extern int root_mountflags; | 120 | extern int root_mountflags; |
120 | 121 | ||
121 | char __initdata command_line[COMMAND_LINE_SIZE]; | 122 | static char __initdata command_line[COMMAND_LINE_SIZE]; |
122 | 123 | ||
123 | static struct resource standard_io_resources[] = { | 124 | static struct resource standard_io_resources[] = { |
124 | { .name = "dma1", .start = 0x00, .end = 0x1f, | 125 | { .name = "dma1", .start = 0x00, .end = 0x1f, |
@@ -293,18 +294,6 @@ static void __init parse_setup_data(void) | |||
293 | } | 294 | } |
294 | } | 295 | } |
295 | 296 | ||
296 | #ifdef CONFIG_PCI_MMCONFIG | ||
297 | extern void __cpuinit fam10h_check_enable_mmcfg(void); | ||
298 | extern void __init check_enable_amd_mmconf_dmi(void); | ||
299 | #else | ||
300 | void __cpuinit fam10h_check_enable_mmcfg(void) | ||
301 | { | ||
302 | } | ||
303 | void __init check_enable_amd_mmconf_dmi(void) | ||
304 | { | ||
305 | } | ||
306 | #endif | ||
307 | |||
308 | /* | 297 | /* |
309 | * setup_arch - architecture-specific boot-time initializations | 298 | * setup_arch - architecture-specific boot-time initializations |
310 | * | 299 | * |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 56078d61c793..fd933b5465b6 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -59,7 +59,6 @@ | |||
59 | #include <asm/pgtable.h> | 59 | #include <asm/pgtable.h> |
60 | #include <asm/tlbflush.h> | 60 | #include <asm/tlbflush.h> |
61 | #include <asm/mtrr.h> | 61 | #include <asm/mtrr.h> |
62 | #include <asm/nmi.h> | ||
63 | #include <asm/vmi.h> | 62 | #include <asm/vmi.h> |
64 | #include <asm/genapic.h> | 63 | #include <asm/genapic.h> |
65 | #include <linux/mc146818rtc.h> | 64 | #include <linux/mc146818rtc.h> |
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c index d2ab52cc1d6b..7066cb855a60 100644 --- a/arch/x86/kernel/sys_i386_32.c +++ b/arch/x86/kernel/sys_i386_32.c | |||
@@ -19,8 +19,8 @@ | |||
19 | #include <linux/utsname.h> | 19 | #include <linux/utsname.h> |
20 | #include <linux/ipc.h> | 20 | #include <linux/ipc.h> |
21 | 21 | ||
22 | #include <asm/uaccess.h> | 22 | #include <linux/uaccess.h> |
23 | #include <asm/unistd.h> | 23 | #include <linux/unistd.h> |
24 | 24 | ||
25 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | 25 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, |
26 | unsigned long prot, unsigned long flags, | 26 | unsigned long prot, unsigned long flags, |
@@ -103,7 +103,7 @@ asmlinkage int old_select(struct sel_arg_struct __user *arg) | |||
103 | * | 103 | * |
104 | * This is really horribly ugly. | 104 | * This is really horribly ugly. |
105 | */ | 105 | */ |
106 | asmlinkage int sys_ipc (uint call, int first, int second, | 106 | asmlinkage int sys_ipc(uint call, int first, int second, |
107 | int third, void __user *ptr, long fifth) | 107 | int third, void __user *ptr, long fifth) |
108 | { | 108 | { |
109 | int version, ret; | 109 | int version, ret; |
@@ -113,24 +113,24 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
113 | 113 | ||
114 | switch (call) { | 114 | switch (call) { |
115 | case SEMOP: | 115 | case SEMOP: |
116 | return sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | 116 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); |
117 | case SEMTIMEDOP: | 117 | case SEMTIMEDOP: |
118 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | 118 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, |
119 | (const struct timespec __user *)fifth); | 119 | (const struct timespec __user *)fifth); |
120 | 120 | ||
121 | case SEMGET: | 121 | case SEMGET: |
122 | return sys_semget (first, second, third); | 122 | return sys_semget(first, second, third); |
123 | case SEMCTL: { | 123 | case SEMCTL: { |
124 | union semun fourth; | 124 | union semun fourth; |
125 | if (!ptr) | 125 | if (!ptr) |
126 | return -EINVAL; | 126 | return -EINVAL; |
127 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | 127 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) |
128 | return -EFAULT; | 128 | return -EFAULT; |
129 | return sys_semctl (first, second, third, fourth); | 129 | return sys_semctl(first, second, third, fourth); |
130 | } | 130 | } |
131 | 131 | ||
132 | case MSGSND: | 132 | case MSGSND: |
133 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | 133 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, |
134 | second, third); | 134 | second, third); |
135 | case MSGRCV: | 135 | case MSGRCV: |
136 | switch (version) { | 136 | switch (version) { |
@@ -138,45 +138,45 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
138 | struct ipc_kludge tmp; | 138 | struct ipc_kludge tmp; |
139 | if (!ptr) | 139 | if (!ptr) |
140 | return -EINVAL; | 140 | return -EINVAL; |
141 | 141 | ||
142 | if (copy_from_user(&tmp, | 142 | if (copy_from_user(&tmp, |
143 | (struct ipc_kludge __user *) ptr, | 143 | (struct ipc_kludge __user *) ptr, |
144 | sizeof (tmp))) | 144 | sizeof(tmp))) |
145 | return -EFAULT; | 145 | return -EFAULT; |
146 | return sys_msgrcv (first, tmp.msgp, second, | 146 | return sys_msgrcv(first, tmp.msgp, second, |
147 | tmp.msgtyp, third); | 147 | tmp.msgtyp, third); |
148 | } | 148 | } |
149 | default: | 149 | default: |
150 | return sys_msgrcv (first, | 150 | return sys_msgrcv(first, |
151 | (struct msgbuf __user *) ptr, | 151 | (struct msgbuf __user *) ptr, |
152 | second, fifth, third); | 152 | second, fifth, third); |
153 | } | 153 | } |
154 | case MSGGET: | 154 | case MSGGET: |
155 | return sys_msgget ((key_t) first, second); | 155 | return sys_msgget((key_t) first, second); |
156 | case MSGCTL: | 156 | case MSGCTL: |
157 | return sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | 157 | return sys_msgctl(first, second, (struct msqid_ds __user *) ptr); |
158 | 158 | ||
159 | case SHMAT: | 159 | case SHMAT: |
160 | switch (version) { | 160 | switch (version) { |
161 | default: { | 161 | default: { |
162 | ulong raddr; | 162 | ulong raddr; |
163 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | 163 | ret = do_shmat(first, (char __user *) ptr, second, &raddr); |
164 | if (ret) | 164 | if (ret) |
165 | return ret; | 165 | return ret; |
166 | return put_user (raddr, (ulong __user *) third); | 166 | return put_user(raddr, (ulong __user *) third); |
167 | } | 167 | } |
168 | case 1: /* iBCS2 emulator entry point */ | 168 | case 1: /* iBCS2 emulator entry point */ |
169 | if (!segment_eq(get_fs(), get_ds())) | 169 | if (!segment_eq(get_fs(), get_ds())) |
170 | return -EINVAL; | 170 | return -EINVAL; |
171 | /* The "(ulong *) third" is valid _only_ because of the kernel segment thing */ | 171 | /* The "(ulong *) third" is valid _only_ because of the kernel segment thing */ |
172 | return do_shmat (first, (char __user *) ptr, second, (ulong *) third); | 172 | return do_shmat(first, (char __user *) ptr, second, (ulong *) third); |
173 | } | 173 | } |
174 | case SHMDT: | 174 | case SHMDT: |
175 | return sys_shmdt ((char __user *)ptr); | 175 | return sys_shmdt((char __user *)ptr); |
176 | case SHMGET: | 176 | case SHMGET: |
177 | return sys_shmget (first, second, third); | 177 | return sys_shmget(first, second, third); |
178 | case SHMCTL: | 178 | case SHMCTL: |
179 | return sys_shmctl (first, second, | 179 | return sys_shmctl(first, second, |
180 | (struct shmid_ds __user *) ptr); | 180 | (struct shmid_ds __user *) ptr); |
181 | default: | 181 | default: |
182 | return -ENOSYS; | 182 | return -ENOSYS; |
@@ -186,28 +186,28 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
186 | /* | 186 | /* |
187 | * Old cruft | 187 | * Old cruft |
188 | */ | 188 | */ |
189 | asmlinkage int sys_uname(struct old_utsname __user * name) | 189 | asmlinkage int sys_uname(struct old_utsname __user *name) |
190 | { | 190 | { |
191 | int err; | 191 | int err; |
192 | if (!name) | 192 | if (!name) |
193 | return -EFAULT; | 193 | return -EFAULT; |
194 | down_read(&uts_sem); | 194 | down_read(&uts_sem); |
195 | err = copy_to_user(name, utsname(), sizeof (*name)); | 195 | err = copy_to_user(name, utsname(), sizeof(*name)); |
196 | up_read(&uts_sem); | 196 | up_read(&uts_sem); |
197 | return err?-EFAULT:0; | 197 | return err? -EFAULT:0; |
198 | } | 198 | } |
199 | 199 | ||
200 | asmlinkage int sys_olduname(struct oldold_utsname __user * name) | 200 | asmlinkage int sys_olduname(struct oldold_utsname __user *name) |
201 | { | 201 | { |
202 | int error; | 202 | int error; |
203 | 203 | ||
204 | if (!name) | 204 | if (!name) |
205 | return -EFAULT; | 205 | return -EFAULT; |
206 | if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) | 206 | if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname))) |
207 | return -EFAULT; | 207 | return -EFAULT; |
208 | 208 | ||
209 | down_read(&uts_sem); | 209 | down_read(&uts_sem); |
210 | 210 | ||
211 | error = __copy_to_user(&name->sysname, &utsname()->sysname, | 211 | error = __copy_to_user(&name->sysname, &utsname()->sysname, |
212 | __OLD_UTS_LEN); | 212 | __OLD_UTS_LEN); |
213 | error |= __put_user(0, name->sysname + __OLD_UTS_LEN); | 213 | error |= __put_user(0, name->sysname + __OLD_UTS_LEN); |
@@ -223,9 +223,9 @@ asmlinkage int sys_olduname(struct oldold_utsname __user * name) | |||
223 | error |= __copy_to_user(&name->machine, &utsname()->machine, | 223 | error |= __copy_to_user(&name->machine, &utsname()->machine, |
224 | __OLD_UTS_LEN); | 224 | __OLD_UTS_LEN); |
225 | error |= __put_user(0, name->machine + __OLD_UTS_LEN); | 225 | error |= __put_user(0, name->machine + __OLD_UTS_LEN); |
226 | 226 | ||
227 | up_read(&uts_sem); | 227 | up_read(&uts_sem); |
228 | 228 | ||
229 | error = error ? -EFAULT : 0; | 229 | error = error ? -EFAULT : 0; |
230 | 230 | ||
231 | return error; | 231 | return error; |
@@ -241,6 +241,6 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | |||
241 | long __res; | 241 | long __res; |
242 | asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" | 242 | asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" |
243 | : "=a" (__res) | 243 | : "=a" (__res) |
244 | : "0" (__NR_execve),"ri" (filename),"c" (argv), "d" (envp) : "memory"); | 244 | : "0" (__NR_execve), "ri" (filename), "c" (argv), "d" (envp) : "memory"); |
245 | return __res; | 245 | return __res; |
246 | } | 246 | } |
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c index adff76ea97c4..ec6d3b2130c4 100644 --- a/arch/x86/kernel/traps_64.c +++ b/arch/x86/kernel/traps_64.c | |||
@@ -71,7 +71,6 @@ asmlinkage void general_protection(void); | |||
71 | asmlinkage void page_fault(void); | 71 | asmlinkage void page_fault(void); |
72 | asmlinkage void coprocessor_error(void); | 72 | asmlinkage void coprocessor_error(void); |
73 | asmlinkage void simd_coprocessor_error(void); | 73 | asmlinkage void simd_coprocessor_error(void); |
74 | asmlinkage void reserved(void); | ||
75 | asmlinkage void alignment_check(void); | 74 | asmlinkage void alignment_check(void); |
76 | asmlinkage void machine_check(void); | 75 | asmlinkage void machine_check(void); |
77 | asmlinkage void spurious_interrupt_bug(void); | 76 | asmlinkage void spurious_interrupt_bug(void); |
@@ -702,12 +701,10 @@ DO_ERROR_INFO( 0, SIGFPE, "divide error", divide_error, FPE_INTDIV, regs->ip) | |||
702 | DO_ERROR( 4, SIGSEGV, "overflow", overflow) | 701 | DO_ERROR( 4, SIGSEGV, "overflow", overflow) |
703 | DO_ERROR( 5, SIGSEGV, "bounds", bounds) | 702 | DO_ERROR( 5, SIGSEGV, "bounds", bounds) |
704 | DO_ERROR_INFO( 6, SIGILL, "invalid opcode", invalid_op, ILL_ILLOPN, regs->ip) | 703 | DO_ERROR_INFO( 6, SIGILL, "invalid opcode", invalid_op, ILL_ILLOPN, regs->ip) |
705 | DO_ERROR( 7, SIGSEGV, "device not available", device_not_available) | ||
706 | DO_ERROR( 9, SIGFPE, "coprocessor segment overrun", coprocessor_segment_overrun) | 704 | DO_ERROR( 9, SIGFPE, "coprocessor segment overrun", coprocessor_segment_overrun) |
707 | DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS) | 705 | DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS) |
708 | DO_ERROR(11, SIGBUS, "segment not present", segment_not_present) | 706 | DO_ERROR(11, SIGBUS, "segment not present", segment_not_present) |
709 | DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0) | 707 | DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0) |
710 | DO_ERROR(18, SIGSEGV, "reserved", reserved) | ||
711 | 708 | ||
712 | /* Runs on IST stack */ | 709 | /* Runs on IST stack */ |
713 | asmlinkage void do_stack_segment(struct pt_regs *regs, long error_code) | 710 | asmlinkage void do_stack_segment(struct pt_regs *regs, long error_code) |
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c index ba8c0b75ab0a..0c029e8959c7 100644 --- a/arch/x86/kernel/vsmp_64.c +++ b/arch/x86/kernel/vsmp_64.c | |||
@@ -15,9 +15,12 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/pci_ids.h> | 16 | #include <linux/pci_ids.h> |
17 | #include <linux/pci_regs.h> | 17 | #include <linux/pci_regs.h> |
18 | |||
19 | #include <asm/apic.h> | ||
18 | #include <asm/pci-direct.h> | 20 | #include <asm/pci-direct.h> |
19 | #include <asm/io.h> | 21 | #include <asm/io.h> |
20 | #include <asm/paravirt.h> | 22 | #include <asm/paravirt.h> |
23 | #include <asm/setup.h> | ||
21 | 24 | ||
22 | #if defined CONFIG_PCI && defined CONFIG_PARAVIRT | 25 | #if defined CONFIG_PCI && defined CONFIG_PARAVIRT |
23 | /* | 26 | /* |
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index ec30d10154b6..4834c0fcb6b7 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
@@ -571,17 +571,6 @@ void __init mem_init(void) | |||
571 | #endif | 571 | #endif |
572 | bad_ppro = ppro_with_ram_bug(); | 572 | bad_ppro = ppro_with_ram_bug(); |
573 | 573 | ||
574 | #ifdef CONFIG_HIGHMEM | ||
575 | /* check that fixmap and pkmap do not overlap */ | ||
576 | if (PKMAP_BASE + LAST_PKMAP*PAGE_SIZE >= FIXADDR_START) { | ||
577 | printk(KERN_ERR | ||
578 | "fixmap and kmap areas overlap - this will crash\n"); | ||
579 | printk(KERN_ERR "pkstart: %lxh pkend: %lxh fixstart %lxh\n", | ||
580 | PKMAP_BASE, PKMAP_BASE + LAST_PKMAP*PAGE_SIZE, | ||
581 | FIXADDR_START); | ||
582 | BUG(); | ||
583 | } | ||
584 | #endif | ||
585 | /* this will put all low memory onto the freelists */ | 574 | /* this will put all low memory onto the freelists */ |
586 | totalram_pages += free_all_bootmem(); | 575 | totalram_pages += free_all_bootmem(); |
587 | 576 | ||
@@ -614,7 +603,6 @@ void __init mem_init(void) | |||
614 | (unsigned long) (totalhigh_pages << (PAGE_SHIFT-10)) | 603 | (unsigned long) (totalhigh_pages << (PAGE_SHIFT-10)) |
615 | ); | 604 | ); |
616 | 605 | ||
617 | #if 1 /* double-sanity-check paranoia */ | ||
618 | printk(KERN_INFO "virtual kernel memory layout:\n" | 606 | printk(KERN_INFO "virtual kernel memory layout:\n" |
619 | " fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n" | 607 | " fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n" |
620 | #ifdef CONFIG_HIGHMEM | 608 | #ifdef CONFIG_HIGHMEM |
@@ -655,7 +643,6 @@ void __init mem_init(void) | |||
655 | #endif | 643 | #endif |
656 | BUG_ON(VMALLOC_START > VMALLOC_END); | 644 | BUG_ON(VMALLOC_START > VMALLOC_END); |
657 | BUG_ON((unsigned long)high_memory > VMALLOC_START); | 645 | BUG_ON((unsigned long)high_memory > VMALLOC_START); |
658 | #endif /* double-sanity-check paranoia */ | ||
659 | 646 | ||
660 | if (boot_cpu_data.wp_works_ok < 0) | 647 | if (boot_cpu_data.wp_works_ok < 0) |
661 | test_wp_bit(); | 648 | test_wp_bit(); |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 156e6d7b0e32..46b390312af6 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/swap.h> | 18 | #include <linux/swap.h> |
19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/initrd.h> | ||
21 | #include <linux/pagemap.h> | 22 | #include <linux/pagemap.h> |
22 | #include <linux/bootmem.h> | 23 | #include <linux/bootmem.h> |
23 | #include <linux/proc_fs.h> | 24 | #include <linux/proc_fs.h> |
diff --git a/arch/x86/mm/k8topology_64.c b/arch/x86/mm/k8topology_64.c index 1f476e477844..0ea66b532c35 100644 --- a/arch/x86/mm/k8topology_64.c +++ b/arch/x86/mm/k8topology_64.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <asm/numa.h> | 22 | #include <asm/numa.h> |
23 | #include <asm/mpspec.h> | 23 | #include <asm/mpspec.h> |
24 | #include <asm/apic.h> | 24 | #include <asm/apic.h> |
25 | #include <asm/k8.h> | ||
25 | 26 | ||
26 | static __init int find_northbridge(void) | 27 | static __init int find_northbridge(void) |
27 | { | 28 | { |
@@ -73,17 +74,12 @@ static __init void early_get_boot_cpu_id(void) | |||
73 | 74 | ||
74 | int __init k8_scan_nodes(unsigned long start, unsigned long end) | 75 | int __init k8_scan_nodes(unsigned long start, unsigned long end) |
75 | { | 76 | { |
77 | unsigned numnodes, cores, bits, apicid_base; | ||
76 | unsigned long prevbase; | 78 | unsigned long prevbase; |
77 | struct bootnode nodes[8]; | 79 | struct bootnode nodes[8]; |
78 | int nodeid, i, nb; | ||
79 | unsigned char nodeids[8]; | 80 | unsigned char nodeids[8]; |
80 | int found = 0; | 81 | int i, j, nb, found = 0; |
81 | u32 reg; | 82 | u32 nodeid, reg; |
82 | unsigned numnodes; | ||
83 | unsigned cores; | ||
84 | unsigned bits; | ||
85 | int j; | ||
86 | unsigned apicid_base; | ||
87 | 83 | ||
88 | if (!early_pci_allowed()) | 84 | if (!early_pci_allowed()) |
89 | return -1; | 85 | return -1; |
@@ -105,7 +101,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
105 | prevbase = 0; | 101 | prevbase = 0; |
106 | for (i = 0; i < 8; i++) { | 102 | for (i = 0; i < 8; i++) { |
107 | unsigned long base, limit; | 103 | unsigned long base, limit; |
108 | u32 nodeid; | ||
109 | 104 | ||
110 | base = read_pci_config(0, nb, 1, 0x40 + i*8); | 105 | base = read_pci_config(0, nb, 1, 0x40 + i*8); |
111 | limit = read_pci_config(0, nb, 1, 0x44 + i*8); | 106 | limit = read_pci_config(0, nb, 1, 0x44 + i*8); |
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index 50159764f694..ee1d6d39edd4 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c | |||
@@ -255,7 +255,7 @@ int ptep_test_and_clear_young(struct vm_area_struct *vma, | |||
255 | 255 | ||
256 | if (pte_young(*ptep)) | 256 | if (pte_young(*ptep)) |
257 | ret = test_and_clear_bit(_PAGE_BIT_ACCESSED, | 257 | ret = test_and_clear_bit(_PAGE_BIT_ACCESSED, |
258 | &ptep->pte); | 258 | (unsigned long *) &ptep->pte); |
259 | 259 | ||
260 | if (ret) | 260 | if (ret) |
261 | pte_update(vma->vm_mm, addr, ptep); | 261 | pte_update(vma->vm_mm, addr, ptep); |
diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c index 99649dccad28..391d51035871 100644 --- a/arch/x86/mm/srat_64.c +++ b/arch/x86/mm/srat_64.c | |||
@@ -495,6 +495,7 @@ int __node_distance(int a, int b) | |||
495 | 495 | ||
496 | EXPORT_SYMBOL(__node_distance); | 496 | EXPORT_SYMBOL(__node_distance); |
497 | 497 | ||
498 | #if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) || defined(CONFIG_ACPI_HOTPLUG_MEMORY) | ||
498 | int memory_add_physaddr_to_nid(u64 start) | 499 | int memory_add_physaddr_to_nid(u64 start) |
499 | { | 500 | { |
500 | int i, ret = 0; | 501 | int i, ret = 0; |
@@ -506,4 +507,4 @@ int memory_add_physaddr_to_nid(u64 start) | |||
506 | return ret; | 507 | return ret; |
507 | } | 508 | } |
508 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); | 509 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); |
509 | 510 | #endif | |
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index ca8df9c260bc..f0859de23e20 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c | |||
@@ -11,8 +11,8 @@ | |||
11 | #include <linux/slab.h> | 11 | #include <linux/slab.h> |
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/dmi.h> | 13 | #include <linux/dmi.h> |
14 | #include <asm/io.h> | 14 | #include <linux/io.h> |
15 | #include <asm/smp.h> | 15 | #include <linux/smp.h> |
16 | #include <asm/io_apic.h> | 16 | #include <asm/io_apic.h> |
17 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
18 | #include <linux/acpi.h> | 18 | #include <linux/acpi.h> |
@@ -61,7 +61,7 @@ void (*pcibios_disable_irq)(struct pci_dev *dev) = NULL; | |||
61 | * and perform checksum verification. | 61 | * and perform checksum verification. |
62 | */ | 62 | */ |
63 | 63 | ||
64 | static inline struct irq_routing_table * pirq_check_routing_table(u8 *addr) | 64 | static inline struct irq_routing_table *pirq_check_routing_table(u8 *addr) |
65 | { | 65 | { |
66 | struct irq_routing_table *rt; | 66 | struct irq_routing_table *rt; |
67 | int i; | 67 | int i; |
@@ -74,7 +74,7 @@ static inline struct irq_routing_table * pirq_check_routing_table(u8 *addr) | |||
74 | rt->size < sizeof(struct irq_routing_table)) | 74 | rt->size < sizeof(struct irq_routing_table)) |
75 | return NULL; | 75 | return NULL; |
76 | sum = 0; | 76 | sum = 0; |
77 | for (i=0; i < rt->size; i++) | 77 | for (i = 0; i < rt->size; i++) |
78 | sum += addr[i]; | 78 | sum += addr[i]; |
79 | if (!sum) { | 79 | if (!sum) { |
80 | DBG(KERN_DEBUG "PCI: Interrupt Routing Table found at 0x%p\n", rt); | 80 | DBG(KERN_DEBUG "PCI: Interrupt Routing Table found at 0x%p\n", rt); |
@@ -100,7 +100,7 @@ static struct irq_routing_table * __init pirq_find_routing_table(void) | |||
100 | return rt; | 100 | return rt; |
101 | printk(KERN_WARNING "PCI: PIRQ table NOT found at pirqaddr\n"); | 101 | printk(KERN_WARNING "PCI: PIRQ table NOT found at pirqaddr\n"); |
102 | } | 102 | } |
103 | for(addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000); addr += 16) { | 103 | for (addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000); addr += 16) { |
104 | rt = pirq_check_routing_table(addr); | 104 | rt = pirq_check_routing_table(addr); |
105 | if (rt) | 105 | if (rt) |
106 | return rt; | 106 | return rt; |
@@ -122,20 +122,20 @@ static void __init pirq_peer_trick(void) | |||
122 | struct irq_info *e; | 122 | struct irq_info *e; |
123 | 123 | ||
124 | memset(busmap, 0, sizeof(busmap)); | 124 | memset(busmap, 0, sizeof(busmap)); |
125 | for(i=0; i < (rt->size - sizeof(struct irq_routing_table)) / sizeof(struct irq_info); i++) { | 125 | for (i = 0; i < (rt->size - sizeof(struct irq_routing_table)) / sizeof(struct irq_info); i++) { |
126 | e = &rt->slots[i]; | 126 | e = &rt->slots[i]; |
127 | #ifdef DEBUG | 127 | #ifdef DEBUG |
128 | { | 128 | { |
129 | int j; | 129 | int j; |
130 | DBG(KERN_DEBUG "%02x:%02x slot=%02x", e->bus, e->devfn/8, e->slot); | 130 | DBG(KERN_DEBUG "%02x:%02x slot=%02x", e->bus, e->devfn/8, e->slot); |
131 | for(j=0; j<4; j++) | 131 | for (j = 0; j < 4; j++) |
132 | DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap); | 132 | DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap); |
133 | DBG("\n"); | 133 | DBG("\n"); |
134 | } | 134 | } |
135 | #endif | 135 | #endif |
136 | busmap[e->bus] = 1; | 136 | busmap[e->bus] = 1; |
137 | } | 137 | } |
138 | for(i = 1; i < 256; i++) { | 138 | for (i = 1; i < 256; i++) { |
139 | int node; | 139 | int node; |
140 | if (!busmap[i] || pci_find_bus(0, i)) | 140 | if (!busmap[i] || pci_find_bus(0, i)) |
141 | continue; | 141 | continue; |
@@ -285,7 +285,7 @@ static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq) | |||
285 | static const unsigned char pirqmap[4] = { 1, 0, 2, 3 }; | 285 | static const unsigned char pirqmap[4] = { 1, 0, 2, 3 }; |
286 | 286 | ||
287 | WARN_ON_ONCE(pirq > 4); | 287 | WARN_ON_ONCE(pirq > 4); |
288 | return read_config_nybble(router,0x43, pirqmap[pirq-1]); | 288 | return read_config_nybble(router, 0x43, pirqmap[pirq-1]); |
289 | } | 289 | } |
290 | 290 | ||
291 | static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) | 291 | static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) |
@@ -314,7 +314,7 @@ static int pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq, | |||
314 | 314 | ||
315 | /* | 315 | /* |
316 | * Cyrix: nibble offset 0x5C | 316 | * Cyrix: nibble offset 0x5C |
317 | * 0x5C bits 7:4 is INTB bits 3:0 is INTA | 317 | * 0x5C bits 7:4 is INTB bits 3:0 is INTA |
318 | * 0x5D bits 7:4 is INTD bits 3:0 is INTC | 318 | * 0x5D bits 7:4 is INTD bits 3:0 is INTC |
319 | */ | 319 | */ |
320 | static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq) | 320 | static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq) |
@@ -350,7 +350,7 @@ static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, | |||
350 | * Apparently there are systems implementing PCI routing table using | 350 | * Apparently there are systems implementing PCI routing table using |
351 | * link values 0x01-0x04 and others using 0x41-0x44 for PCI INTA..D. | 351 | * link values 0x01-0x04 and others using 0x41-0x44 for PCI INTA..D. |
352 | * We try our best to handle both link mappings. | 352 | * We try our best to handle both link mappings. |
353 | * | 353 | * |
354 | * Currently (2003-05-21) it appears most SiS chipsets follow the | 354 | * Currently (2003-05-21) it appears most SiS chipsets follow the |
355 | * definition of routing registers from the SiS-5595 southbridge. | 355 | * definition of routing registers from the SiS-5595 southbridge. |
356 | * According to the SiS 5595 datasheets the revision id's of the | 356 | * According to the SiS 5595 datasheets the revision id's of the |
@@ -370,7 +370,7 @@ static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, | |||
370 | * | 370 | * |
371 | * 0x62: USBIRQ: | 371 | * 0x62: USBIRQ: |
372 | * bit 6 OHCI function disabled (0), enabled (1) | 372 | * bit 6 OHCI function disabled (0), enabled (1) |
373 | * | 373 | * |
374 | * 0x6a: ACPI/SCI IRQ: bits 4-6 reserved | 374 | * 0x6a: ACPI/SCI IRQ: bits 4-6 reserved |
375 | * | 375 | * |
376 | * 0x7e: Data Acq. Module IRQ - bits 4-6 reserved | 376 | * 0x7e: Data Acq. Module IRQ - bits 4-6 reserved |
@@ -487,9 +487,7 @@ static int pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq | |||
487 | u8 irq; | 487 | u8 irq; |
488 | irq = 0; | 488 | irq = 0; |
489 | if (pirq <= 4) | 489 | if (pirq <= 4) |
490 | { | ||
491 | irq = read_config_nybble(router, 0x56, pirq - 1); | 490 | irq = read_config_nybble(router, 0x56, pirq - 1); |
492 | } | ||
493 | printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d get irq : %2d\n", | 491 | printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d get irq : %2d\n", |
494 | dev->vendor, dev->device, pirq, irq); | 492 | dev->vendor, dev->device, pirq, irq); |
495 | return irq; | 493 | return irq; |
@@ -497,12 +495,10 @@ static int pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq | |||
497 | 495 | ||
498 | static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) | 496 | static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) |
499 | { | 497 | { |
500 | printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d SET irq : %2d\n", | 498 | printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d SET irq : %2d\n", |
501 | dev->vendor, dev->device, pirq, irq); | 499 | dev->vendor, dev->device, pirq, irq); |
502 | if (pirq <= 4) | 500 | if (pirq <= 4) |
503 | { | ||
504 | write_config_nybble(router, 0x56, pirq - 1, irq); | 501 | write_config_nybble(router, 0x56, pirq - 1, irq); |
505 | } | ||
506 | return 1; | 502 | return 1; |
507 | } | 503 | } |
508 | 504 | ||
@@ -549,50 +545,49 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route | |||
549 | if (pci_dev_present(pirq_440gx)) | 545 | if (pci_dev_present(pirq_440gx)) |
550 | return 0; | 546 | return 0; |
551 | 547 | ||
552 | switch(device) | 548 | switch (device) { |
553 | { | 549 | case PCI_DEVICE_ID_INTEL_82371FB_0: |
554 | case PCI_DEVICE_ID_INTEL_82371FB_0: | 550 | case PCI_DEVICE_ID_INTEL_82371SB_0: |
555 | case PCI_DEVICE_ID_INTEL_82371SB_0: | 551 | case PCI_DEVICE_ID_INTEL_82371AB_0: |
556 | case PCI_DEVICE_ID_INTEL_82371AB_0: | 552 | case PCI_DEVICE_ID_INTEL_82371MX: |
557 | case PCI_DEVICE_ID_INTEL_82371MX: | 553 | case PCI_DEVICE_ID_INTEL_82443MX_0: |
558 | case PCI_DEVICE_ID_INTEL_82443MX_0: | 554 | case PCI_DEVICE_ID_INTEL_82801AA_0: |
559 | case PCI_DEVICE_ID_INTEL_82801AA_0: | 555 | case PCI_DEVICE_ID_INTEL_82801AB_0: |
560 | case PCI_DEVICE_ID_INTEL_82801AB_0: | 556 | case PCI_DEVICE_ID_INTEL_82801BA_0: |
561 | case PCI_DEVICE_ID_INTEL_82801BA_0: | 557 | case PCI_DEVICE_ID_INTEL_82801BA_10: |
562 | case PCI_DEVICE_ID_INTEL_82801BA_10: | 558 | case PCI_DEVICE_ID_INTEL_82801CA_0: |
563 | case PCI_DEVICE_ID_INTEL_82801CA_0: | 559 | case PCI_DEVICE_ID_INTEL_82801CA_12: |
564 | case PCI_DEVICE_ID_INTEL_82801CA_12: | 560 | case PCI_DEVICE_ID_INTEL_82801DB_0: |
565 | case PCI_DEVICE_ID_INTEL_82801DB_0: | 561 | case PCI_DEVICE_ID_INTEL_82801E_0: |
566 | case PCI_DEVICE_ID_INTEL_82801E_0: | 562 | case PCI_DEVICE_ID_INTEL_82801EB_0: |
567 | case PCI_DEVICE_ID_INTEL_82801EB_0: | 563 | case PCI_DEVICE_ID_INTEL_ESB_1: |
568 | case PCI_DEVICE_ID_INTEL_ESB_1: | 564 | case PCI_DEVICE_ID_INTEL_ICH6_0: |
569 | case PCI_DEVICE_ID_INTEL_ICH6_0: | 565 | case PCI_DEVICE_ID_INTEL_ICH6_1: |
570 | case PCI_DEVICE_ID_INTEL_ICH6_1: | 566 | case PCI_DEVICE_ID_INTEL_ICH7_0: |
571 | case PCI_DEVICE_ID_INTEL_ICH7_0: | 567 | case PCI_DEVICE_ID_INTEL_ICH7_1: |
572 | case PCI_DEVICE_ID_INTEL_ICH7_1: | 568 | case PCI_DEVICE_ID_INTEL_ICH7_30: |
573 | case PCI_DEVICE_ID_INTEL_ICH7_30: | 569 | case PCI_DEVICE_ID_INTEL_ICH7_31: |
574 | case PCI_DEVICE_ID_INTEL_ICH7_31: | 570 | case PCI_DEVICE_ID_INTEL_ESB2_0: |
575 | case PCI_DEVICE_ID_INTEL_ESB2_0: | 571 | case PCI_DEVICE_ID_INTEL_ICH8_0: |
576 | case PCI_DEVICE_ID_INTEL_ICH8_0: | 572 | case PCI_DEVICE_ID_INTEL_ICH8_1: |
577 | case PCI_DEVICE_ID_INTEL_ICH8_1: | 573 | case PCI_DEVICE_ID_INTEL_ICH8_2: |
578 | case PCI_DEVICE_ID_INTEL_ICH8_2: | 574 | case PCI_DEVICE_ID_INTEL_ICH8_3: |
579 | case PCI_DEVICE_ID_INTEL_ICH8_3: | 575 | case PCI_DEVICE_ID_INTEL_ICH8_4: |
580 | case PCI_DEVICE_ID_INTEL_ICH8_4: | 576 | case PCI_DEVICE_ID_INTEL_ICH9_0: |
581 | case PCI_DEVICE_ID_INTEL_ICH9_0: | 577 | case PCI_DEVICE_ID_INTEL_ICH9_1: |
582 | case PCI_DEVICE_ID_INTEL_ICH9_1: | 578 | case PCI_DEVICE_ID_INTEL_ICH9_2: |
583 | case PCI_DEVICE_ID_INTEL_ICH9_2: | 579 | case PCI_DEVICE_ID_INTEL_ICH9_3: |
584 | case PCI_DEVICE_ID_INTEL_ICH9_3: | 580 | case PCI_DEVICE_ID_INTEL_ICH9_4: |
585 | case PCI_DEVICE_ID_INTEL_ICH9_4: | 581 | case PCI_DEVICE_ID_INTEL_ICH9_5: |
586 | case PCI_DEVICE_ID_INTEL_ICH9_5: | 582 | case PCI_DEVICE_ID_INTEL_TOLAPAI_0: |
587 | case PCI_DEVICE_ID_INTEL_TOLAPAI_0: | 583 | case PCI_DEVICE_ID_INTEL_ICH10_0: |
588 | case PCI_DEVICE_ID_INTEL_ICH10_0: | 584 | case PCI_DEVICE_ID_INTEL_ICH10_1: |
589 | case PCI_DEVICE_ID_INTEL_ICH10_1: | 585 | case PCI_DEVICE_ID_INTEL_ICH10_2: |
590 | case PCI_DEVICE_ID_INTEL_ICH10_2: | 586 | case PCI_DEVICE_ID_INTEL_ICH10_3: |
591 | case PCI_DEVICE_ID_INTEL_ICH10_3: | 587 | r->name = "PIIX/ICH"; |
592 | r->name = "PIIX/ICH"; | 588 | r->get = pirq_piix_get; |
593 | r->get = pirq_piix_get; | 589 | r->set = pirq_piix_set; |
594 | r->set = pirq_piix_set; | 590 | return 1; |
595 | return 1; | ||
596 | } | 591 | } |
597 | return 0; | 592 | return 0; |
598 | } | 593 | } |
@@ -606,7 +601,7 @@ static __init int via_router_probe(struct irq_router *r, | |||
606 | * workarounds for some buggy BIOSes | 601 | * workarounds for some buggy BIOSes |
607 | */ | 602 | */ |
608 | if (device == PCI_DEVICE_ID_VIA_82C586_0) { | 603 | if (device == PCI_DEVICE_ID_VIA_82C586_0) { |
609 | switch(router->device) { | 604 | switch (router->device) { |
610 | case PCI_DEVICE_ID_VIA_82C686: | 605 | case PCI_DEVICE_ID_VIA_82C686: |
611 | /* | 606 | /* |
612 | * Asus k7m bios wrongly reports 82C686A | 607 | * Asus k7m bios wrongly reports 82C686A |
@@ -631,7 +626,7 @@ static __init int via_router_probe(struct irq_router *r, | |||
631 | } | 626 | } |
632 | } | 627 | } |
633 | 628 | ||
634 | switch(device) { | 629 | switch (device) { |
635 | case PCI_DEVICE_ID_VIA_82C586_0: | 630 | case PCI_DEVICE_ID_VIA_82C586_0: |
636 | r->name = "VIA"; | 631 | r->name = "VIA"; |
637 | r->get = pirq_via586_get; | 632 | r->get = pirq_via586_get; |
@@ -654,13 +649,12 @@ static __init int via_router_probe(struct irq_router *r, | |||
654 | 649 | ||
655 | static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 650 | static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
656 | { | 651 | { |
657 | switch(device) | 652 | switch (device) { |
658 | { | 653 | case PCI_DEVICE_ID_VLSI_82C534: |
659 | case PCI_DEVICE_ID_VLSI_82C534: | 654 | r->name = "VLSI 82C534"; |
660 | r->name = "VLSI 82C534"; | 655 | r->get = pirq_vlsi_get; |
661 | r->get = pirq_vlsi_get; | 656 | r->set = pirq_vlsi_set; |
662 | r->set = pirq_vlsi_set; | 657 | return 1; |
663 | return 1; | ||
664 | } | 658 | } |
665 | return 0; | 659 | return 0; |
666 | } | 660 | } |
@@ -668,14 +662,13 @@ static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router | |||
668 | 662 | ||
669 | static __init int serverworks_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 663 | static __init int serverworks_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
670 | { | 664 | { |
671 | switch(device) | 665 | switch (device) { |
672 | { | 666 | case PCI_DEVICE_ID_SERVERWORKS_OSB4: |
673 | case PCI_DEVICE_ID_SERVERWORKS_OSB4: | 667 | case PCI_DEVICE_ID_SERVERWORKS_CSB5: |
674 | case PCI_DEVICE_ID_SERVERWORKS_CSB5: | 668 | r->name = "ServerWorks"; |
675 | r->name = "ServerWorks"; | 669 | r->get = pirq_serverworks_get; |
676 | r->get = pirq_serverworks_get; | 670 | r->set = pirq_serverworks_set; |
677 | r->set = pirq_serverworks_set; | 671 | return 1; |
678 | return 1; | ||
679 | } | 672 | } |
680 | return 0; | 673 | return 0; |
681 | } | 674 | } |
@@ -684,7 +677,7 @@ static __init int sis_router_probe(struct irq_router *r, struct pci_dev *router, | |||
684 | { | 677 | { |
685 | if (device != PCI_DEVICE_ID_SI_503) | 678 | if (device != PCI_DEVICE_ID_SI_503) |
686 | return 0; | 679 | return 0; |
687 | 680 | ||
688 | r->name = "SIS"; | 681 | r->name = "SIS"; |
689 | r->get = pirq_sis_get; | 682 | r->get = pirq_sis_get; |
690 | r->set = pirq_sis_set; | 683 | r->set = pirq_sis_set; |
@@ -693,47 +686,43 @@ static __init int sis_router_probe(struct irq_router *r, struct pci_dev *router, | |||
693 | 686 | ||
694 | static __init int cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 687 | static __init int cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
695 | { | 688 | { |
696 | switch(device) | 689 | switch (device) { |
697 | { | 690 | case PCI_DEVICE_ID_CYRIX_5520: |
698 | case PCI_DEVICE_ID_CYRIX_5520: | 691 | r->name = "NatSemi"; |
699 | r->name = "NatSemi"; | 692 | r->get = pirq_cyrix_get; |
700 | r->get = pirq_cyrix_get; | 693 | r->set = pirq_cyrix_set; |
701 | r->set = pirq_cyrix_set; | 694 | return 1; |
702 | return 1; | ||
703 | } | 695 | } |
704 | return 0; | 696 | return 0; |
705 | } | 697 | } |
706 | 698 | ||
707 | static __init int opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 699 | static __init int opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
708 | { | 700 | { |
709 | switch(device) | 701 | switch (device) { |
710 | { | 702 | case PCI_DEVICE_ID_OPTI_82C700: |
711 | case PCI_DEVICE_ID_OPTI_82C700: | 703 | r->name = "OPTI"; |
712 | r->name = "OPTI"; | 704 | r->get = pirq_opti_get; |
713 | r->get = pirq_opti_get; | 705 | r->set = pirq_opti_set; |
714 | r->set = pirq_opti_set; | 706 | return 1; |
715 | return 1; | ||
716 | } | 707 | } |
717 | return 0; | 708 | return 0; |
718 | } | 709 | } |
719 | 710 | ||
720 | static __init int ite_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 711 | static __init int ite_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
721 | { | 712 | { |
722 | switch(device) | 713 | switch (device) { |
723 | { | 714 | case PCI_DEVICE_ID_ITE_IT8330G_0: |
724 | case PCI_DEVICE_ID_ITE_IT8330G_0: | 715 | r->name = "ITE"; |
725 | r->name = "ITE"; | 716 | r->get = pirq_ite_get; |
726 | r->get = pirq_ite_get; | 717 | r->set = pirq_ite_set; |
727 | r->set = pirq_ite_set; | 718 | return 1; |
728 | return 1; | ||
729 | } | 719 | } |
730 | return 0; | 720 | return 0; |
731 | } | 721 | } |
732 | 722 | ||
733 | static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 723 | static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
734 | { | 724 | { |
735 | switch(device) | 725 | switch (device) { |
736 | { | ||
737 | case PCI_DEVICE_ID_AL_M1533: | 726 | case PCI_DEVICE_ID_AL_M1533: |
738 | case PCI_DEVICE_ID_AL_M1563: | 727 | case PCI_DEVICE_ID_AL_M1563: |
739 | printk(KERN_DEBUG "PCI: Using ALI IRQ Router\n"); | 728 | printk(KERN_DEBUG "PCI: Using ALI IRQ Router\n"); |
@@ -747,25 +736,24 @@ static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router, | |||
747 | 736 | ||
748 | static __init int amd_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 737 | static __init int amd_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
749 | { | 738 | { |
750 | switch(device) | 739 | switch (device) { |
751 | { | 740 | case PCI_DEVICE_ID_AMD_VIPER_740B: |
752 | case PCI_DEVICE_ID_AMD_VIPER_740B: | 741 | r->name = "AMD756"; |
753 | r->name = "AMD756"; | 742 | break; |
754 | break; | 743 | case PCI_DEVICE_ID_AMD_VIPER_7413: |
755 | case PCI_DEVICE_ID_AMD_VIPER_7413: | 744 | r->name = "AMD766"; |
756 | r->name = "AMD766"; | 745 | break; |
757 | break; | 746 | case PCI_DEVICE_ID_AMD_VIPER_7443: |
758 | case PCI_DEVICE_ID_AMD_VIPER_7443: | 747 | r->name = "AMD768"; |
759 | r->name = "AMD768"; | 748 | break; |
760 | break; | 749 | default: |
761 | default: | 750 | return 0; |
762 | return 0; | ||
763 | } | 751 | } |
764 | r->get = pirq_amd756_get; | 752 | r->get = pirq_amd756_get; |
765 | r->set = pirq_amd756_set; | 753 | r->set = pirq_amd756_set; |
766 | return 1; | 754 | return 1; |
767 | } | 755 | } |
768 | 756 | ||
769 | static __init int pico_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 757 | static __init int pico_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) |
770 | { | 758 | { |
771 | switch (device) { | 759 | switch (device) { |
@@ -807,7 +795,7 @@ static struct pci_dev *pirq_router_dev; | |||
807 | * FIXME: should we have an option to say "generic for | 795 | * FIXME: should we have an option to say "generic for |
808 | * chipset" ? | 796 | * chipset" ? |
809 | */ | 797 | */ |
810 | 798 | ||
811 | static void __init pirq_find_router(struct irq_router *r) | 799 | static void __init pirq_find_router(struct irq_router *r) |
812 | { | 800 | { |
813 | struct irq_routing_table *rt = pirq_table; | 801 | struct irq_routing_table *rt = pirq_table; |
@@ -826,7 +814,7 @@ static void __init pirq_find_router(struct irq_router *r) | |||
826 | r->name = "default"; | 814 | r->name = "default"; |
827 | r->get = NULL; | 815 | r->get = NULL; |
828 | r->set = NULL; | 816 | r->set = NULL; |
829 | 817 | ||
830 | DBG(KERN_DEBUG "PCI: Attempting to find IRQ router for %04x:%04x\n", | 818 | DBG(KERN_DEBUG "PCI: Attempting to find IRQ router for %04x:%04x\n", |
831 | rt->rtr_vendor, rt->rtr_device); | 819 | rt->rtr_vendor, rt->rtr_device); |
832 | 820 | ||
@@ -837,7 +825,7 @@ static void __init pirq_find_router(struct irq_router *r) | |||
837 | return; | 825 | return; |
838 | } | 826 | } |
839 | 827 | ||
840 | for( h = pirq_routers; h->vendor; h++) { | 828 | for (h = pirq_routers; h->vendor; h++) { |
841 | /* First look for a router match */ | 829 | /* First look for a router match */ |
842 | if (rt->rtr_vendor == h->vendor && h->probe(r, pirq_router_dev, rt->rtr_device)) | 830 | if (rt->rtr_vendor == h->vendor && h->probe(r, pirq_router_dev, rt->rtr_device)) |
843 | break; | 831 | break; |
@@ -889,7 +877,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) | |||
889 | 877 | ||
890 | if (!pirq_table) | 878 | if (!pirq_table) |
891 | return 0; | 879 | return 0; |
892 | 880 | ||
893 | DBG(KERN_DEBUG "IRQ for %s[%c]", pci_name(dev), 'A' + pin); | 881 | DBG(KERN_DEBUG "IRQ for %s[%c]", pci_name(dev), 'A' + pin); |
894 | info = pirq_get_info(dev); | 882 | info = pirq_get_info(dev); |
895 | if (!info) { | 883 | if (!info) { |
@@ -928,8 +916,10 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) | |||
928 | */ | 916 | */ |
929 | newirq = dev->irq; | 917 | newirq = dev->irq; |
930 | if (newirq && !((1 << newirq) & mask)) { | 918 | if (newirq && !((1 << newirq) & mask)) { |
931 | if ( pci_probe & PCI_USE_PIRQ_MASK) newirq = 0; | 919 | if (pci_probe & PCI_USE_PIRQ_MASK) |
932 | else printk("\n" KERN_WARNING | 920 | newirq = 0; |
921 | else | ||
922 | printk("\n" KERN_WARNING | ||
933 | "PCI: IRQ %i for device %s doesn't match PIRQ mask " | 923 | "PCI: IRQ %i for device %s doesn't match PIRQ mask " |
934 | "- try pci=usepirqmask\n" KERN_DEBUG, newirq, | 924 | "- try pci=usepirqmask\n" KERN_DEBUG, newirq, |
935 | pci_name(dev)); | 925 | pci_name(dev)); |
@@ -949,8 +939,8 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) | |||
949 | irq = pirq & 0xf; | 939 | irq = pirq & 0xf; |
950 | DBG(" -> hardcoded IRQ %d\n", irq); | 940 | DBG(" -> hardcoded IRQ %d\n", irq); |
951 | msg = "Hardcoded"; | 941 | msg = "Hardcoded"; |
952 | } else if ( r->get && (irq = r->get(pirq_router_dev, dev, pirq)) && \ | 942 | } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq)) && \ |
953 | ((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask)) ) { | 943 | ((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask))) { |
954 | DBG(" -> got IRQ %d\n", irq); | 944 | DBG(" -> got IRQ %d\n", irq); |
955 | msg = "Found"; | 945 | msg = "Found"; |
956 | eisa_set_level_irq(irq); | 946 | eisa_set_level_irq(irq); |
@@ -985,15 +975,15 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) | |||
985 | continue; | 975 | continue; |
986 | if (info->irq[pin].link == pirq) { | 976 | if (info->irq[pin].link == pirq) { |
987 | /* We refuse to override the dev->irq information. Give a warning! */ | 977 | /* We refuse to override the dev->irq information. Give a warning! */ |
988 | if ( dev2->irq && dev2->irq != irq && \ | 978 | if (dev2->irq && dev2->irq != irq && \ |
989 | (!(pci_probe & PCI_USE_PIRQ_MASK) || \ | 979 | (!(pci_probe & PCI_USE_PIRQ_MASK) || \ |
990 | ((1 << dev2->irq) & mask)) ) { | 980 | ((1 << dev2->irq) & mask))) { |
991 | #ifndef CONFIG_PCI_MSI | 981 | #ifndef CONFIG_PCI_MSI |
992 | printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", | 982 | printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", |
993 | pci_name(dev2), dev2->irq, irq); | 983 | pci_name(dev2), dev2->irq, irq); |
994 | #endif | 984 | #endif |
995 | continue; | 985 | continue; |
996 | } | 986 | } |
997 | dev2->irq = irq; | 987 | dev2->irq = irq; |
998 | pirq_penalty[irq]++; | 988 | pirq_penalty[irq]++; |
999 | if (dev != dev2) | 989 | if (dev != dev2) |
@@ -1031,8 +1021,7 @@ static void __init pcibios_fixup_irqs(void) | |||
1031 | /* | 1021 | /* |
1032 | * Recalculate IRQ numbers if we use the I/O APIC. | 1022 | * Recalculate IRQ numbers if we use the I/O APIC. |
1033 | */ | 1023 | */ |
1034 | if (io_apic_assign_pci_irqs) | 1024 | if (io_apic_assign_pci_irqs) { |
1035 | { | ||
1036 | int irq; | 1025 | int irq; |
1037 | 1026 | ||
1038 | if (pin) { | 1027 | if (pin) { |
@@ -1045,10 +1034,10 @@ static void __init pcibios_fixup_irqs(void) | |||
1045 | * busses itself so we should get into this branch reliably. | 1034 | * busses itself so we should get into this branch reliably. |
1046 | */ | 1035 | */ |
1047 | if (irq < 0 && dev->bus->parent) { /* go back to the bridge */ | 1036 | if (irq < 0 && dev->bus->parent) { /* go back to the bridge */ |
1048 | struct pci_dev * bridge = dev->bus->self; | 1037 | struct pci_dev *bridge = dev->bus->self; |
1049 | 1038 | ||
1050 | pin = (pin + PCI_SLOT(dev->devfn)) % 4; | 1039 | pin = (pin + PCI_SLOT(dev->devfn)) % 4; |
1051 | irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number, | 1040 | irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number, |
1052 | PCI_SLOT(bridge->devfn), pin); | 1041 | PCI_SLOT(bridge->devfn), pin); |
1053 | if (irq >= 0) | 1042 | if (irq >= 0) |
1054 | printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n", | 1043 | printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n", |
@@ -1138,7 +1127,7 @@ static int __init pcibios_irq_init(void) | |||
1138 | pirq_find_router(&pirq_router); | 1127 | pirq_find_router(&pirq_router); |
1139 | if (pirq_table->exclusive_irqs) { | 1128 | if (pirq_table->exclusive_irqs) { |
1140 | int i; | 1129 | int i; |
1141 | for (i=0; i<16; i++) | 1130 | for (i = 0; i < 16; i++) |
1142 | if (!(pirq_table->exclusive_irqs & (1 << i))) | 1131 | if (!(pirq_table->exclusive_irqs & (1 << i))) |
1143 | pirq_penalty[i] += 100; | 1132 | pirq_penalty[i] += 100; |
1144 | } | 1133 | } |
@@ -1203,10 +1192,10 @@ static int pirq_enable_irq(struct pci_dev *dev) | |||
1203 | */ | 1192 | */ |
1204 | temp_dev = dev; | 1193 | temp_dev = dev; |
1205 | while (irq < 0 && dev->bus->parent) { /* go back to the bridge */ | 1194 | while (irq < 0 && dev->bus->parent) { /* go back to the bridge */ |
1206 | struct pci_dev * bridge = dev->bus->self; | 1195 | struct pci_dev *bridge = dev->bus->self; |
1207 | 1196 | ||
1208 | pin = (pin + PCI_SLOT(dev->devfn)) % 4; | 1197 | pin = (pin + PCI_SLOT(dev->devfn)) % 4; |
1209 | irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number, | 1198 | irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number, |
1210 | PCI_SLOT(bridge->devfn), pin); | 1199 | PCI_SLOT(bridge->devfn), pin); |
1211 | if (irq >= 0) | 1200 | if (irq >= 0) |
1212 | printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n", | 1201 | printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n", |
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 0cfebecf2a8f..23faaa890ffc 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c | |||
@@ -374,7 +374,7 @@ reject: | |||
374 | 374 | ||
375 | static int __initdata known_bridge; | 375 | static int __initdata known_bridge; |
376 | 376 | ||
377 | void __init __pci_mmcfg_init(int early) | 377 | static void __init __pci_mmcfg_init(int early) |
378 | { | 378 | { |
379 | /* MMCONFIG disabled */ | 379 | /* MMCONFIG disabled */ |
380 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) | 380 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) |
diff --git a/include/asm-x86/atomic_64.h b/include/asm-x86/atomic_64.h index 3e0cd7d38335..fe589c153db8 100644 --- a/include/asm-x86/atomic_64.h +++ b/include/asm-x86/atomic_64.h | |||
@@ -11,12 +11,6 @@ | |||
11 | * resource counting etc.. | 11 | * resource counting etc.. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #ifdef CONFIG_SMP | ||
15 | #define LOCK "lock ; " | ||
16 | #else | ||
17 | #define LOCK "" | ||
18 | #endif | ||
19 | |||
20 | /* | 14 | /* |
21 | * Make sure gcc doesn't try to be clever and move things around | 15 | * Make sure gcc doesn't try to be clever and move things around |
22 | * on us. We need to use _exactly_ the address the user gave us, | 16 | * on us. We need to use _exactly_ the address the user gave us, |
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h index 0d609c837a41..78b47e7404eb 100644 --- a/include/asm-x86/cpufeature.h +++ b/include/asm-x86/cpufeature.h | |||
@@ -142,11 +142,11 @@ extern const char * const x86_power_flags[32]; | |||
142 | #define clear_cpu_cap(c, bit) clear_bit(bit, (unsigned long *)((c)->x86_capability)) | 142 | #define clear_cpu_cap(c, bit) clear_bit(bit, (unsigned long *)((c)->x86_capability)) |
143 | #define setup_clear_cpu_cap(bit) do { \ | 143 | #define setup_clear_cpu_cap(bit) do { \ |
144 | clear_cpu_cap(&boot_cpu_data, bit); \ | 144 | clear_cpu_cap(&boot_cpu_data, bit); \ |
145 | set_bit(bit, cleared_cpu_caps); \ | 145 | set_bit(bit, (unsigned long *)cleared_cpu_caps); \ |
146 | } while (0) | 146 | } while (0) |
147 | #define setup_force_cpu_cap(bit) do { \ | 147 | #define setup_force_cpu_cap(bit) do { \ |
148 | set_cpu_cap(&boot_cpu_data, bit); \ | 148 | set_cpu_cap(&boot_cpu_data, bit); \ |
149 | clear_bit(bit, cleared_cpu_caps); \ | 149 | clear_bit(bit, (unsigned long *)cleared_cpu_caps); \ |
150 | } while (0) | 150 | } while (0) |
151 | 151 | ||
152 | #define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) | 152 | #define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) |
diff --git a/include/asm-x86/current.h b/include/asm-x86/current.h index d2526d3f7346..7515c19d4988 100644 --- a/include/asm-x86/current.h +++ b/include/asm-x86/current.h | |||
@@ -1,5 +1,39 @@ | |||
1 | #ifndef _X86_CURRENT_H | ||
2 | #define _X86_CURRENT_H | ||
3 | |||
1 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
2 | # include "current_32.h" | 5 | #include <linux/compiler.h> |
3 | #else | 6 | #include <asm/percpu.h> |
4 | # include "current_64.h" | 7 | |
5 | #endif | 8 | struct task_struct; |
9 | |||
10 | DECLARE_PER_CPU(struct task_struct *, current_task); | ||
11 | static __always_inline struct task_struct *get_current(void) | ||
12 | { | ||
13 | return x86_read_percpu(current_task); | ||
14 | } | ||
15 | |||
16 | #else /* X86_32 */ | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | ||
19 | #include <asm/pda.h> | ||
20 | |||
21 | struct task_struct; | ||
22 | |||
23 | static __always_inline struct task_struct *get_current(void) | ||
24 | { | ||
25 | return read_pda(pcurrent); | ||
26 | } | ||
27 | |||
28 | #else /* __ASSEMBLY__ */ | ||
29 | |||
30 | #include <asm/asm-offsets.h> | ||
31 | #define GET_CURRENT(reg) movq %gs:(pda_pcurrent),reg | ||
32 | |||
33 | #endif /* __ASSEMBLY__ */ | ||
34 | |||
35 | #endif /* X86_32 */ | ||
36 | |||
37 | #define current get_current() | ||
38 | |||
39 | #endif /* X86_CURRENT_H */ | ||
diff --git a/include/asm-x86/current_32.h b/include/asm-x86/current_32.h deleted file mode 100644 index 5af9bdb97a16..000000000000 --- a/include/asm-x86/current_32.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | #ifndef _I386_CURRENT_H | ||
2 | #define _I386_CURRENT_H | ||
3 | |||
4 | #include <linux/compiler.h> | ||
5 | #include <asm/percpu.h> | ||
6 | |||
7 | struct task_struct; | ||
8 | |||
9 | DECLARE_PER_CPU(struct task_struct *, current_task); | ||
10 | static __always_inline struct task_struct *get_current(void) | ||
11 | { | ||
12 | return x86_read_percpu(current_task); | ||
13 | } | ||
14 | |||
15 | #define current get_current() | ||
16 | |||
17 | #endif /* !(_I386_CURRENT_H) */ | ||
diff --git a/include/asm-x86/current_64.h b/include/asm-x86/current_64.h deleted file mode 100644 index 2d368ede2fc1..000000000000 --- a/include/asm-x86/current_64.h +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | #ifndef _X86_64_CURRENT_H | ||
2 | #define _X86_64_CURRENT_H | ||
3 | |||
4 | #if !defined(__ASSEMBLY__) | ||
5 | struct task_struct; | ||
6 | |||
7 | #include <asm/pda.h> | ||
8 | |||
9 | static inline struct task_struct *get_current(void) | ||
10 | { | ||
11 | struct task_struct *t = read_pda(pcurrent); | ||
12 | return t; | ||
13 | } | ||
14 | |||
15 | #define current get_current() | ||
16 | |||
17 | #else | ||
18 | |||
19 | #ifndef ASM_OFFSET_H | ||
20 | #include <asm/asm-offsets.h> | ||
21 | #endif | ||
22 | |||
23 | #define GET_CURRENT(reg) movq %gs:(pda_pcurrent),reg | ||
24 | |||
25 | #endif | ||
26 | |||
27 | #endif /* !(_X86_64_CURRENT_H) */ | ||
diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h index 4b96148e90c1..f0df7ee96816 100644 --- a/include/asm-x86/fixmap_32.h +++ b/include/asm-x86/fixmap_32.h | |||
@@ -79,10 +79,6 @@ enum fixed_addresses { | |||
79 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ | 79 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ |
80 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, | 80 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, |
81 | #endif | 81 | #endif |
82 | #ifdef CONFIG_ACPI | ||
83 | FIX_ACPI_BEGIN, | ||
84 | FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1, | ||
85 | #endif | ||
86 | #ifdef CONFIG_PCI_MMCONFIG | 82 | #ifdef CONFIG_PCI_MMCONFIG |
87 | FIX_PCIE_MCFG, | 83 | FIX_PCIE_MCFG, |
88 | #endif | 84 | #endif |
@@ -103,6 +99,10 @@ enum fixed_addresses { | |||
103 | (__end_of_permanent_fixed_addresses & 511), | 99 | (__end_of_permanent_fixed_addresses & 511), |
104 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1, | 100 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1, |
105 | FIX_WP_TEST, | 101 | FIX_WP_TEST, |
102 | #ifdef CONFIG_ACPI | ||
103 | FIX_ACPI_BEGIN, | ||
104 | FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1, | ||
105 | #endif | ||
106 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT | 106 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT |
107 | FIX_OHCI1394_BASE, | 107 | FIX_OHCI1394_BASE, |
108 | #endif | 108 | #endif |
diff --git a/include/asm-x86/mmconfig.h b/include/asm-x86/mmconfig.h new file mode 100644 index 000000000000..95beda07c6fa --- /dev/null +++ b/include/asm-x86/mmconfig.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _ASM_MMCONFIG_H | ||
2 | #define _ASM_MMCONFIG_H | ||
3 | |||
4 | #ifdef CONFIG_PCI_MMCONFIG | ||
5 | extern void __cpuinit fam10h_check_enable_mmcfg(void); | ||
6 | extern void __init check_enable_amd_mmconf_dmi(void); | ||
7 | #else | ||
8 | static inline void fam10h_check_enable_mmcfg(void) { } | ||
9 | static inline void check_enable_amd_mmconf_dmi(void) { } | ||
10 | #endif | ||
11 | |||
12 | #endif | ||
diff --git a/include/asm-x86/nmi.h b/include/asm-x86/nmi.h index 1e363021e72f..621bd090c1fb 100644 --- a/include/asm-x86/nmi.h +++ b/include/asm-x86/nmi.h | |||
@@ -15,27 +15,6 @@ | |||
15 | */ | 15 | */ |
16 | int do_nmi_callback(struct pt_regs *regs, int cpu); | 16 | int do_nmi_callback(struct pt_regs *regs, int cpu); |
17 | 17 | ||
18 | #ifdef CONFIG_PM | ||
19 | |||
20 | /** Replace the PM callback routine for NMI. */ | ||
21 | struct pm_dev *set_nmi_pm_callback(pm_callback callback); | ||
22 | |||
23 | /** Unset the PM callback routine back to the default. */ | ||
24 | void unset_nmi_pm_callback(struct pm_dev *dev); | ||
25 | |||
26 | #else | ||
27 | |||
28 | static inline struct pm_dev *set_nmi_pm_callback(pm_callback callback) | ||
29 | { | ||
30 | return 0; | ||
31 | } | ||
32 | |||
33 | static inline void unset_nmi_pm_callback(struct pm_dev *dev) | ||
34 | { | ||
35 | } | ||
36 | |||
37 | #endif /* CONFIG_PM */ | ||
38 | |||
39 | #ifdef CONFIG_X86_64 | 18 | #ifdef CONFIG_X86_64 |
40 | extern void default_do_nmi(struct pt_regs *); | 19 | extern void default_do_nmi(struct pt_regs *); |
41 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); | 20 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); |
@@ -46,7 +25,6 @@ extern void nmi_watchdog_default(void); | |||
46 | 25 | ||
47 | extern int check_nmi_watchdog(void); | 26 | extern int check_nmi_watchdog(void); |
48 | extern int nmi_watchdog_enabled; | 27 | extern int nmi_watchdog_enabled; |
49 | extern int unknown_nmi_panic; | ||
50 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); | 28 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); |
51 | extern int avail_to_resrv_perfctr_nmi(unsigned int); | 29 | extern int avail_to_resrv_perfctr_nmi(unsigned int); |
52 | extern int reserve_perfctr_nmi(unsigned int); | 30 | extern int reserve_perfctr_nmi(unsigned int); |
diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h index dc936dddf161..ed165097520f 100644 --- a/include/asm-x86/page.h +++ b/include/asm-x86/page.h | |||
@@ -51,8 +51,15 @@ | |||
51 | 51 | ||
52 | #ifndef __ASSEMBLY__ | 52 | #ifndef __ASSEMBLY__ |
53 | 53 | ||
54 | typedef struct { pgdval_t pgd; } pgd_t; | ||
55 | typedef struct { pgprotval_t pgprot; } pgprot_t; | ||
56 | |||
54 | extern int page_is_ram(unsigned long pagenr); | 57 | extern int page_is_ram(unsigned long pagenr); |
55 | extern int devmem_is_allowed(unsigned long pagenr); | 58 | extern int devmem_is_allowed(unsigned long pagenr); |
59 | extern void map_devmem(unsigned long pfn, unsigned long size, | ||
60 | pgprot_t vma_prot); | ||
61 | extern void unmap_devmem(unsigned long pfn, unsigned long size, | ||
62 | pgprot_t vma_prot); | ||
56 | 63 | ||
57 | extern unsigned long max_pfn_mapped; | 64 | extern unsigned long max_pfn_mapped; |
58 | 65 | ||
@@ -74,9 +81,6 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr, | |||
74 | alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) | 81 | alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) |
75 | #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE | 82 | #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE |
76 | 83 | ||
77 | typedef struct { pgdval_t pgd; } pgd_t; | ||
78 | typedef struct { pgprotval_t pgprot; } pgprot_t; | ||
79 | |||
80 | static inline pgd_t native_make_pgd(pgdval_t val) | 84 | static inline pgd_t native_make_pgd(pgdval_t val) |
81 | { | 85 | { |
82 | return (pgd_t) { val }; | 86 | return (pgd_t) { val }; |
diff --git a/include/asm-x86/page_32.h b/include/asm-x86/page_32.h index 424e82f8ae27..ccf0ba3c3aba 100644 --- a/include/asm-x86/page_32.h +++ b/include/asm-x86/page_32.h | |||
@@ -14,7 +14,8 @@ | |||
14 | #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL) | 14 | #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL) |
15 | 15 | ||
16 | #ifdef CONFIG_X86_PAE | 16 | #ifdef CONFIG_X86_PAE |
17 | #define __PHYSICAL_MASK_SHIFT 36 | 17 | /* 44=32+12, the limit we can fit into an unsigned long pfn */ |
18 | #define __PHYSICAL_MASK_SHIFT 44 | ||
18 | #define __VIRTUAL_MASK_SHIFT 32 | 19 | #define __VIRTUAL_MASK_SHIFT 32 |
19 | #define PAGETABLE_LEVELS 3 | 20 | #define PAGETABLE_LEVELS 3 |
20 | 21 | ||
diff --git a/include/asm-x86/processor-flags.h b/include/asm-x86/processor-flags.h index 199cab107d85..092b39b3a7e6 100644 --- a/include/asm-x86/processor-flags.h +++ b/include/asm-x86/processor-flags.h | |||
@@ -88,4 +88,10 @@ | |||
88 | #define CX86_ARR_BASE 0xc4 | 88 | #define CX86_ARR_BASE 0xc4 |
89 | #define CX86_RCR_BASE 0xdc | 89 | #define CX86_RCR_BASE 0xdc |
90 | 90 | ||
91 | #ifdef CONFIG_VM86 | ||
92 | #define X86_VM_MASK X86_EFLAGS_VM | ||
93 | #else | ||
94 | #define X86_VM_MASK 0 /* No VM86 support */ | ||
95 | #endif | ||
96 | |||
91 | #endif /* __ASM_I386_PROCESSOR_FLAGS_H */ | 97 | #endif /* __ASM_I386_PROCESSOR_FLAGS_H */ |
diff --git a/include/asm-x86/ptrace.h b/include/asm-x86/ptrace.h index 9f922b0b95d6..8a71db803da6 100644 --- a/include/asm-x86/ptrace.h +++ b/include/asm-x86/ptrace.h | |||
@@ -3,7 +3,12 @@ | |||
3 | 3 | ||
4 | #include <linux/compiler.h> /* For __user */ | 4 | #include <linux/compiler.h> /* For __user */ |
5 | #include <asm/ptrace-abi.h> | 5 | #include <asm/ptrace-abi.h> |
6 | #include <asm/processor-flags.h> | ||
6 | 7 | ||
8 | #ifdef __KERNEL__ | ||
9 | #include <asm/ds.h> /* the DS BTS struct is used for ptrace too */ | ||
10 | #include <asm/segment.h> | ||
11 | #endif | ||
7 | 12 | ||
8 | #ifndef __ASSEMBLY__ | 13 | #ifndef __ASSEMBLY__ |
9 | 14 | ||
@@ -55,9 +60,6 @@ struct pt_regs { | |||
55 | unsigned long ss; | 60 | unsigned long ss; |
56 | }; | 61 | }; |
57 | 62 | ||
58 | #include <asm/vm86.h> | ||
59 | #include <asm/segment.h> | ||
60 | |||
61 | #endif /* __KERNEL__ */ | 63 | #endif /* __KERNEL__ */ |
62 | 64 | ||
63 | #else /* __i386__ */ | 65 | #else /* __i386__ */ |
diff --git a/include/asm-x86/reboot.h b/include/asm-x86/reboot.h index e63741f19392..206f355786dc 100644 --- a/include/asm-x86/reboot.h +++ b/include/asm-x86/reboot.h | |||
@@ -14,8 +14,8 @@ struct machine_ops { | |||
14 | 14 | ||
15 | extern struct machine_ops machine_ops; | 15 | extern struct machine_ops machine_ops; |
16 | 16 | ||
17 | void machine_real_restart(unsigned char *code, int length); | ||
18 | void native_machine_crash_shutdown(struct pt_regs *regs); | 17 | void native_machine_crash_shutdown(struct pt_regs *regs); |
19 | void native_machine_shutdown(void); | 18 | void native_machine_shutdown(void); |
19 | void machine_real_restart(const unsigned char *code, int length); | ||
20 | 20 | ||
21 | #endif /* _ASM_REBOOT_H */ | 21 | #endif /* _ASM_REBOOT_H */ |
diff --git a/include/asm-x86/seccomp_32.h b/include/asm-x86/seccomp_32.h index 18da19e89bff..36e71c5f306f 100644 --- a/include/asm-x86/seccomp_32.h +++ b/include/asm-x86/seccomp_32.h | |||
@@ -1,4 +1,5 @@ | |||
1 | #ifndef _ASM_SECCOMP_H | 1 | #ifndef _ASM_SECCOMP_H |
2 | #define _ASM_SECCOMP_H | ||
2 | 3 | ||
3 | #include <linux/thread_info.h> | 4 | #include <linux/thread_info.h> |
4 | 5 | ||
diff --git a/include/asm-x86/string_32.h b/include/asm-x86/string_32.h index b49369ad9a61..193578cd1fd9 100644 --- a/include/asm-x86/string_32.h +++ b/include/asm-x86/string_32.h | |||
@@ -29,81 +29,116 @@ extern char *strchr(const char *s, int c); | |||
29 | #define __HAVE_ARCH_STRLEN | 29 | #define __HAVE_ARCH_STRLEN |
30 | extern size_t strlen(const char *s); | 30 | extern size_t strlen(const char *s); |
31 | 31 | ||
32 | static __always_inline void * __memcpy(void * to, const void * from, size_t n) | 32 | static __always_inline void *__memcpy(void *to, const void *from, size_t n) |
33 | { | 33 | { |
34 | int d0, d1, d2; | 34 | int d0, d1, d2; |
35 | __asm__ __volatile__( | 35 | asm volatile("rep ; movsl\n\t" |
36 | "rep ; movsl\n\t" | 36 | "movl %4,%%ecx\n\t" |
37 | "movl %4,%%ecx\n\t" | 37 | "andl $3,%%ecx\n\t" |
38 | "andl $3,%%ecx\n\t" | 38 | "jz 1f\n\t" |
39 | "jz 1f\n\t" | 39 | "rep ; movsb\n\t" |
40 | "rep ; movsb\n\t" | 40 | "1:" |
41 | "1:" | 41 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) |
42 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) | 42 | : "0" (n / 4), "g" (n), "1" ((long)to), "2" ((long)from) |
43 | : "0" (n/4), "g" (n), "1" ((long) to), "2" ((long) from) | 43 | : "memory"); |
44 | : "memory"); | 44 | return to; |
45 | return (to); | ||
46 | } | 45 | } |
47 | 46 | ||
48 | /* | 47 | /* |
49 | * This looks ugly, but the compiler can optimize it totally, | 48 | * This looks ugly, but the compiler can optimize it totally, |
50 | * as the count is constant. | 49 | * as the count is constant. |
51 | */ | 50 | */ |
52 | static __always_inline void * __constant_memcpy(void * to, const void * from, size_t n) | 51 | static __always_inline void *__constant_memcpy(void *to, const void *from, |
52 | size_t n) | ||
53 | { | 53 | { |
54 | long esi, edi; | 54 | long esi, edi; |
55 | if (!n) return to; | 55 | if (!n) |
56 | #if 1 /* want to do small copies with non-string ops? */ | 56 | return to; |
57 | |||
57 | switch (n) { | 58 | switch (n) { |
58 | case 1: *(char*)to = *(char*)from; return to; | 59 | case 1: |
59 | case 2: *(short*)to = *(short*)from; return to; | 60 | *(char *)to = *(char *)from; |
60 | case 4: *(int*)to = *(int*)from; return to; | 61 | return to; |
61 | #if 1 /* including those doable with two moves? */ | 62 | case 2: |
62 | case 3: *(short*)to = *(short*)from; | 63 | *(short *)to = *(short *)from; |
63 | *((char*)to+2) = *((char*)from+2); return to; | 64 | return to; |
64 | case 5: *(int*)to = *(int*)from; | 65 | case 4: |
65 | *((char*)to+4) = *((char*)from+4); return to; | 66 | *(int *)to = *(int *)from; |
66 | case 6: *(int*)to = *(int*)from; | 67 | return to; |
67 | *((short*)to+2) = *((short*)from+2); return to; | 68 | |
68 | case 8: *(int*)to = *(int*)from; | 69 | case 3: |
69 | *((int*)to+1) = *((int*)from+1); return to; | 70 | *(short *)to = *(short *)from; |
70 | #endif | 71 | *((char *)to + 2) = *((char *)from + 2); |
72 | return to; | ||
73 | case 5: | ||
74 | *(int *)to = *(int *)from; | ||
75 | *((char *)to + 4) = *((char *)from + 4); | ||
76 | return to; | ||
77 | case 6: | ||
78 | *(int *)to = *(int *)from; | ||
79 | *((short *)to + 2) = *((short *)from + 2); | ||
80 | return to; | ||
81 | case 8: | ||
82 | *(int *)to = *(int *)from; | ||
83 | *((int *)to + 1) = *((int *)from + 1); | ||
84 | return to; | ||
71 | } | 85 | } |
72 | #endif | 86 | |
73 | esi = (long) from; | 87 | esi = (long)from; |
74 | edi = (long) to; | 88 | edi = (long)to; |
75 | if (n >= 5*4) { | 89 | if (n >= 5 * 4) { |
76 | /* large block: use rep prefix */ | 90 | /* large block: use rep prefix */ |
77 | int ecx; | 91 | int ecx; |
78 | __asm__ __volatile__( | 92 | asm volatile("rep ; movsl" |
79 | "rep ; movsl" | 93 | : "=&c" (ecx), "=&D" (edi), "=&S" (esi) |
80 | : "=&c" (ecx), "=&D" (edi), "=&S" (esi) | 94 | : "0" (n / 4), "1" (edi), "2" (esi) |
81 | : "0" (n/4), "1" (edi),"2" (esi) | 95 | : "memory" |
82 | : "memory" | ||
83 | ); | 96 | ); |
84 | } else { | 97 | } else { |
85 | /* small block: don't clobber ecx + smaller code */ | 98 | /* small block: don't clobber ecx + smaller code */ |
86 | if (n >= 4*4) __asm__ __volatile__("movsl" | 99 | if (n >= 4 * 4) |
87 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 100 | asm volatile("movsl" |
88 | if (n >= 3*4) __asm__ __volatile__("movsl" | 101 | : "=&D"(edi), "=&S"(esi) |
89 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 102 | : "0"(edi), "1"(esi) |
90 | if (n >= 2*4) __asm__ __volatile__("movsl" | 103 | : "memory"); |
91 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 104 | if (n >= 3 * 4) |
92 | if (n >= 1*4) __asm__ __volatile__("movsl" | 105 | asm volatile("movsl" |
93 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 106 | : "=&D"(edi), "=&S"(esi) |
107 | : "0"(edi), "1"(esi) | ||
108 | : "memory"); | ||
109 | if (n >= 2 * 4) | ||
110 | asm volatile("movsl" | ||
111 | : "=&D"(edi), "=&S"(esi) | ||
112 | : "0"(edi), "1"(esi) | ||
113 | : "memory"); | ||
114 | if (n >= 1 * 4) | ||
115 | asm volatile("movsl" | ||
116 | : "=&D"(edi), "=&S"(esi) | ||
117 | : "0"(edi), "1"(esi) | ||
118 | : "memory"); | ||
94 | } | 119 | } |
95 | switch (n % 4) { | 120 | switch (n % 4) { |
96 | /* tail */ | 121 | /* tail */ |
97 | case 0: return to; | 122 | case 0: |
98 | case 1: __asm__ __volatile__("movsb" | 123 | return to; |
99 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 124 | case 1: |
100 | return to; | 125 | asm volatile("movsb" |
101 | case 2: __asm__ __volatile__("movsw" | 126 | : "=&D"(edi), "=&S"(esi) |
102 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 127 | : "0"(edi), "1"(esi) |
103 | return to; | 128 | : "memory"); |
104 | default: __asm__ __volatile__("movsw\n\tmovsb" | 129 | return to; |
105 | :"=&D"(edi),"=&S"(esi):"0"(edi),"1"(esi):"memory"); | 130 | case 2: |
106 | return to; | 131 | asm volatile("movsw" |
132 | : "=&D"(edi), "=&S"(esi) | ||
133 | : "0"(edi), "1"(esi) | ||
134 | : "memory"); | ||
135 | return to; | ||
136 | default: | ||
137 | asm volatile("movsw\n\tmovsb" | ||
138 | : "=&D"(edi), "=&S"(esi) | ||
139 | : "0"(edi), "1"(esi) | ||
140 | : "memory"); | ||
141 | return to; | ||
107 | } | 142 | } |
108 | } | 143 | } |
109 | 144 | ||
@@ -117,87 +152,86 @@ static __always_inline void * __constant_memcpy(void * to, const void * from, si | |||
117 | * This CPU favours 3DNow strongly (eg AMD Athlon) | 152 | * This CPU favours 3DNow strongly (eg AMD Athlon) |
118 | */ | 153 | */ |
119 | 154 | ||
120 | static inline void * __constant_memcpy3d(void * to, const void * from, size_t len) | 155 | static inline void *__constant_memcpy3d(void *to, const void *from, size_t len) |
121 | { | 156 | { |
122 | if (len < 512) | 157 | if (len < 512) |
123 | return __constant_memcpy(to, from, len); | 158 | return __constant_memcpy(to, from, len); |
124 | return _mmx_memcpy(to, from, len); | 159 | return _mmx_memcpy(to, from, len); |
125 | } | 160 | } |
126 | 161 | ||
127 | static __inline__ void *__memcpy3d(void *to, const void *from, size_t len) | 162 | static inline void *__memcpy3d(void *to, const void *from, size_t len) |
128 | { | 163 | { |
129 | if (len < 512) | 164 | if (len < 512) |
130 | return __memcpy(to, from, len); | 165 | return __memcpy(to, from, len); |
131 | return _mmx_memcpy(to, from, len); | 166 | return _mmx_memcpy(to, from, len); |
132 | } | 167 | } |
133 | 168 | ||
134 | #define memcpy(t, f, n) \ | 169 | #define memcpy(t, f, n) \ |
135 | (__builtin_constant_p(n) ? \ | 170 | (__builtin_constant_p((n)) \ |
136 | __constant_memcpy3d((t),(f),(n)) : \ | 171 | ? __constant_memcpy3d((t), (f), (n)) \ |
137 | __memcpy3d((t),(f),(n))) | 172 | : __memcpy3d((t), (f), (n))) |
138 | 173 | ||
139 | #else | 174 | #else |
140 | 175 | ||
141 | /* | 176 | /* |
142 | * No 3D Now! | 177 | * No 3D Now! |
143 | */ | 178 | */ |
144 | 179 | ||
145 | #define memcpy(t, f, n) \ | 180 | #define memcpy(t, f, n) \ |
146 | (__builtin_constant_p(n) ? \ | 181 | (__builtin_constant_p((n)) \ |
147 | __constant_memcpy((t),(f),(n)) : \ | 182 | ? __constant_memcpy((t), (f), (n)) \ |
148 | __memcpy((t),(f),(n))) | 183 | : __memcpy((t), (f), (n))) |
149 | 184 | ||
150 | #endif | 185 | #endif |
151 | 186 | ||
152 | #define __HAVE_ARCH_MEMMOVE | 187 | #define __HAVE_ARCH_MEMMOVE |
153 | void *memmove(void * dest,const void * src, size_t n); | 188 | void *memmove(void *dest, const void *src, size_t n); |
154 | 189 | ||
155 | #define memcmp __builtin_memcmp | 190 | #define memcmp __builtin_memcmp |
156 | 191 | ||
157 | #define __HAVE_ARCH_MEMCHR | 192 | #define __HAVE_ARCH_MEMCHR |
158 | extern void *memchr(const void * cs,int c,size_t count); | 193 | extern void *memchr(const void *cs, int c, size_t count); |
159 | 194 | ||
160 | static inline void * __memset_generic(void * s, char c,size_t count) | 195 | static inline void *__memset_generic(void *s, char c, size_t count) |
161 | { | 196 | { |
162 | int d0, d1; | 197 | int d0, d1; |
163 | __asm__ __volatile__( | 198 | asm volatile("rep\n\t" |
164 | "rep\n\t" | 199 | "stosb" |
165 | "stosb" | 200 | : "=&c" (d0), "=&D" (d1) |
166 | : "=&c" (d0), "=&D" (d1) | 201 | : "a" (c), "1" (s), "0" (count) |
167 | :"a" (c),"1" (s),"0" (count) | 202 | : "memory"); |
168 | :"memory"); | 203 | return s; |
169 | return s; | ||
170 | } | 204 | } |
171 | 205 | ||
172 | /* we might want to write optimized versions of these later */ | 206 | /* we might want to write optimized versions of these later */ |
173 | #define __constant_count_memset(s,c,count) __memset_generic((s),(c),(count)) | 207 | #define __constant_count_memset(s, c, count) __memset_generic((s), (c), (count)) |
174 | 208 | ||
175 | /* | 209 | /* |
176 | * memset(x,0,y) is a reasonably common thing to do, so we want to fill | 210 | * memset(x, 0, y) is a reasonably common thing to do, so we want to fill |
177 | * things 32 bits at a time even when we don't know the size of the | 211 | * things 32 bits at a time even when we don't know the size of the |
178 | * area at compile-time.. | 212 | * area at compile-time.. |
179 | */ | 213 | */ |
180 | static __always_inline void * __constant_c_memset(void * s, unsigned long c, size_t count) | 214 | static __always_inline |
215 | void *__constant_c_memset(void *s, unsigned long c, size_t count) | ||
181 | { | 216 | { |
182 | int d0, d1; | 217 | int d0, d1; |
183 | __asm__ __volatile__( | 218 | asm volatile("rep ; stosl\n\t" |
184 | "rep ; stosl\n\t" | 219 | "testb $2,%b3\n\t" |
185 | "testb $2,%b3\n\t" | 220 | "je 1f\n\t" |
186 | "je 1f\n\t" | 221 | "stosw\n" |
187 | "stosw\n" | 222 | "1:\ttestb $1,%b3\n\t" |
188 | "1:\ttestb $1,%b3\n\t" | 223 | "je 2f\n\t" |
189 | "je 2f\n\t" | 224 | "stosb\n" |
190 | "stosb\n" | 225 | "2:" |
191 | "2:" | 226 | : "=&c" (d0), "=&D" (d1) |
192 | :"=&c" (d0), "=&D" (d1) | 227 | : "a" (c), "q" (count), "0" (count/4), "1" ((long)s) |
193 | :"a" (c), "q" (count), "0" (count/4), "1" ((long) s) | 228 | : "memory"); |
194 | :"memory"); | 229 | return s; |
195 | return (s); | ||
196 | } | 230 | } |
197 | 231 | ||
198 | /* Added by Gertjan van Wingerde to make minix and sysv module work */ | 232 | /* Added by Gertjan van Wingerde to make minix and sysv module work */ |
199 | #define __HAVE_ARCH_STRNLEN | 233 | #define __HAVE_ARCH_STRNLEN |
200 | extern size_t strnlen(const char * s, size_t count); | 234 | extern size_t strnlen(const char *s, size_t count); |
201 | /* end of additional stuff */ | 235 | /* end of additional stuff */ |
202 | 236 | ||
203 | #define __HAVE_ARCH_STRSTR | 237 | #define __HAVE_ARCH_STRSTR |
@@ -207,66 +241,85 @@ extern char *strstr(const char *cs, const char *ct); | |||
207 | * This looks horribly ugly, but the compiler can optimize it totally, | 241 | * This looks horribly ugly, but the compiler can optimize it totally, |
208 | * as we by now know that both pattern and count is constant.. | 242 | * as we by now know that both pattern and count is constant.. |
209 | */ | 243 | */ |
210 | static __always_inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count) | 244 | static __always_inline |
245 | void *__constant_c_and_count_memset(void *s, unsigned long pattern, | ||
246 | size_t count) | ||
211 | { | 247 | { |
212 | switch (count) { | 248 | switch (count) { |
249 | case 0: | ||
250 | return s; | ||
251 | case 1: | ||
252 | *(unsigned char *)s = pattern & 0xff; | ||
253 | return s; | ||
254 | case 2: | ||
255 | *(unsigned short *)s = pattern & 0xffff; | ||
256 | return s; | ||
257 | case 3: | ||
258 | *(unsigned short *)s = pattern & 0xffff; | ||
259 | *((unsigned char *)s + 2) = pattern & 0xff; | ||
260 | return s; | ||
261 | case 4: | ||
262 | *(unsigned long *)s = pattern; | ||
263 | return s; | ||
264 | } | ||
265 | |||
266 | #define COMMON(x) \ | ||
267 | asm volatile("rep ; stosl" \ | ||
268 | x \ | ||
269 | : "=&c" (d0), "=&D" (d1) \ | ||
270 | : "a" (eax), "0" (count/4), "1" ((long)s) \ | ||
271 | : "memory") | ||
272 | |||
273 | { | ||
274 | int d0, d1; | ||
275 | #if __GNUC__ == 4 && __GNUC_MINOR__ == 0 | ||
276 | /* Workaround for broken gcc 4.0 */ | ||
277 | register unsigned long eax asm("%eax") = pattern; | ||
278 | #else | ||
279 | unsigned long eax = pattern; | ||
280 | #endif | ||
281 | |||
282 | switch (count % 4) { | ||
213 | case 0: | 283 | case 0: |
284 | COMMON(""); | ||
214 | return s; | 285 | return s; |
215 | case 1: | 286 | case 1: |
216 | *(unsigned char *)s = pattern & 0xff; | 287 | COMMON("\n\tstosb"); |
217 | return s; | 288 | return s; |
218 | case 2: | 289 | case 2: |
219 | *(unsigned short *)s = pattern & 0xffff; | 290 | COMMON("\n\tstosw"); |
220 | return s; | 291 | return s; |
221 | case 3: | 292 | default: |
222 | *(unsigned short *)s = pattern & 0xffff; | 293 | COMMON("\n\tstosw\n\tstosb"); |
223 | *(2+(unsigned char *)s) = pattern & 0xff; | ||
224 | return s; | ||
225 | case 4: | ||
226 | *(unsigned long *)s = pattern; | ||
227 | return s; | 294 | return s; |
295 | } | ||
228 | } | 296 | } |
229 | #define COMMON(x) \ | 297 | |
230 | __asm__ __volatile__( \ | ||
231 | "rep ; stosl" \ | ||
232 | x \ | ||
233 | : "=&c" (d0), "=&D" (d1) \ | ||
234 | : "a" (pattern),"0" (count/4),"1" ((long) s) \ | ||
235 | : "memory") | ||
236 | { | ||
237 | int d0, d1; | ||
238 | switch (count % 4) { | ||
239 | case 0: COMMON(""); return s; | ||
240 | case 1: COMMON("\n\tstosb"); return s; | ||
241 | case 2: COMMON("\n\tstosw"); return s; | ||
242 | default: COMMON("\n\tstosw\n\tstosb"); return s; | ||
243 | } | ||
244 | } | ||
245 | |||
246 | #undef COMMON | 298 | #undef COMMON |
247 | } | 299 | } |
248 | 300 | ||
249 | #define __constant_c_x_memset(s, c, count) \ | 301 | #define __constant_c_x_memset(s, c, count) \ |
250 | (__builtin_constant_p(count) ? \ | 302 | (__builtin_constant_p(count) \ |
251 | __constant_c_and_count_memset((s),(c),(count)) : \ | 303 | ? __constant_c_and_count_memset((s), (c), (count)) \ |
252 | __constant_c_memset((s),(c),(count))) | 304 | : __constant_c_memset((s), (c), (count))) |
253 | 305 | ||
254 | #define __memset(s, c, count) \ | 306 | #define __memset(s, c, count) \ |
255 | (__builtin_constant_p(count) ? \ | 307 | (__builtin_constant_p(count) \ |
256 | __constant_count_memset((s),(c),(count)) : \ | 308 | ? __constant_count_memset((s), (c), (count)) \ |
257 | __memset_generic((s),(c),(count))) | 309 | : __memset_generic((s), (c), (count))) |
258 | 310 | ||
259 | #define __HAVE_ARCH_MEMSET | 311 | #define __HAVE_ARCH_MEMSET |
260 | #define memset(s, c, count) \ | 312 | #define memset(s, c, count) \ |
261 | (__builtin_constant_p(c) ? \ | 313 | (__builtin_constant_p(c) \ |
262 | __constant_c_x_memset((s),(0x01010101UL*(unsigned char)(c)),(count)) : \ | 314 | ? __constant_c_x_memset((s), (0x01010101UL * (unsigned char)(c)), \ |
263 | __memset((s),(c),(count))) | 315 | (count)) \ |
316 | : __memset((s), (c), (count))) | ||
264 | 317 | ||
265 | /* | 318 | /* |
266 | * find the first occurrence of byte 'c', or 1 past the area if none | 319 | * find the first occurrence of byte 'c', or 1 past the area if none |
267 | */ | 320 | */ |
268 | #define __HAVE_ARCH_MEMSCAN | 321 | #define __HAVE_ARCH_MEMSCAN |
269 | extern void *memscan(void * addr, int c, size_t size); | 322 | extern void *memscan(void *addr, int c, size_t size); |
270 | 323 | ||
271 | #endif /* __KERNEL__ */ | 324 | #endif /* __KERNEL__ */ |
272 | 325 | ||
diff --git a/include/asm-x86/system.h b/include/asm-x86/system.h index a2f04cd79b29..7e4c133795a1 100644 --- a/include/asm-x86/system.h +++ b/include/asm-x86/system.h | |||
@@ -289,7 +289,7 @@ static inline void native_wbinvd(void) | |||
289 | 289 | ||
290 | #endif/* CONFIG_PARAVIRT */ | 290 | #endif/* CONFIG_PARAVIRT */ |
291 | 291 | ||
292 | #define stts() write_cr0(8 | read_cr0()) | 292 | #define stts() write_cr0(read_cr0() | X86_CR0_TS) |
293 | 293 | ||
294 | #endif /* __KERNEL__ */ | 294 | #endif /* __KERNEL__ */ |
295 | 295 | ||
diff --git a/include/asm-x86/vm86.h b/include/asm-x86/vm86.h index 074b357146df..5ce351325e01 100644 --- a/include/asm-x86/vm86.h +++ b/include/asm-x86/vm86.h | |||
@@ -14,12 +14,6 @@ | |||
14 | 14 | ||
15 | #include <asm/processor-flags.h> | 15 | #include <asm/processor-flags.h> |
16 | 16 | ||
17 | #ifdef CONFIG_VM86 | ||
18 | #define X86_VM_MASK X86_EFLAGS_VM | ||
19 | #else | ||
20 | #define X86_VM_MASK 0 /* No VM86 support */ | ||
21 | #endif | ||
22 | |||
23 | #define BIOSSEG 0x0f000 | 17 | #define BIOSSEG 0x0f000 |
24 | 18 | ||
25 | #define CPU_086 0 | 19 | #define CPU_086 0 |
@@ -121,7 +115,6 @@ struct vm86plus_info_struct { | |||
121 | unsigned long is_vm86pus:1; /* for vm86 internal use */ | 115 | unsigned long is_vm86pus:1; /* for vm86 internal use */ |
122 | unsigned char vm86dbg_intxxtab[32]; /* for debugger */ | 116 | unsigned char vm86dbg_intxxtab[32]; /* for debugger */ |
123 | }; | 117 | }; |
124 | |||
125 | struct vm86plus_struct { | 118 | struct vm86plus_struct { |
126 | struct vm86_regs regs; | 119 | struct vm86_regs regs; |
127 | unsigned long flags; | 120 | unsigned long flags; |
@@ -133,6 +126,9 @@ struct vm86plus_struct { | |||
133 | }; | 126 | }; |
134 | 127 | ||
135 | #ifdef __KERNEL__ | 128 | #ifdef __KERNEL__ |
129 | |||
130 | #include <asm/ptrace.h> | ||
131 | |||
136 | /* | 132 | /* |
137 | * This is the (kernel) stack-layout when we have done a "SAVE_ALL" from vm86 | 133 | * This is the (kernel) stack-layout when we have done a "SAVE_ALL" from vm86 |
138 | * mode - the main change is that the old segment descriptors aren't | 134 | * mode - the main change is that the old segment descriptors aren't |
@@ -141,7 +137,6 @@ struct vm86plus_struct { | |||
141 | * at the end of the structure. Look at ptrace.h to see the "normal" | 137 | * at the end of the structure. Look at ptrace.h to see the "normal" |
142 | * setup. For user space layout see 'struct vm86_regs' above. | 138 | * setup. For user space layout see 'struct vm86_regs' above. |
143 | */ | 139 | */ |
144 | #include <asm/ptrace.h> | ||
145 | 140 | ||
146 | struct kernel_vm86_regs { | 141 | struct kernel_vm86_regs { |
147 | /* | 142 | /* |