aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/mm/fault.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-06-24 13:02:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-06-24 13:02:15 -0400
commite3d8238d7f5c3f539a29f5ac596cd342d847e099 (patch)
treef545e6064155d0e943dcfbfabb3de60530a8e5de /arch/arm64/mm/fault.c
parent4e241557fc1cb560bd9e77ca1b4a9352732a5427 (diff)
parent86dca36e6ba019650a94cadf922ea3d06dec0182 (diff)
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 updates from Catalin Marinas: "Mostly refactoring/clean-up: - CPU ops and PSCI (Power State Coordination Interface) refactoring following the merging of the arm64 ACPI support, together with handling of Trusted (secure) OS instances - Using fixmap for permanent FDT mapping, removing the initial dtb placement requirements (within 512MB from the start of the kernel image). This required moving the FDT self reservation out of the memreserve processing - Idmap (1:1 mapping used for MMU on/off) handling clean-up - Removing flush_cache_all() - not safe on ARM unless the MMU is off. Last stages of CPU power down/up are handled by firmware already - "Alternatives" (run-time code patching) refactoring and support for immediate branch patching, GICv3 CPU interface access - User faults handling clean-up And some fixes: - Fix for VDSO building with broken ELF toolchains - Fix another case of init_mm.pgd usage for user mappings (during ASID roll-over broadcasting) - Fix for FPSIMD reloading after CPU hotplug - Fix for missing syscall trace exit - Workaround for .inst asm bug - Compat fix for switching the user tls tpidr_el0 register" * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (42 commits) arm64: use private ratelimit state along with show_unhandled_signals arm64: show unhandled SP/PC alignment faults arm64: vdso: work-around broken ELF toolchains in Makefile arm64: kernel: rename __cpu_suspend to keep it aligned with arm arm64: compat: print compat_sp instead of sp arm64: mm: Fix freeing of the wrong memmap entries with !SPARSEMEM_VMEMMAP arm64: entry: fix context tracking for el0_sp_pc arm64: defconfig: enable memtest arm64: mm: remove reference to tlb.S from comment block arm64: Do not attempt to use init_mm in reset_context() arm64: KVM: Switch vgic save/restore to alternative_insn arm64: alternative: Introduce feature for GICv3 CPU interface arm64: psci: fix !CONFIG_HOTPLUG_CPU build warning arm64: fix bug for reloading FPSIMD state after CPU hotplug. arm64: kernel thread don't need to save fpsimd context. arm64: fix missing syscall trace exit arm64: alternative: Work around .inst assembler bugs arm64: alternative: Merge alternative-asm.h into alternative.h arm64: alternative: Allow immediate branch as alternative instruction arm64: Rework alternate sequence for ARM erratum 845719 ...
Diffstat (limited to 'arch/arm64/mm/fault.c')
-rw-r--r--arch/arm64/mm/fault.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 0948d327d013..b1fc69cd1499 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -115,8 +115,7 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
115{ 115{
116 struct siginfo si; 116 struct siginfo si;
117 117
118 if (show_unhandled_signals && unhandled_signal(tsk, sig) && 118 if (show_unhandled_signals_ratelimited() && unhandled_signal(tsk, sig)) {
119 printk_ratelimit()) {
120 pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n", 119 pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
121 tsk->comm, task_pid_nr(tsk), fault_name(esr), sig, 120 tsk->comm, task_pid_nr(tsk), fault_name(esr), sig,
122 addr, esr); 121 addr, esr);
@@ -478,12 +477,19 @@ asmlinkage void __exception do_sp_pc_abort(unsigned long addr,
478 struct pt_regs *regs) 477 struct pt_regs *regs)
479{ 478{
480 struct siginfo info; 479 struct siginfo info;
480 struct task_struct *tsk = current;
481
482 if (show_unhandled_signals && unhandled_signal(tsk, SIGBUS))
483 pr_info_ratelimited("%s[%d]: %s exception: pc=%p sp=%p\n",
484 tsk->comm, task_pid_nr(tsk),
485 esr_get_class_string(esr), (void *)regs->pc,
486 (void *)regs->sp);
481 487
482 info.si_signo = SIGBUS; 488 info.si_signo = SIGBUS;
483 info.si_errno = 0; 489 info.si_errno = 0;
484 info.si_code = BUS_ADRALN; 490 info.si_code = BUS_ADRALN;
485 info.si_addr = (void __user *)addr; 491 info.si_addr = (void __user *)addr;
486 arm64_notify_die("", regs, &info, esr); 492 arm64_notify_die("Oops - SP/PC alignment exception", regs, &info, esr);
487} 493}
488 494
489static struct fault_info debug_fault_info[] = { 495static struct fault_info debug_fault_info[] = {