Commit d90b88fd authored by Max Filippov's avatar Max Filippov

xtensa: fix get_wchan

Stack unwinding is implemented incorrectly in xtensa get_wchan: instead
of extracting a0 and a1 registers from the spill location under the
stack pointer it extracts a word pointed to by the stack pointer and
subtracts 4 or 3 from it.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent 579afe86
...@@ -321,8 +321,8 @@ unsigned long get_wchan(struct task_struct *p) ...@@ -321,8 +321,8 @@ unsigned long get_wchan(struct task_struct *p)
/* Stack layout: sp-4: ra, sp-3: sp' */ /* Stack layout: sp-4: ra, sp-3: sp' */
pc = MAKE_PC_FROM_RA(*(unsigned long*)sp - 4, sp); pc = MAKE_PC_FROM_RA(SPILL_SLOT(sp, 0), sp);
sp = *(unsigned long *)sp - 3; sp = SPILL_SLOT(sp, 1);
} while (count++ < 16); } while (count++ < 16);
return 0; return 0;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment