android_kernel_oneplus_msm8998/arch/mips/kernel
Matt Redfearn 8bd7216d33 MIPS: IRQ Stack: Unwind IRQ stack onto task stack
[ Upstream commit db8466c581cca1a08b505f1319c3ecd246f16fa8 ]

When the separate IRQ stack was introduced, stack unwinding only
proceeded as far as the top of the IRQ stack, leading to kernel
backtraces being less useful, lacking the trace of what was interrupted.

Fix this by providing a means for the kernel to unwind the IRQ stack
onto the interrupted task stack. The processor state is saved to the
kernel task stack on interrupt. The IRQ_STACK_START macro reserves an
unsigned long at the top of the IRQ stack where the interrupted task
stack pointer can be saved. After the active stack is switched to the
IRQ stack, save the interrupted tasks stack pointer to the reserved
location.

Fix the stack unwinding code to look for the frame being the top of the
IRQ stack and if so get the next frame from the saved location. The
existing test does not work with the separate stack since the ra is no
longer pointed at ret_from_{irq,exception}.

The test to stop unwinding the stack 32 bytes from the top of a stack
must be modified to allow unwinding to continue up to the location of
the saved task stack pointer when on the IRQ stack. The low / high marks
of the stack are set depending on whether the sp is on an irq stack or
not.

Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: Masanari Iida <standby24x7@gmail.com>
Cc: Chris Metcalf <cmetcalf@mellanox.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jason A. Donenfeld <jason@zx2c4.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/15788/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-10-08 10:14:19 +02:00
..
.gitignore
8250-platform.c
asm-offsets.c MIPS: IRQ Stack: Unwind IRQ stack onto task stack 2017-10-08 10:14:19 +02:00
binfmt_elfn32.c
binfmt_elfo32.c MIPS: Remove old core dump functions 2014-08-02 00:06:37 +02:00
bmips_vec.S MIPS: BMIPS: Fix ".previous without corresponding .section" warnings 2014-11-24 07:44:05 +01:00
branch.c MIPS: Fix a typo: s/preset/present/ in r2-to-r6 emulation error message 2017-07-27 15:06:08 -07:00
cevt-bcm1480.c MIPS: cevt-bcm1480: Migrate to new 'set-state' interface 2015-09-03 12:07:51 +02:00
cevt-ds1287.c MIPS: cevt-ds1287: Migrate to new 'set-state' interface 2015-09-03 12:07:51 +02:00
cevt-gt641xx.c MIPS: cevt-gt641xx: Migrate to new 'set-state' interface 2015-09-03 12:07:51 +02:00
cevt-r4k.c MIPS: cevt-r4k: Migrate to new 'set-state' interface 2015-09-03 12:07:52 +02:00
cevt-sb1250.c MIPS: cevt-sb1250: Migrate to new 'set-state' interface 2015-09-03 12:07:52 +02:00
cevt-txx9.c MIPS: cevt-txx9: Migrate to new 'set-state' interface 2015-09-03 12:07:53 +02:00
cps-vec-ns16550.S MIPS: CPS: Early debug using an ns16550-compatible UART 2015-11-11 08:34:25 +01:00
cps-vec.S MIPS: CPS: drop .set mips64r2 directives 2015-12-22 12:16:32 +01:00
cpu-bugs64.c MIPS: kernel: cpu-bugs64: Do not check R6 cores for existing 64-bit bugs 2015-02-17 15:37:24 +00:00
cpu-probe.c MIPS: Extend hardware table walking support to MIPS64 2015-11-11 08:35:54 +01:00
crash.c MIPS: Fix crash registers on non-crashing CPUs 2017-05-02 21:19:49 -07:00
crash_dump.c mips: Convert pr_warning to pr_warn 2014-11-24 07:44:51 +01:00
csrc-bcm1480.c MIPS: csrc-bcm1480: Implement read_sched_clock 2015-04-01 17:21:27 +02:00
csrc-ioasic.c MIPS: csrc-ioasic: Implement read_sched_clock 2015-04-01 17:21:28 +02:00
csrc-r4k.c MIPS: Don't register r4k sched clock when CPUFREQ enabled 2016-08-20 18:09:26 +02:00
csrc-sb1250.c MIPS: csrc-sb1250: Implement read_sched_clock 2015-04-01 17:21:33 +02:00
early_printk.c
early_printk_8250.c
elf.c MIPS: Avoid BUG warning in arch_check_elf 2017-05-02 21:19:55 -07:00
entry.S MIPS: Fix IRQ tracing & lockdep when rescheduling 2017-07-05 14:37:15 +02:00
ftrace.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-08-07 08:47:00 -07:00
genex.S MIPS: IRQ Stack: Unwind IRQ stack onto task stack 2017-10-08 10:14:19 +02:00
gpio_txx9.c
head.S MIPS: Add support for vmlinux.bin appended dtb 2015-06-21 21:54:14 +02:00
i8253.c
idle.c Merge branch '4.3-fixes' into mips-for-linux-next 2015-11-12 11:36:03 +01:00
irq-gt641xx.c
irq-msc01.c
irq-rm7000.c
irq.c MIPS: Introduce irq_stack 2017-04-18 07:14:35 +02:00
irq_txx9.c
jump_label.c jump_label: Rename JUMP_LABEL_{EN,DIS}ABLE to JUMP_LABEL_{JMP,NOP} 2015-08-03 11:34:12 +02:00
kgdb.c MIPS: KGDB: Use kernel context for sleeping threads 2017-05-02 21:19:55 -07:00
kprobes.c mips: Replace __get_cpu_var uses 2014-08-26 13:45:51 -04:00
linux32.c
machine_kexec.c MIPS: kdump: Set correct value to kexec_indirection_page variable 2014-08-25 16:33:44 +02:00
Makefile MIPS: CPS: Early debug using an ns16550-compatible UART 2015-11-11 08:34:25 +01:00
mcount.S MIPS: mcount: Adjust stack pointer for static trace in MIPS32 2014-09-26 11:41:17 +02:00
mips-cm.c MIPS: CM, CPC: Ensure core-other GCRs reflect the correct core 2015-11-11 08:35:18 +01:00
mips-cpc.c MIPS: CM, CPC: Ensure core-other GCRs reflect the correct core 2015-11-11 08:35:18 +01:00
mips-mt-fpaff.c MIPS: Fix sched_getaffinity with MT FPAFF enabled 2015-08-03 09:25:02 +02:00
mips-mt.c
mips-r2-to-r6-emul.c MIPS: R2-on-R6 MULTU/MADDU/MSUBU emulation bugfix 2017-05-14 13:32:57 +02:00
mips_ksyms.c MIPS: uaccess: Take EVA into account in [__]clear_user 2015-12-22 11:58:43 +01:00
mips_machine.c
module-rela.c
module.c mm: vmalloc: pass additional vm_flags to __vmalloc_node_range() 2015-02-13 21:21:42 -08:00
octeon_switch.S MIPS: Fix octeon FP context switch handling 2015-10-02 19:16:06 +02:00
perf_event.c
perf_event_mipsxx.c MIPS: Add cases for CPU_I6400 2015-08-26 15:23:03 +02:00
pm-cps.c MIPS: pm-cps: Drop manual cache-line alignment of ready_count 2017-07-05 14:37:15 +02:00
pm.c MIPS: Fix watchpoint restoration 2016-06-07 18:14:30 -07:00
proc.c MIPS: Fix MIPS I ISA /proc/cpuinfo reporting 2017-07-27 15:06:07 -07:00
process.c MIPS: IRQ Stack: Unwind IRQ stack onto task stack 2017-10-08 10:14:19 +02:00
prom.c MIPS: Fix build with CONFIG_OF=y for non OF-enabled targets 2015-08-03 09:25:00 +02:00
ptrace.c MIPS: Negate error syscall return in trace 2017-07-27 15:06:07 -07:00
ptrace32.c MIPS: Remove asm/user.h 2014-08-02 00:06:37 +02:00
r4k_fpu.S MIPS: Use copy_s.fmt rather than copy_u.fmt 2016-06-07 18:14:31 -07:00
r4k_switch.S MIPS: Tidy up FPU context switching 2015-09-03 12:08:05 +02:00
r2300_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
r2300_switch.S MIPS: Fix R2300 FP context switch handling 2015-10-02 19:16:46 +02:00
r6000_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
relocate_kernel.S MIPS: Replace add and sub instructions in relocate_kernel.S with addiu 2015-08-03 15:26:30 +02:00
reset.c MIPS: Provide fallback reboot/poweroff/halt implementations 2015-04-01 17:21:58 +02:00
rtlx-cmp.c
rtlx-mt.c
rtlx.c MIPS: rtlx: Remove KERN_DEBUG from pr_debug() arguments in rtlx.c 2014-11-24 07:44:04 +01:00
scall32-o32.S MIPS: Save static registers before sysmips 2017-07-27 15:06:07 -07:00
scall64-64.S MIPS: Save static registers before sysmips 2017-07-27 15:06:07 -07:00
scall64-n32.S MIPS: Save static registers before sysmips 2017-07-27 15:06:07 -07:00
scall64-o32.S MIPS: Save static registers before sysmips 2017-07-27 15:06:07 -07:00
segment.c MIPS: Declare mips_debugfs_dir in a header 2015-10-26 09:49:42 +01:00
setup.c MIPS: Reserve nosave data for hibernation 2016-06-07 18:14:31 -07:00
signal-common.h MIPS: Save MSA extended context around signals 2015-09-03 12:07:59 +02:00
signal.c MIPS: Fix sigreturn via VDSO on microMIPS kernel 2016-06-07 18:14:31 -07:00
signal32.c MIPS: Initial implementation of a VDSO 2015-11-11 08:36:36 +01:00
signal_n32.c MIPS: Initial implementation of a VDSO 2015-11-11 08:36:36 +01:00
smp-bmips.c MIPS: SMP: Don't increment irq_count multiple times for call function IPIs 2015-08-03 09:25:12 +02:00
smp-cmp.c mips: fix up obsolete cpu function usage. 2015-03-05 15:25:06 +10:30
smp-cps.c MIPS: CM: make use of mips_cm_{lock,unlock}_other 2015-11-11 08:35:17 +01:00
smp-gic.c MIPS: CM: make use of mips_cm_{lock,unlock}_other 2015-11-11 08:35:17 +01:00
smp-mt.c mips: fix up obsolete cpu function usage. 2015-03-05 15:25:06 +10:30
smp-up.c
smp.c MIPS: SMP: Fix possibility of deadlock when bringing CPUs online 2016-09-30 10:18:38 +02:00
spinlock_test.c MIPS: Declare mips_debugfs_dir in a header 2015-10-26 09:49:42 +01:00
spram.c MIPS: Add cases for CPU_I6400 2015-08-26 15:23:03 +02:00
stacktrace.c MIPS: Add LATENCYTOP support 2015-11-11 08:36:46 +01:00
sync-r4k.c
syscall.c MIPS: Save static registers before sysmips 2017-07-27 15:06:07 -07:00
sysrq.c MIPS: Refactor dumping of TLB registers for r3k/r4k 2015-09-03 12:07:45 +02:00
time.c
topology.c
traps.c MIPS: Avoid accidental raw backtrace 2017-07-05 14:37:15 +02:00
unaligned.c MIPS: Fix MSA ld unaligned failure cases 2016-04-20 15:42:08 +09:00
uprobes.c MIPS: uprobes: fix use of uninitialised variable 2016-10-07 15:23:43 +02:00
vdso.c MIPS: vDSO: Fix Malta EVA mapping to vDSO page structs 2016-09-30 10:18:38 +02:00
vmlinux.lds.S MIPS: Ensure bss section ends on a long-aligned address 2017-10-08 10:14:16 +02:00
vpe-cmp.c
vpe-mt.c
vpe.c MIPS: MT: Remove "weak" from vpe_run() declaration 2015-08-26 15:23:40 +02:00
watch.c MIPS: Fix watchpoint restoration 2016-06-07 18:14:30 -07:00