diff options
| author | Kumar Gala <galak@kernel.crashing.org> | 2011-05-19 01:36:21 -0400 |
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2011-05-19 01:36:21 -0400 |
| commit | 134c428e5a31f2d5ed3a70ba20dac83895ec8b82 (patch) | |
| tree | 0fb28accbf09171b8a1ca792361f4160434529e8 /arch/powerpc/kernel | |
| parent | a0496d450ab8c17f6c4d86979b1f6ba486fe9365 (diff) | |
| parent | c560bbceaf6b06e52f1ef20131b76a3fdc0a2c19 (diff) | |
Merge remote branch 'benh/merge' into benh-next
Diffstat (limited to 'arch/powerpc/kernel')
| -rw-r--r-- | arch/powerpc/kernel/head_32.S | 9 | ||||
| -rw-r--r-- | arch/powerpc/kernel/misc_32.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/kernel/ptrace.c | 12 | ||||
| -rw-r--r-- | arch/powerpc/kernel/smp.c | 4 |
4 files changed, 24 insertions, 12 deletions
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index c5c24beb838..98c4b29a56f 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
| @@ -890,15 +890,6 @@ __secondary_start: | |||
| 890 | mtspr SPRN_SRR1,r4 | 890 | mtspr SPRN_SRR1,r4 |
| 891 | SYNC | 891 | SYNC |
| 892 | RFI | 892 | RFI |
| 893 | |||
| 894 | _GLOBAL(start_secondary_resume) | ||
| 895 | /* Reset stack */ | ||
| 896 | rlwinm r1,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | ||
| 897 | addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD | ||
| 898 | li r3,0 | ||
| 899 | std r3,0(r1) /* Zero the stack frame pointer */ | ||
| 900 | bl start_secondary | ||
| 901 | b . | ||
| 902 | #endif /* CONFIG_SMP */ | 893 | #endif /* CONFIG_SMP */ |
| 903 | 894 | ||
| 904 | #ifdef CONFIG_KVM_BOOK3S_HANDLER | 895 | #ifdef CONFIG_KVM_BOOK3S_HANDLER |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 094bd9821ad..402560e957b 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
| @@ -694,6 +694,17 @@ _GLOBAL(kernel_thread) | |||
| 694 | addi r1,r1,16 | 694 | addi r1,r1,16 |
| 695 | blr | 695 | blr |
| 696 | 696 | ||
| 697 | #ifdef CONFIG_SMP | ||
| 698 | _GLOBAL(start_secondary_resume) | ||
| 699 | /* Reset stack */ | ||
| 700 | rlwinm r1,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | ||
| 701 | addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD | ||
| 702 | li r3,0 | ||
| 703 | std r3,0(r1) /* Zero the stack frame pointer */ | ||
| 704 | bl start_secondary | ||
| 705 | b . | ||
| 706 | #endif /* CONFIG_SMP */ | ||
| 707 | |||
| 697 | /* | 708 | /* |
| 698 | * This routine is just here to keep GCC happy - sigh... | 709 | * This routine is just here to keep GCC happy - sigh... |
| 699 | */ | 710 | */ |
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 55613e33e26..a6ae1cfad86 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
| @@ -933,12 +933,16 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, | |||
| 933 | if (data && !(data & DABR_TRANSLATION)) | 933 | if (data && !(data & DABR_TRANSLATION)) |
| 934 | return -EIO; | 934 | return -EIO; |
| 935 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | 935 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
| 936 | if (ptrace_get_breakpoints(task) < 0) | ||
| 937 | return -ESRCH; | ||
| 938 | |||
| 936 | bp = thread->ptrace_bps[0]; | 939 | bp = thread->ptrace_bps[0]; |
| 937 | if ((!data) || !(data & (DABR_DATA_WRITE | DABR_DATA_READ))) { | 940 | if ((!data) || !(data & (DABR_DATA_WRITE | DABR_DATA_READ))) { |
| 938 | if (bp) { | 941 | if (bp) { |
| 939 | unregister_hw_breakpoint(bp); | 942 | unregister_hw_breakpoint(bp); |
| 940 | thread->ptrace_bps[0] = NULL; | 943 | thread->ptrace_bps[0] = NULL; |
| 941 | } | 944 | } |
| 945 | ptrace_put_breakpoints(task); | ||
| 942 | return 0; | 946 | return 0; |
| 943 | } | 947 | } |
| 944 | if (bp) { | 948 | if (bp) { |
| @@ -948,9 +952,12 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, | |||
| 948 | (DABR_DATA_WRITE | DABR_DATA_READ), | 952 | (DABR_DATA_WRITE | DABR_DATA_READ), |
| 949 | &attr.bp_type); | 953 | &attr.bp_type); |
| 950 | ret = modify_user_hw_breakpoint(bp, &attr); | 954 | ret = modify_user_hw_breakpoint(bp, &attr); |
| 951 | if (ret) | 955 | if (ret) { |
| 956 | ptrace_put_breakpoints(task); | ||
| 952 | return ret; | 957 | return ret; |
| 958 | } | ||
| 953 | thread->ptrace_bps[0] = bp; | 959 | thread->ptrace_bps[0] = bp; |
| 960 | ptrace_put_breakpoints(task); | ||
| 954 | thread->dabr = data; | 961 | thread->dabr = data; |
| 955 | return 0; | 962 | return 0; |
| 956 | } | 963 | } |
| @@ -965,9 +972,12 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, | |||
| 965 | ptrace_triggered, task); | 972 | ptrace_triggered, task); |
| 966 | if (IS_ERR(bp)) { | 973 | if (IS_ERR(bp)) { |
| 967 | thread->ptrace_bps[0] = NULL; | 974 | thread->ptrace_bps[0] = NULL; |
| 975 | ptrace_put_breakpoints(task); | ||
| 968 | return PTR_ERR(bp); | 976 | return PTR_ERR(bp); |
| 969 | } | 977 | } |
| 970 | 978 | ||
| 979 | ptrace_put_breakpoints(task); | ||
| 980 | |||
| 971 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | 981 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ |
| 972 | 982 | ||
| 973 | /* Move contents to the DABR register */ | 983 | /* Move contents to the DABR register */ |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 87517ab6d36..0eefccd3316 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -412,8 +412,6 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
| 412 | { | 412 | { |
| 413 | int rc, c; | 413 | int rc, c; |
| 414 | 414 | ||
| 415 | secondary_ti = current_set[cpu]; | ||
| 416 | |||
| 417 | if (smp_ops == NULL || | 415 | if (smp_ops == NULL || |
| 418 | (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu))) | 416 | (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu))) |
| 419 | return -EINVAL; | 417 | return -EINVAL; |
| @@ -423,6 +421,8 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
| 423 | if (rc) | 421 | if (rc) |
| 424 | return rc; | 422 | return rc; |
| 425 | 423 | ||
| 424 | secondary_ti = current_set[cpu]; | ||
| 425 | |||
| 426 | /* Make sure callin-map entry is 0 (can be leftover a CPU | 426 | /* Make sure callin-map entry is 0 (can be leftover a CPU |
| 427 | * hotplug | 427 | * hotplug |
| 428 | */ | 428 | */ |
