diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-19 14:09:23 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-19 14:09:23 -0400 |
| commit | 2422084a94fcd5038406261b331672a13c92c050 (patch) | |
| tree | 18b8aede90f388b9e2808b1517a105ad5171e6ac | |
| parent | 81cef8e38babd1dd07eb53fccc956620a1b4f32e (diff) | |
| parent | 494486a1d2697f2153199b6501ab5b4d6e15a2bb (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha-2.6:
alpha: deal with multiple simultaneously pending signals
alpha: fix a 14 years old bug in sigreturn tracing
alpha: unb0rk sigsuspend() and rt_sigsuspend()
alpha: belated ERESTART_RESTARTBLOCK race fix
alpha: Shift perf event pending work earlier in timer interrupt
alpha: wire up fanotify and prlimit64 syscalls
alpha: kill big kernel lock
alpha: fix build breakage in asm/cacheflush.h
alpha: remove unnecessary cast from void* in assignment.
alpha: Use static const char * const where possible
| -rw-r--r-- | arch/alpha/include/asm/cacheflush.h | 2 | ||||
| -rw-r--r-- | arch/alpha/include/asm/unistd.h | 6 | ||||
| -rw-r--r-- | arch/alpha/kernel/entry.S | 61 | ||||
| -rw-r--r-- | arch/alpha/kernel/err_ev6.c | 12 | ||||
| -rw-r--r-- | arch/alpha/kernel/err_marvel.c | 33 | ||||
| -rw-r--r-- | arch/alpha/kernel/err_titan.c | 35 | ||||
| -rw-r--r-- | arch/alpha/kernel/osf_sys.c | 9 | ||||
| -rw-r--r-- | arch/alpha/kernel/pci-sysfs.c | 2 | ||||
| -rw-r--r-- | arch/alpha/kernel/signal.c | 41 | ||||
| -rw-r--r-- | arch/alpha/kernel/srm_env.c | 2 | ||||
| -rw-r--r-- | arch/alpha/kernel/systbls.S | 3 | ||||
| -rw-r--r-- | arch/alpha/kernel/time.c | 10 | ||||
| -rw-r--r-- | arch/alpha/kernel/traps.c | 3 |
13 files changed, 88 insertions, 131 deletions
diff --git a/arch/alpha/include/asm/cacheflush.h b/arch/alpha/include/asm/cacheflush.h index 01d71e1c8a9e..012f1243b1c1 100644 --- a/arch/alpha/include/asm/cacheflush.h +++ b/arch/alpha/include/asm/cacheflush.h | |||
| @@ -43,6 +43,8 @@ extern void smp_imb(void); | |||
| 43 | /* ??? Ought to use this in arch/alpha/kernel/signal.c too. */ | 43 | /* ??? Ought to use this in arch/alpha/kernel/signal.c too. */ |
| 44 | 44 | ||
| 45 | #ifndef CONFIG_SMP | 45 | #ifndef CONFIG_SMP |
| 46 | #include <linux/sched.h> | ||
| 47 | |||
| 46 | extern void __load_new_mm_context(struct mm_struct *); | 48 | extern void __load_new_mm_context(struct mm_struct *); |
| 47 | static inline void | 49 | static inline void |
| 48 | flush_icache_user_range(struct vm_area_struct *vma, struct page *page, | 50 | flush_icache_user_range(struct vm_area_struct *vma, struct page *page, |
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h index 804e5311c841..058937bf5a77 100644 --- a/arch/alpha/include/asm/unistd.h +++ b/arch/alpha/include/asm/unistd.h | |||
| @@ -449,10 +449,13 @@ | |||
| 449 | #define __NR_pwritev 491 | 449 | #define __NR_pwritev 491 |
| 450 | #define __NR_rt_tgsigqueueinfo 492 | 450 | #define __NR_rt_tgsigqueueinfo 492 |
| 451 | #define __NR_perf_event_open 493 | 451 | #define __NR_perf_event_open 493 |
| 452 | #define __NR_fanotify_init 494 | ||
| 453 | #define __NR_fanotify_mark 495 | ||
| 454 | #define __NR_prlimit64 496 | ||
| 452 | 455 | ||
| 453 | #ifdef __KERNEL__ | 456 | #ifdef __KERNEL__ |
| 454 | 457 | ||
| 455 | #define NR_SYSCALLS 494 | 458 | #define NR_SYSCALLS 497 |
| 456 | 459 | ||
| 457 | #define __ARCH_WANT_IPC_PARSE_VERSION | 460 | #define __ARCH_WANT_IPC_PARSE_VERSION |
| 458 | #define __ARCH_WANT_OLD_READDIR | 461 | #define __ARCH_WANT_OLD_READDIR |
| @@ -463,6 +466,7 @@ | |||
| 463 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 466 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
| 464 | #define __ARCH_WANT_SYS_OLDUMOUNT | 467 | #define __ARCH_WANT_SYS_OLDUMOUNT |
| 465 | #define __ARCH_WANT_SYS_SIGPENDING | 468 | #define __ARCH_WANT_SYS_SIGPENDING |
| 469 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
| 466 | 470 | ||
| 467 | /* "Conditional" syscalls. What we want is | 471 | /* "Conditional" syscalls. What we want is |
| 468 | 472 | ||
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index b45d913a51c3..ab1ee0ab082b 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
| @@ -317,14 +317,14 @@ ret_from_sys_call: | |||
| 317 | ldq $0, SP_OFF($sp) | 317 | ldq $0, SP_OFF($sp) |
| 318 | and $0, 8, $0 | 318 | and $0, 8, $0 |
| 319 | beq $0, restore_all | 319 | beq $0, restore_all |
| 320 | ret_from_reschedule: | 320 | ret_to_user: |
| 321 | /* Make sure need_resched and sigpending don't change between | 321 | /* Make sure need_resched and sigpending don't change between |
| 322 | sampling and the rti. */ | 322 | sampling and the rti. */ |
| 323 | lda $16, 7 | 323 | lda $16, 7 |
| 324 | call_pal PAL_swpipl | 324 | call_pal PAL_swpipl |
| 325 | ldl $5, TI_FLAGS($8) | 325 | ldl $5, TI_FLAGS($8) |
| 326 | and $5, _TIF_WORK_MASK, $2 | 326 | and $5, _TIF_WORK_MASK, $2 |
| 327 | bne $5, work_pending | 327 | bne $2, work_pending |
| 328 | restore_all: | 328 | restore_all: |
| 329 | RESTORE_ALL | 329 | RESTORE_ALL |
| 330 | call_pal PAL_rti | 330 | call_pal PAL_rti |
| @@ -363,7 +363,7 @@ $ret_success: | |||
| 363 | * $8: current. | 363 | * $8: current. |
| 364 | * $19: The old syscall number, or zero if this is not a return | 364 | * $19: The old syscall number, or zero if this is not a return |
| 365 | * from a syscall that errored and is possibly restartable. | 365 | * from a syscall that errored and is possibly restartable. |
| 366 | * $20: Error indication. | 366 | * $20: The old a3 value |
| 367 | */ | 367 | */ |
| 368 | 368 | ||
| 369 | .align 4 | 369 | .align 4 |
| @@ -392,12 +392,18 @@ $work_resched: | |||
| 392 | 392 | ||
| 393 | $work_notifysig: | 393 | $work_notifysig: |
| 394 | mov $sp, $16 | 394 | mov $sp, $16 |
| 395 | br $1, do_switch_stack | 395 | bsr $1, do_switch_stack |
| 396 | mov $sp, $17 | 396 | mov $sp, $17 |
| 397 | mov $5, $18 | 397 | mov $5, $18 |
| 398 | mov $19, $9 /* save old syscall number */ | ||
| 399 | mov $20, $10 /* save old a3 */ | ||
| 400 | and $5, _TIF_SIGPENDING, $2 | ||
| 401 | cmovne $2, 0, $9 /* we don't want double syscall restarts */ | ||
| 398 | jsr $26, do_notify_resume | 402 | jsr $26, do_notify_resume |
| 403 | mov $9, $19 | ||
| 404 | mov $10, $20 | ||
| 399 | bsr $1, undo_switch_stack | 405 | bsr $1, undo_switch_stack |
| 400 | br restore_all | 406 | br ret_to_user |
| 401 | .end work_pending | 407 | .end work_pending |
| 402 | 408 | ||
| 403 | /* | 409 | /* |
| @@ -430,6 +436,7 @@ strace: | |||
| 430 | beq $1, 1f | 436 | beq $1, 1f |
| 431 | ldq $27, 0($2) | 437 | ldq $27, 0($2) |
| 432 | 1: jsr $26, ($27), sys_gettimeofday | 438 | 1: jsr $26, ($27), sys_gettimeofday |
| 439 | ret_from_straced: | ||
| 433 | ldgp $gp, 0($26) | 440 | ldgp $gp, 0($26) |
| 434 | 441 | ||
| 435 | /* check return.. */ | 442 | /* check return.. */ |
| @@ -757,11 +764,15 @@ sys_vfork: | |||
| 757 | .ent sys_sigreturn | 764 | .ent sys_sigreturn |
| 758 | sys_sigreturn: | 765 | sys_sigreturn: |
| 759 | .prologue 0 | 766 | .prologue 0 |
| 767 | lda $9, ret_from_straced | ||
| 768 | cmpult $26, $9, $9 | ||
| 760 | mov $sp, $17 | 769 | mov $sp, $17 |
| 761 | lda $18, -SWITCH_STACK_SIZE($sp) | 770 | lda $18, -SWITCH_STACK_SIZE($sp) |
| 762 | lda $sp, -SWITCH_STACK_SIZE($sp) | 771 | lda $sp, -SWITCH_STACK_SIZE($sp) |
| 763 | jsr $26, do_sigreturn | 772 | jsr $26, do_sigreturn |
| 764 | br $1, undo_switch_stack | 773 | bne $9, 1f |
| 774 | jsr $26, syscall_trace | ||
| 775 | 1: br $1, undo_switch_stack | ||
| 765 | br ret_from_sys_call | 776 | br ret_from_sys_call |
| 766 | .end sys_sigreturn | 777 | .end sys_sigreturn |
| 767 | 778 | ||
| @@ -770,47 +781,19 @@ sys_sigreturn: | |||
| 770 | .ent sys_rt_sigreturn | 781 | .ent sys_rt_sigreturn |
| 771 | sys_rt_sigreturn: | 782 | sys_rt_sigreturn: |
| 772 | .prologue 0 | 783 | .prologue 0 |
| 784 | lda $9, ret_from_straced | ||
| 785 | cmpult $26, $9, $9 | ||
| 773 | mov $sp, $17 | 786 | mov $sp, $17 |
| 774 | lda $18, -SWITCH_STACK_SIZE($sp) | 787 | lda $18, -SWITCH_STACK_SIZE($sp) |
| 775 | lda $sp, -SWITCH_STACK_SIZE($sp) | 788 | lda $sp, -SWITCH_STACK_SIZE($sp) |
| 776 | jsr $26, do_rt_sigreturn | 789 | jsr $26, do_rt_sigreturn |
| 777 | br $1, undo_switch_stack | 790 | bne $9, 1f |
| 791 | jsr $26, syscall_trace | ||
| 792 | 1: br $1, undo_switch_stack | ||
| 778 | br ret_from_sys_call | 793 | br ret_from_sys_call |
| 779 | .end sys_rt_sigreturn | 794 | .end sys_rt_sigreturn |
| 780 | 795 | ||
| 781 | .align 4 | 796 | .align 4 |
| 782 | .globl sys_sigsuspend | ||
| 783 | .ent sys_sigsuspend | ||
| 784 | sys_sigsuspend: | ||
| 785 | .prologue 0 | ||
| 786 | mov $sp, $17 | ||
| 787 | br $1, do_switch_stack | ||
| 788 | mov $sp, $18 | ||
| 789 | subq $sp, 16, $sp | ||
| 790 | stq $26, 0($sp) | ||
| 791 | jsr $26, do_sigsuspend | ||
| 792 | ldq $26, 0($sp) | ||
| 793 | lda $sp, SWITCH_STACK_SIZE+16($sp) | ||
| 794 | ret | ||
| 795 | .end sys_sigsuspend | ||
| 796 | |||
