diff options
Diffstat (limited to 'arch/mips/kernel/genex.S')
-rw-r--r-- | arch/mips/kernel/genex.S | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index 31fa856829cb..47d7583cd67f 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -374,12 +374,20 @@ NESTED(except_vec_nmi, 0, sp) | |||
374 | NESTED(nmi_handler, PT_SIZE, sp) | 374 | NESTED(nmi_handler, PT_SIZE, sp) |
375 | .set push | 375 | .set push |
376 | .set noat | 376 | .set noat |
377 | /* | ||
378 | * Clear ERL - restore segment mapping | ||
379 | * Clear BEV - required for page fault exception handler to work | ||
380 | */ | ||
381 | mfc0 k0, CP0_STATUS | ||
382 | ori k0, k0, ST0_EXL | ||
383 | li k1, ~(ST0_BEV | ST0_ERL) | ||
384 | and k0, k0, k1 | ||
385 | mtc0 k0, CP0_STATUS | ||
386 | _ehb | ||
377 | SAVE_ALL | 387 | SAVE_ALL |
378 | move a0, sp | 388 | move a0, sp |
379 | jal nmi_exception_handler | 389 | jal nmi_exception_handler |
380 | RESTORE_ALL | 390 | /* nmi_exception_handler never returns */ |
381 | .set mips3 | ||
382 | eret | ||
383 | .set pop | 391 | .set pop |
384 | END(nmi_handler) | 392 | END(nmi_handler) |
385 | 393 | ||