Commit 73c8e679 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc

BenH says:
 'Here are a few more powerpc bits for you.  A stupid regression I
  introduced with my previous commit to "fix" program check exceptions
  (brown paper bag for me), fix the cpuidle default, a bug fix for
  something that isn't strictly speaking a regression but some upstream
  changes causes it to show in lockdep now while it didn't before, and
  finally a trivial one for rusty to make his life easier later on
  removing the old cpumask cruft. '

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  powerpc: Fix various issues with return to userspace
  cpuidle: Default y on powerpc pSeries
  powerpc: Fix program check handling when lockdep is enabled
  powerpc: Remove references to cpu_*_map
parents 0200971d 18b246fa
...@@ -1213,7 +1213,7 @@ do_user_signal: /* r10 contains MSR_KERNEL here */ ...@@ -1213,7 +1213,7 @@ do_user_signal: /* r10 contains MSR_KERNEL here */
stw r3,_TRAP(r1) stw r3,_TRAP(r1)
2: addi r3,r1,STACK_FRAME_OVERHEAD 2: addi r3,r1,STACK_FRAME_OVERHEAD
mr r4,r9 mr r4,r9
bl do_signal bl do_notify_resume
REST_NVGPRS(r1) REST_NVGPRS(r1)
b recheck b recheck
......
...@@ -751,12 +751,16 @@ user_work: ...@@ -751,12 +751,16 @@ user_work:
andi. r0,r4,_TIF_NEED_RESCHED andi. r0,r4,_TIF_NEED_RESCHED
beq 1f beq 1f
li r5,1
TRACE_AND_RESTORE_IRQ(r5);
bl .schedule bl .schedule
b .ret_from_except_lite b .ret_from_except_lite
1: bl .save_nvgprs 1: bl .save_nvgprs
li r5,1
TRACE_AND_RESTORE_IRQ(r5);
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
bl .do_signal bl .do_notify_resume
b .ret_from_except b .ret_from_except
unrecov_restore: unrecov_restore:
......
...@@ -774,8 +774,8 @@ alignment_common: ...@@ -774,8 +774,8 @@ alignment_common:
program_check_common: program_check_common:
EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN)
bl .save_nvgprs bl .save_nvgprs
addi r3,r1,STACK_FRAME_OVERHEAD
DISABLE_INTS DISABLE_INTS
addi r3,r1,STACK_FRAME_OVERHEAD
bl .program_check_exception bl .program_check_exception
b .ret_from_except b .ret_from_except
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/tracehook.h> #include <linux/tracehook.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/key.h>
#include <asm/hw_breakpoint.h> #include <asm/hw_breakpoint.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/unistd.h> #include <asm/unistd.h>
...@@ -113,8 +114,9 @@ static void check_syscall_restart(struct pt_regs *regs, struct k_sigaction *ka, ...@@ -113,8 +114,9 @@ static void check_syscall_restart(struct pt_regs *regs, struct k_sigaction *ka,
} }
} }
static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs) static int do_signal(struct pt_regs *regs)
{ {
sigset_t *oldset;
siginfo_t info; siginfo_t info;
int signr; int signr;
struct k_sigaction ka; struct k_sigaction ka;
...@@ -123,7 +125,7 @@ static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs) ...@@ -123,7 +125,7 @@ static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs)
if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK) if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK)
oldset = &current->saved_sigmask; oldset = &current->saved_sigmask;
else if (!oldset) else
oldset = &current->blocked; oldset = &current->blocked;
signr = get_signal_to_deliver(&info, &ka, regs, NULL); signr = get_signal_to_deliver(&info, &ka, regs, NULL);
...@@ -191,14 +193,16 @@ static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs) ...@@ -191,14 +193,16 @@ static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs)
return ret; return ret;
} }
void do_signal(struct pt_regs *regs, unsigned long thread_info_flags) void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
{ {
if (thread_info_flags & _TIF_SIGPENDING) if (thread_info_flags & _TIF_SIGPENDING)
do_signal_pending(NULL, regs); do_signal(regs);
if (thread_info_flags & _TIF_NOTIFY_RESUME) { if (thread_info_flags & _TIF_NOTIFY_RESUME) {
clear_thread_flag(TIF_NOTIFY_RESUME); clear_thread_flag(TIF_NOTIFY_RESUME);
tracehook_notify_resume(regs); tracehook_notify_resume(regs);
if (current->replacement_session_keyring)
key_replace_session_keyring();
} }
} }
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
extern void do_signal(struct pt_regs *regs, unsigned long thread_info_flags); extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags);
extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
size_t frame_size, int is_32); size_t frame_size, int is_32);
......
...@@ -71,7 +71,7 @@ int __devinit smp_a2_kick_cpu(int nr) ...@@ -71,7 +71,7 @@ int __devinit smp_a2_kick_cpu(int nr)
static int __init smp_a2_probe(void) static int __init smp_a2_probe(void)
{ {
return cpus_weight(cpu_possible_map); return num_possible_cpus();
} }
static struct smp_ops_t a2_smp_ops = { static struct smp_ops_t a2_smp_ops = {
......
config CPU_IDLE config CPU_IDLE
bool "CPU idle PM support" bool "CPU idle PM support"
default ACPI default y if ACPI || PPC_PSERIES
help help
CPU idle is a generic framework for supporting software-controlled CPU idle is a generic framework for supporting software-controlled
idle processor power management. It includes modular cross-platform idle processor power management. It includes modular cross-platform
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment