diff options
author | Todd Poynor <toddpoynor@google.com> | 2013-04-05 13:56:44 -0700 |
---|---|---|
committer | Todd Poynor <toddpoynor@google.com> | 2013-04-05 13:56:44 -0700 |
commit | 12b868488bc5abfb5fc0910aa34b32d6209073df (patch) | |
tree | 5d37b78d71a0070a73fa8bcead7dce040119f554 /arch/arm | |
parent | 0bb6ee4f4587d219cfbb328e8a14f608405b52b9 (diff) | |
parent | ae7859181482fcfe38d9352bd0932fa45456bdd0 (diff) | |
download | kernel_samsung_tuna-12b868488bc5abfb5fc0910aa34b32d6209073df.zip kernel_samsung_tuna-12b868488bc5abfb5fc0910aa34b32d6209073df.tar.gz kernel_samsung_tuna-12b868488bc5abfb5fc0910aa34b32d6209073df.tar.bz2 |
Merge tag 'v3.0.72' into android-3.0
This is the 3.0.72 stable release
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/include/asm/signal.h | 1 | ||||
-rw-r--r-- | arch/arm/mm/alignment.c | 11 | ||||
-rw-r--r-- | arch/arm/vfp/vfpmodule.c | 2 |
3 files changed, 6 insertions, 8 deletions
diff --git a/arch/arm/include/asm/signal.h b/arch/arm/include/asm/signal.h index 43ba0fb..559ee24 100644 --- a/arch/arm/include/asm/signal.h +++ b/arch/arm/include/asm/signal.h @@ -127,6 +127,7 @@ struct sigaction { __sigrestore_t sa_restorer; sigset_t sa_mask; /* mask last for extensibility */ }; +#define __ARCH_HAS_SA_RESTORER struct k_sigaction { struct sigaction sa; diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index 724ba3b..1aa3a70 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c @@ -721,7 +721,6 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) unsigned long instr = 0, instrptr; int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs); unsigned int type; - mm_segment_t fs; unsigned int fault; u16 tinstr = 0; int isize = 4; @@ -729,16 +728,15 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) instrptr = instruction_pointer(regs); - fs = get_fs(); - set_fs(KERNEL_DS); if (thumb_mode(regs)) { - fault = __get_user(tinstr, (u16 *)(instrptr & ~1)); + u16 *ptr = (u16 *)(instrptr & ~1); + fault = probe_kernel_address(ptr, tinstr); if (!fault) { if (cpu_architecture() >= CPU_ARCH_ARMv7 && IS_T32(tinstr)) { /* Thumb-2 32-bit */ u16 tinst2 = 0; - fault = __get_user(tinst2, (u16 *)(instrptr+2)); + fault = probe_kernel_address(ptr + 1, tinst2); instr = (tinstr << 16) | tinst2; thumb2_32b = 1; } else { @@ -747,8 +745,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) } } } else - fault = __get_user(instr, (u32 *)instrptr); - set_fs(fs); + fault = probe_kernel_address(instrptr, instr); if (fault) { type = TYPE_FAULT; diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index 192e9dd..5d28ab7 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -375,7 +375,7 @@ void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) * If there isn't a second FP instruction, exit now. Note that * the FPEXC.FP2V bit is valid only if FPEXC.EX is 1. */ - if (fpexc ^ (FPEXC_EX | FPEXC_FP2V)) + if ((fpexc & (FPEXC_EX | FPEXC_FP2V)) != (FPEXC_EX | FPEXC_FP2V)) goto exit; /* |