diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-10-13 09:43:54 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-10-13 09:43:54 -0400 |
commit | b160292cc216a50fd0cd386b0bda2cd48352c73b (patch) | |
tree | ef07cf98f91353ee4c9ec1e1ca7a2a5d9d4b538a /arch/x86_64 | |
parent | b37bde147890c8fea8369a5a4e230dabdea4ebfb (diff) | |
parent | bbf25010f1a6b761914430f5fca081ec8c7accd1 (diff) |
Merge Linux 2.6.23
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/Kconfig | 8 | ||||
-rw-r--r-- | arch/x86_64/defconfig | 1 | ||||
-rw-r--r-- | arch/x86_64/ia32/ia32entry.S | 18 | ||||
-rw-r--r-- | arch/x86_64/kernel/acpi/wakeup.S | 47 | ||||
-rw-r--r-- | arch/x86_64/kernel/io_apic.c | 8 | ||||
-rw-r--r-- | arch/x86_64/kernel/process.c | 1 | ||||
-rw-r--r-- | arch/x86_64/kernel/ptrace.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/smp.c | 2 | ||||
-rw-r--r-- | arch/x86_64/mm/fault.c | 7 | ||||
-rw-r--r-- | arch/x86_64/vdso/vclock_gettime.c | 5 | ||||
-rw-r--r-- | arch/x86_64/vdso/voffset.h | 2 |
11 files changed, 43 insertions, 60 deletions
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig index ffa036406289..b4d9089a6a06 100644 --- a/arch/x86_64/Kconfig +++ b/arch/x86_64/Kconfig | |||
@@ -60,14 +60,6 @@ config ZONE_DMA | |||
60 | bool | 60 | bool |
61 | default y | 61 | default y |
62 | 62 | ||
63 | config QUICKLIST | ||
64 | bool | ||
65 | default y | ||
66 | |||
67 | config NR_QUICK | ||
68 | int | ||
69 | default 2 | ||
70 | |||
71 | config ISA | 63 | config ISA |
72 | bool | 64 | bool |
73 | 65 | ||
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig index e64f65c9d901..b091c5e35558 100644 --- a/arch/x86_64/defconfig +++ b/arch/x86_64/defconfig | |||
@@ -201,7 +201,6 @@ CONFIG_PM=y | |||
201 | # CONFIG_PM_DEBUG is not set | 201 | # CONFIG_PM_DEBUG is not set |
202 | CONFIG_HIBERNATION=y | 202 | CONFIG_HIBERNATION=y |
203 | CONFIG_PM_STD_PARTITION="" | 203 | CONFIG_PM_STD_PARTITION="" |
204 | CONFIG_SUSPEND_SMP=y | ||
205 | 204 | ||
206 | # | 205 | # |
207 | # ACPI (Advanced Configuration and Power Interface) Support | 206 | # ACPI (Advanced Configuration and Power Interface) Support |
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index 938278697e20..18b231810908 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S | |||
@@ -38,6 +38,18 @@ | |||
38 | movq %rax,R8(%rsp) | 38 | movq %rax,R8(%rsp) |
39 | .endm | 39 | .endm |
40 | 40 | ||
41 | .macro LOAD_ARGS32 offset | ||
42 | movl \offset(%rsp),%r11d | ||
43 | movl \offset+8(%rsp),%r10d | ||
44 | movl \offset+16(%rsp),%r9d | ||
45 | movl \offset+24(%rsp),%r8d | ||
46 | movl \offset+40(%rsp),%ecx | ||
47 | movl \offset+48(%rsp),%edx | ||
48 | movl \offset+56(%rsp),%esi | ||
49 | movl \offset+64(%rsp),%edi | ||
50 | movl \offset+72(%rsp),%eax | ||
51 | .endm | ||
52 | |||
41 | .macro CFI_STARTPROC32 simple | 53 | .macro CFI_STARTPROC32 simple |
42 | CFI_STARTPROC \simple | 54 | CFI_STARTPROC \simple |
43 | CFI_UNDEFINED r8 | 55 | CFI_UNDEFINED r8 |
@@ -152,7 +164,7 @@ sysenter_tracesys: | |||
152 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ | 164 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ |
153 | movq %rsp,%rdi /* &pt_regs -> arg1 */ | 165 | movq %rsp,%rdi /* &pt_regs -> arg1 */ |
154 | call syscall_trace_enter | 166 | call syscall_trace_enter |
155 | LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ | 167 | LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ |
156 | RESTORE_REST | 168 | RESTORE_REST |
157 | movl %ebp, %ebp | 169 | movl %ebp, %ebp |
158 | /* no need to do an access_ok check here because rbp has been | 170 | /* no need to do an access_ok check here because rbp has been |
@@ -255,7 +267,7 @@ cstar_tracesys: | |||
255 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ | 267 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ |
256 | movq %rsp,%rdi /* &pt_regs -> arg1 */ | 268 | movq %rsp,%rdi /* &pt_regs -> arg1 */ |
257 | call syscall_trace_enter | 269 | call syscall_trace_enter |
258 | LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ | 270 | LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ |
259 | RESTORE_REST | 271 | RESTORE_REST |
260 | movl RSP-ARGOFFSET(%rsp), %r8d | 272 | movl RSP-ARGOFFSET(%rsp), %r8d |
261 | /* no need to do an access_ok check here because r8 has been | 273 | /* no need to do an access_ok check here because r8 has been |
@@ -334,7 +346,7 @@ ia32_tracesys: | |||
334 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ | 346 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ |
335 | movq %rsp,%rdi /* &pt_regs -> arg1 */ | 347 | movq %rsp,%rdi /* &pt_regs -> arg1 */ |
336 | call syscall_trace_enter | 348 | call syscall_trace_enter |
337 | LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ | 349 | LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ |
338 | RESTORE_REST | 350 | RESTORE_REST |
339 | jmp ia32_do_syscall | 351 | jmp ia32_do_syscall |
340 | END(ia32_syscall) | 352 | END(ia32_syscall) |
diff --git a/arch/x86_64/kernel/acpi/wakeup.S b/arch/x86_64/kernel/acpi/wakeup.S index 13f1480cbec9..a06f2bcabef9 100644 --- a/arch/x86_64/kernel/acpi/wakeup.S +++ b/arch/x86_64/kernel/acpi/wakeup.S | |||
@@ -81,7 +81,7 @@ wakeup_code: | |||
81 | testl $2, realmode_flags - wakeup_code | 81 | testl $2, realmode_flags - wakeup_code |
82 | jz 1f | 82 | jz 1f |
83 | mov video_mode - wakeup_code, %ax | 83 | mov video_mode - wakeup_code, %ax |
84 | call mode_seta | 84 | call mode_set |
85 | 1: | 85 | 1: |
86 | 86 | ||
87 | movw $0xb800, %ax | 87 | movw $0xb800, %ax |
@@ -291,52 +291,31 @@ no_longmode: | |||
291 | #define VIDEO_FIRST_V7 0x0900 | 291 | #define VIDEO_FIRST_V7 0x0900 |
292 | 292 | ||
293 | # Setting of user mode (AX=mode ID) => CF=success | 293 | # Setting of user mode (AX=mode ID) => CF=success |
294 | |||
295 | # For now, we only handle VESA modes (0x0200..0x03ff). To handle other | ||
296 | # modes, we should probably compile in the video code from the boot | ||
297 | # directory. | ||
294 | .code16 | 298 | .code16 |
295 | mode_seta: | 299 | mode_set: |
296 | movw %ax, %bx | 300 | movw %ax, %bx |
297 | #if 0 | 301 | subb $VIDEO_FIRST_VESA>>8, %bh |
298 | cmpb $0xff, %ah | 302 | cmpb $2, %bh |
299 | jz setalias | 303 | jb check_vesa |
300 | |||
301 | testb $VIDEO_RECALC>>8, %ah | ||
302 | jnz _setrec | ||
303 | |||
304 | cmpb $VIDEO_FIRST_RESOLUTION>>8, %ah | ||
305 | jnc setres | ||
306 | |||
307 | cmpb $VIDEO_FIRST_SPECIAL>>8, %ah | ||
308 | jz setspc | ||
309 | |||
310 | cmpb $VIDEO_FIRST_V7>>8, %ah | ||
311 | jz setv7 | ||
312 | #endif | ||
313 | |||
314 | cmpb $VIDEO_FIRST_VESA>>8, %ah | ||
315 | jnc check_vesaa | ||
316 | #if 0 | ||
317 | orb %ah, %ah | ||
318 | jz setmenu | ||
319 | #endif | ||
320 | |||
321 | decb %ah | ||
322 | # jz setbios Add bios modes later | ||
323 | 304 | ||
324 | setbada: clc | 305 | setbad: |
306 | clc | ||
325 | ret | 307 | ret |
326 | 308 | ||
327 | check_vesaa: | 309 | check_vesa: |
328 | subb $VIDEO_FIRST_VESA>>8, %bh | ||
329 | orw $0x4000, %bx # Use linear frame buffer | 310 | orw $0x4000, %bx # Use linear frame buffer |
330 | movw $0x4f02, %ax # VESA BIOS mode set call | 311 | movw $0x4f02, %ax # VESA BIOS mode set call |
331 | int $0x10 | 312 | int $0x10 |
332 | cmpw $0x004f, %ax # AL=4f if implemented | 313 | cmpw $0x004f, %ax # AL=4f if implemented |
333 | jnz _setbada # AH=0 if OK | 314 | jnz setbad # AH=0 if OK |
334 | 315 | ||
335 | stc | 316 | stc |
336 | ret | 317 | ret |
337 | 318 | ||
338 | _setbada: jmp setbada | ||
339 | |||
340 | wakeup_stack_begin: # Stack grows down | 319 | wakeup_stack_begin: # Stack grows down |
341 | 320 | ||
342 | .org 0xff0 | 321 | .org 0xff0 |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index f57f8b901912..966fa1062491 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -397,14 +397,12 @@ static void clear_IO_APIC (void) | |||
397 | int skip_ioapic_setup; | 397 | int skip_ioapic_setup; |
398 | int ioapic_force; | 398 | int ioapic_force; |
399 | 399 | ||
400 | /* dummy parsing: see setup.c */ | 400 | static int __init parse_noapic(char *str) |
401 | |||
402 | static int __init disable_ioapic_setup(char *str) | ||
403 | { | 401 | { |
404 | skip_ioapic_setup = 1; | 402 | disable_ioapic_setup(); |
405 | return 0; | 403 | return 0; |
406 | } | 404 | } |
407 | early_param("noapic", disable_ioapic_setup); | 405 | early_param("noapic", parse_noapic); |
408 | 406 | ||
409 | /* Actually the next is obsolete, but keep it for paranoid reasons -AK */ | 407 | /* Actually the next is obsolete, but keep it for paranoid reasons -AK */ |
410 | static int __init disable_timer_pin_setup(char *arg) | 408 | static int __init disable_timer_pin_setup(char *arg) |
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index 2842f50cbe3f..98956555450b 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c | |||
@@ -208,7 +208,6 @@ void cpu_idle (void) | |||
208 | if (__get_cpu_var(cpu_idle_state)) | 208 | if (__get_cpu_var(cpu_idle_state)) |
209 | __get_cpu_var(cpu_idle_state) = 0; | 209 | __get_cpu_var(cpu_idle_state) = 0; |
210 | 210 | ||
211 | check_pgt_cache(); | ||
212 | rmb(); | 211 | rmb(); |
213 | idle = pm_idle; | 212 | idle = pm_idle; |
214 | if (!idle) | 213 | if (!idle) |
diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c index e83cc67155ac..eea3702427b4 100644 --- a/arch/x86_64/kernel/ptrace.c +++ b/arch/x86_64/kernel/ptrace.c | |||
@@ -232,10 +232,6 @@ static int putreg(struct task_struct *child, | |||
232 | { | 232 | { |
233 | unsigned long tmp; | 233 | unsigned long tmp; |
234 | 234 | ||
235 | /* Some code in the 64bit emulation may not be 64bit clean. | ||
236 | Don't take any chances. */ | ||
237 | if (test_tsk_thread_flag(child, TIF_IA32)) | ||
238 | value &= 0xffffffff; | ||
239 | switch (regno) { | 235 | switch (regno) { |
240 | case offsetof(struct user_regs_struct,fs): | 236 | case offsetof(struct user_regs_struct,fs): |
241 | if (value && (value & 3) != 3) | 237 | if (value && (value & 3) != 3) |
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c index 673a300b5944..df4a82812adb 100644 --- a/arch/x86_64/kernel/smp.c +++ b/arch/x86_64/kernel/smp.c | |||
@@ -241,7 +241,7 @@ void flush_tlb_mm (struct mm_struct * mm) | |||
241 | } | 241 | } |
242 | if (!cpus_empty(cpu_mask)) | 242 | if (!cpus_empty(cpu_mask)) |
243 | flush_tlb_others(cpu_mask, mm, FLUSH_ALL); | 243 | flush_tlb_others(cpu_mask, mm, FLUSH_ALL); |
244 | check_pgt_cache(); | 244 | |
245 | preempt_enable(); | 245 | preempt_enable(); |
246 | } | 246 | } |
247 | EXPORT_SYMBOL(flush_tlb_mm); | 247 | EXPORT_SYMBOL(flush_tlb_mm); |
diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c index 327c9f2fa626..54816adb8e93 100644 --- a/arch/x86_64/mm/fault.c +++ b/arch/x86_64/mm/fault.c | |||
@@ -374,6 +374,13 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, | |||
374 | if (unlikely(in_atomic() || !mm)) | 374 | if (unlikely(in_atomic() || !mm)) |
375 | goto bad_area_nosemaphore; | 375 | goto bad_area_nosemaphore; |
376 | 376 | ||
377 | /* | ||
378 | * User-mode registers count as a user access even for any | ||
379 | * potential system fault or CPU buglet. | ||
380 | */ | ||
381 | if (user_mode_vm(regs)) | ||
382 | error_code |= PF_USER; | ||
383 | |||
377 | again: | 384 | again: |
378 | /* When running in the kernel we expect faults to occur only to | 385 | /* When running in the kernel we expect faults to occur only to |
379 | * addresses in user space. All other faults represent errors in the | 386 | * addresses in user space. All other faults represent errors in the |
diff --git a/arch/x86_64/vdso/vclock_gettime.c b/arch/x86_64/vdso/vclock_gettime.c index 17f6a00de712..5b54cdfb2b07 100644 --- a/arch/x86_64/vdso/vclock_gettime.c +++ b/arch/x86_64/vdso/vclock_gettime.c | |||
@@ -34,10 +34,11 @@ static long vdso_fallback_gettime(long clock, struct timespec *ts) | |||
34 | 34 | ||
35 | static inline long vgetns(void) | 35 | static inline long vgetns(void) |
36 | { | 36 | { |
37 | long v; | ||
37 | cycles_t (*vread)(void); | 38 | cycles_t (*vread)(void); |
38 | vread = gtod->clock.vread; | 39 | vread = gtod->clock.vread; |
39 | return ((vread() - gtod->clock.cycle_last) * gtod->clock.mult) >> | 40 | v = (vread() - gtod->clock.cycle_last) & gtod->clock.mask; |
40 | gtod->clock.shift; | 41 | return (v * gtod->clock.mult) >> gtod->clock.shift; |
41 | } | 42 | } |
42 | 43 | ||
43 | static noinline int do_realtime(struct timespec *ts) | 44 | static noinline int do_realtime(struct timespec *ts) |
diff --git a/arch/x86_64/vdso/voffset.h b/arch/x86_64/vdso/voffset.h index 5304204911f2..4af67c79085f 100644 --- a/arch/x86_64/vdso/voffset.h +++ b/arch/x86_64/vdso/voffset.h | |||
@@ -1 +1 @@ | |||
#define VDSO_TEXT_OFFSET 0x500 | #define VDSO_TEXT_OFFSET 0x600 | ||