summaryrefslogtreecommitdiffstats
path: root/arch/mips64/kernel/r4k_tlb_glue.S
diff options
context:
space:
mode:
authorKanoj Sarcar <kanoj@engr.sgi.com>2000-04-23 19:50:48 +0000
committerKanoj Sarcar <kanoj@engr.sgi.com>2000-04-23 19:50:48 +0000
commit2bba74b71906107e5bce42b542b862f90cf048b3 (patch)
tree9d21eec33efcbabb5666ac9fc4daa6fcc396089f /arch/mips64/kernel/r4k_tlb_glue.S
parentb9e55bb180a44f990e201c771c103469f6fb08ca (diff)
scall_64.S: Move to kernel mode and enable intrs properly.
r4k_tlb_glue.S: The fast handlers must work with intrs disabled, since we can not risk changes in entryhi/lo/tlbregisters. do_page_fault() _must_ work with intrs enabled, to prevent deadlocks in the intercpu tlbflush code. andes.c/r4xx0.c: Make tlb register accesses conservatively safe from intrs coming in and changing register contents.
Diffstat (limited to 'arch/mips64/kernel/r4k_tlb_glue.S')
-rw-r--r--arch/mips64/kernel/r4k_tlb_glue.S22
1 files changed, 15 insertions, 7 deletions
diff --git a/arch/mips64/kernel/r4k_tlb_glue.S b/arch/mips64/kernel/r4k_tlb_glue.S
index 81d457fda..87b97d30d 100644
--- a/arch/mips64/kernel/r4k_tlb_glue.S
+++ b/arch/mips64/kernel/r4k_tlb_glue.S
@@ -23,10 +23,18 @@ NESTED(__tlb_refill_debug_tramp, PT_SIZE, sp)
END(__tlb_refill_debug_tramp)
__FINIT
- .macro tlb_handler name
+ .macro __BUILD_cli
+ CLI
+ .endm
+
+ .macro __BUILD_sti
+ STI
+ .endm
+
+ .macro tlb_handler name interruptible
NESTED(__\name, PT_SIZE, sp)
SAVE_ALL
- CLI
+ __BUILD_\interruptible
dmfc0 t0, CP0_BADVADDR
sd t0, PT_BVADDR(sp)
move a0, sp
@@ -35,8 +43,8 @@ NESTED(__tlb_refill_debug_tramp, PT_SIZE, sp)
END(__\name)
.endm
- tlb_handler tlb_refill_debug
- tlb_handler xtlb_refill_debug
- tlb_handler xtlb_mod_debug
- tlb_handler xtlb_tlbl_debug
- tlb_handler xtlb_tlbs_debug
+ 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