aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include
diff options
context:
space:
mode:
authorNikolay Borisov <Nikolay.Borisov@arm.com>2014-06-03 14:47:14 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-06-17 09:47:36 -0400
commit870cbe8cb2043d63dc5f110731df57599075f53d (patch)
tree8295bb35df7a1872f581f0cccbb9873bab7a61bd /arch/arm/include
parent6aab4c2941a7f9438d343d31e2837aa77edd71aa (diff)
ARM: 8069/1: Make thread_save_fp macro aware of THUMB2 mode
The thread_save_fp macro has been defined so that it always reads the fp member of the cpu_context_save struct. However, in the case of THUMB2 the fp is saved not in the fp (r11) member but rather in r7. This patch changes the way the macro is defined such that FP is read from the correct place depending on whether we are a THUMB2 kernel or not. This enables the backtrace in sitaution such as "echo t > /proc/sysrq-trigger" or the function in which a process sleeping when "ps -Al" is invoked. Signed-off-by: Nikolay Borisov <Nikolay.Borisov@arm.com> Reviewed-by: Anurag Aggarwal <anurag19aggarwal@gmail.com> Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/include')
-rw-r--r--arch/arm/include/asm/thread_info.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index f989d7c22dc5..e4e4208a9130 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -114,8 +114,14 @@ static inline struct thread_info *current_thread_info(void)
114 ((unsigned long)(task_thread_info(tsk)->cpu_context.pc)) 114 ((unsigned long)(task_thread_info(tsk)->cpu_context.pc))
115#define thread_saved_sp(tsk) \ 115#define thread_saved_sp(tsk) \
116 ((unsigned long)(task_thread_info(tsk)->cpu_context.sp)) 116 ((unsigned long)(task_thread_info(tsk)->cpu_context.sp))
117
118#ifndef CONFIG_THUMB2_KERNEL
117#define thread_saved_fp(tsk) \ 119#define thread_saved_fp(tsk) \
118 ((unsigned long)(task_thread_info(tsk)->cpu_context.fp)) 120 ((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
121#else
122#define thread_saved_fp(tsk) \
123 ((unsigned long)(task_thread_info(tsk)->cpu_context.r7))
124#endif
119 125
120extern void crunch_task_disable(struct thread_info *); 126extern void crunch_task_disable(struct thread_info *);
121extern void crunch_task_copy(struct thread_info *, void *); 127extern void crunch_task_copy(struct thread_info *, void *);