summaryrefslogtreecommitdiffstats
path: root/arch/mips64/kernel/r4k_tlb_glue.S
diff options
context:
space:
mode:
authorKanoj Sarcar <kanoj@engr.sgi.com>2000-06-13 23:48:20 +0000
committerKanoj Sarcar <kanoj@engr.sgi.com>2000-06-13 23:48:20 +0000
commit6c9bc059cf73540f65fa2524c876ea96fc68edac (patch)
tree14211a32f2e3bdcbd7be3949bc5ad9b493407a39 /arch/mips64/kernel/r4k_tlb_glue.S
parent2b8295855d98d74c709e56f05949fd7cc9130fb8 (diff)
The tlb mod/load/store exception handlers _have_ to go to do_page_fault,
and can not do with pte bit twiddling without grabbing page_table_lock. Reinstate most of the old code, after disposing of an extra jump.
Diffstat (limited to 'arch/mips64/kernel/r4k_tlb_glue.S')
-rw-r--r--arch/mips64/kernel/r4k_tlb_glue.S27
1 files changed, 8 insertions, 19 deletions
diff --git a/arch/mips64/kernel/r4k_tlb_glue.S b/arch/mips64/kernel/r4k_tlb_glue.S
index 857a92126..8713172df 100644
--- a/arch/mips64/kernel/r4k_tlb_glue.S
+++ b/arch/mips64/kernel/r4k_tlb_glue.S
@@ -13,16 +13,6 @@
#include <asm/regdef.h>
#include <asm/stackframe.h>
- __INIT
-NESTED(__xtlb_refill_debug_tramp, PT_SIZE, sp)
- j __xtlb_refill_debug
- END(__xtlb_refill_debug_tramp)
-
-NESTED(__tlb_refill_debug_tramp, PT_SIZE, sp)
- j __tlb_refill_debug
- END(__tlb_refill_debug_tramp)
- __FINIT
-
.macro __BUILD_cli
CLI
.endm
@@ -31,7 +21,7 @@ NESTED(__tlb_refill_debug_tramp, PT_SIZE, sp)
STI
.endm
- .macro tlb_handler name interruptible
+ .macro tlb_handler name interruptible writebit
NESTED(__\name, PT_SIZE, sp)
SAVE_ALL
#if DEBUG_MIPS64
@@ -43,16 +33,15 @@ ld $7, PT_R7(sp)
ld $2, PT_R2(sp)
#endif
__BUILD_\interruptible
- dmfc0 t0, CP0_BADVADDR
- sd t0, PT_BVADDR(sp)
+ dmfc0 a2, CP0_BADVADDR
+ li a1, \writebit
+ sd a2, PT_BVADDR(sp)
move a0, sp
- jal \name
+ jal do_page_fault
j ret_from_sys_call
END(__\name)
.endm
- tlb_handler tlb_refill_debug cli
- tlb_handler xtlb_refill_debug cli
- tlb_handler xtlb_mod_debug sti
- tlb_handler xtlb_tlbl_debug sti
- tlb_handler xtlb_tlbs_debug sti
+ tlb_handler xtlb_mod sti 1
+ tlb_handler xtlb_tlbl sti 0
+ tlb_handler xtlb_tlbs sti 1