diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-03-04 14:12:08 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-03-04 14:12:08 +0300 |
commit | bc94b99636dc7bcccce439a9fb9c00065e2e2627 (patch) | |
tree | bddbd29a5fd7b2d270d039efc1d6858791a2c98f /arch/arm64/kernel/traps.c | |
parent | 4650bac1fc45d64aef62ab99aa4db93d41dedbd9 (diff) | |
parent | fc77dbd34c5c99bce46d40a2491937c3bcbd10af (diff) | |
download | linux-bc94b99636dc7bcccce439a9fb9c00065e2e2627.tar.xz |
Merge tag 'v4.5-rc6' into core/resources, to resolve conflict
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/arm64/kernel/traps.c')
-rw-r--r-- | arch/arm64/kernel/traps.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index cbedd724f48e..c5392081b49b 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -146,9 +146,18 @@ static void dump_instr(const char *lvl, struct pt_regs *regs) static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) { struct stackframe frame; - unsigned long irq_stack_ptr = IRQ_STACK_PTR(smp_processor_id()); + unsigned long irq_stack_ptr; int skip; + /* + * Switching between stacks is valid when tracing current and in + * non-preemptible context. + */ + if (tsk == current && !preemptible()) + irq_stack_ptr = IRQ_STACK_PTR(smp_processor_id()); + else + irq_stack_ptr = 0; + pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); if (!tsk) |