| From 03bc996af0cc71c7f30c384d8ce7260172423b34 Mon Sep 17 00:00:00 2001 |
| From: Max Filippov <jcmvbkbc@gmail.com> |
| Date: Mon, 26 Nov 2018 15:18:26 -0800 |
| Subject: xtensa: fix coprocessor context offset definitions |
| |
| From: Max Filippov <jcmvbkbc@gmail.com> |
| |
| commit 03bc996af0cc71c7f30c384d8ce7260172423b34 upstream. |
| |
| Coprocessor context offsets are used by the assembly code that moves |
| coprocessor context between the individual fields of the |
| thread_info::xtregs_cp structure and coprocessor registers. |
| This fixes coprocessor context clobbering on flushing and reloading |
| during normal user code execution and user process debugging in the |
| presence of more than one coprocessor in the core configuration. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/xtensa/kernel/asm-offsets.c | 16 ++++++++-------- |
| 1 file changed, 8 insertions(+), 8 deletions(-) |
| |
| --- a/arch/xtensa/kernel/asm-offsets.c |
| +++ b/arch/xtensa/kernel/asm-offsets.c |
| @@ -94,14 +94,14 @@ int main(void) |
| DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp)); |
| DEFINE(THREAD_CPENABLE, offsetof (struct thread_info, cpenable)); |
| #if XTENSA_HAVE_COPROCESSORS |
| - DEFINE(THREAD_XTREGS_CP0, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP1, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP2, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP3, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP4, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP5, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP6, offsetof (struct thread_info, xtregs_cp)); |
| - DEFINE(THREAD_XTREGS_CP7, offsetof (struct thread_info, xtregs_cp)); |
| + DEFINE(THREAD_XTREGS_CP0, offsetof(struct thread_info, xtregs_cp.cp0)); |
| + DEFINE(THREAD_XTREGS_CP1, offsetof(struct thread_info, xtregs_cp.cp1)); |
| + DEFINE(THREAD_XTREGS_CP2, offsetof(struct thread_info, xtregs_cp.cp2)); |
| + DEFINE(THREAD_XTREGS_CP3, offsetof(struct thread_info, xtregs_cp.cp3)); |
| + DEFINE(THREAD_XTREGS_CP4, offsetof(struct thread_info, xtregs_cp.cp4)); |
| + DEFINE(THREAD_XTREGS_CP5, offsetof(struct thread_info, xtregs_cp.cp5)); |
| + DEFINE(THREAD_XTREGS_CP6, offsetof(struct thread_info, xtregs_cp.cp6)); |
| + DEFINE(THREAD_XTREGS_CP7, offsetof(struct thread_info, xtregs_cp.cp7)); |
| #endif |
| DEFINE(THREAD_XTREGS_USER, offsetof (struct thread_info, xtregs_user)); |
| DEFINE(XTREGS_USER_SIZE, sizeof(xtregs_user_t)); |