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
This commit is contained in:
commit
73c8e679aa
|
@ -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:
|
||||||
|
|
||||||
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:
|
||||||
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 @@
|
||||||
|
|
||||||
#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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK)
|
if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK)
|
||||||
oldset = ¤t->saved_sigmask;
|
oldset = ¤t->saved_sigmask;
|
||||||
else if (!oldset)
|
else
|
||||||
oldset = ¤t->blocked;
|
oldset = ¤t->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)
|
||||||
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 @@
|
||||||
|
|
||||||
#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)
|
||||||
|
|
||||||
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 = {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue