diff options
-rw-r--r-- | arch/xtensa/kernel/traps.c | 5 | ||||
-rw-r--r-- | arch/xtensa/kernel/vectors.S | 8 | ||||
-rw-r--r-- | arch/xtensa/kernel/vmlinux.lds.S | 4 |
3 files changed, 10 insertions, 7 deletions
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index eebbfd8c26fc..9d2f45f010ef 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c | |||
@@ -101,9 +101,8 @@ static dispatch_init_table_t __initdata dispatch_init_table[] = { | |||
101 | #if XCHAL_UNALIGNED_LOAD_EXCEPTION || XCHAL_UNALIGNED_STORE_EXCEPTION | 101 | #if XCHAL_UNALIGNED_LOAD_EXCEPTION || XCHAL_UNALIGNED_STORE_EXCEPTION |
102 | #ifdef CONFIG_XTENSA_UNALIGNED_USER | 102 | #ifdef CONFIG_XTENSA_UNALIGNED_USER |
103 | { EXCCAUSE_UNALIGNED, USER, fast_unaligned }, | 103 | { EXCCAUSE_UNALIGNED, USER, fast_unaligned }, |
104 | #else | ||
105 | { EXCCAUSE_UNALIGNED, 0, do_unaligned_user }, | ||
106 | #endif | 104 | #endif |
105 | { EXCCAUSE_UNALIGNED, 0, do_unaligned_user }, | ||
107 | { EXCCAUSE_UNALIGNED, KRNL, fast_unaligned }, | 106 | { EXCCAUSE_UNALIGNED, KRNL, fast_unaligned }, |
108 | #endif | 107 | #endif |
109 | #ifdef CONFIG_MMU | 108 | #ifdef CONFIG_MMU |
@@ -264,7 +263,6 @@ do_illegal_instruction(struct pt_regs *regs) | |||
264 | */ | 263 | */ |
265 | 264 | ||
266 | #if XCHAL_UNALIGNED_LOAD_EXCEPTION || XCHAL_UNALIGNED_STORE_EXCEPTION | 265 | #if XCHAL_UNALIGNED_LOAD_EXCEPTION || XCHAL_UNALIGNED_STORE_EXCEPTION |
267 | #ifndef CONFIG_XTENSA_UNALIGNED_USER | ||
268 | void | 266 | void |
269 | do_unaligned_user (struct pt_regs *regs) | 267 | do_unaligned_user (struct pt_regs *regs) |
270 | { | 268 | { |
@@ -286,7 +284,6 @@ do_unaligned_user (struct pt_regs *regs) | |||
286 | 284 | ||
287 | } | 285 | } |
288 | #endif | 286 | #endif |
289 | #endif | ||
290 | 287 | ||
291 | void | 288 | void |
292 | do_debug(struct pt_regs *regs) | 289 | do_debug(struct pt_regs *regs) |
diff --git a/arch/xtensa/kernel/vectors.S b/arch/xtensa/kernel/vectors.S index 8453e6e39895..1b397a902292 100644 --- a/arch/xtensa/kernel/vectors.S +++ b/arch/xtensa/kernel/vectors.S | |||
@@ -454,8 +454,14 @@ _DoubleExceptionVector_WindowOverflow: | |||
454 | s32i a0, a2, PT_DEPC | 454 | s32i a0, a2, PT_DEPC |
455 | 455 | ||
456 | _DoubleExceptionVector_handle_exception: | 456 | _DoubleExceptionVector_handle_exception: |
457 | addi a0, a0, -EXCCAUSE_UNALIGNED | ||
458 | beqz a0, 2f | ||
457 | addx4 a0, a0, a3 | 459 | addx4 a0, a0, a3 |
458 | l32i a0, a0, EXC_TABLE_FAST_USER | 460 | l32i a0, a0, EXC_TABLE_FAST_USER + 4 * EXCCAUSE_UNALIGNED |
461 | xsr a3, excsave1 | ||
462 | jx a0 | ||
463 | 2: | ||
464 | movi a0, user_exception | ||
459 | xsr a3, excsave1 | 465 | xsr a3, excsave1 |
460 | jx a0 | 466 | jx a0 |
461 | 467 | ||
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S index d16db6df86f8..fc1bc2ba8d5d 100644 --- a/arch/xtensa/kernel/vmlinux.lds.S +++ b/arch/xtensa/kernel/vmlinux.lds.S | |||
@@ -269,13 +269,13 @@ SECTIONS | |||
269 | .UserExceptionVector.literal) | 269 | .UserExceptionVector.literal) |
270 | SECTION_VECTOR (_DoubleExceptionVector_literal, | 270 | SECTION_VECTOR (_DoubleExceptionVector_literal, |
271 | .DoubleExceptionVector.literal, | 271 | .DoubleExceptionVector.literal, |
272 | DOUBLEEXC_VECTOR_VADDR - 40, | 272 | DOUBLEEXC_VECTOR_VADDR - 48, |
273 | SIZEOF(.UserExceptionVector.text), | 273 | SIZEOF(.UserExceptionVector.text), |
274 | .UserExceptionVector.text) | 274 | .UserExceptionVector.text) |
275 | SECTION_VECTOR (_DoubleExceptionVector_text, | 275 | SECTION_VECTOR (_DoubleExceptionVector_text, |
276 | .DoubleExceptionVector.text, | 276 | .DoubleExceptionVector.text, |
277 | DOUBLEEXC_VECTOR_VADDR, | 277 | DOUBLEEXC_VECTOR_VADDR, |
278 | 40, | 278 | 48, |
279 | .DoubleExceptionVector.literal) | 279 | .DoubleExceptionVector.literal) |
280 | 280 | ||
281 | . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3; | 281 | . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3; |