diff options
author | Kanoj Sarcar <kanoj@engr.sgi.com> | 2000-04-23 19:50:48 +0000 |
---|---|---|
committer | Kanoj Sarcar <kanoj@engr.sgi.com> | 2000-04-23 19:50:48 +0000 |
commit | 2bba74b71906107e5bce42b542b862f90cf048b3 (patch) | |
tree | 9d21eec33efcbabb5666ac9fc4daa6fcc396089f /arch/mips64/kernel | |
parent | b9e55bb180a44f990e201c771c103469f6fb08ca (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')
-rw-r--r-- | arch/mips64/kernel/r4k_tlb_glue.S | 22 | ||||
-rw-r--r-- | arch/mips64/kernel/scall_64.S | 1 |
2 files changed, 16 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 diff --git a/arch/mips64/kernel/scall_64.S b/arch/mips64/kernel/scall_64.S index 07b8ff7c0..6a7a59551 100644 --- a/arch/mips64/kernel/scall_64.S +++ b/arch/mips64/kernel/scall_64.S @@ -32,6 +32,7 @@ NESTED(handle_sys64, PT_SIZE, sp) #ifndef CONFIG_MIPS32_COMPAT .set noat SAVE_SOME + STI .set at #endif ld t1, PT_EPC(sp) # skip syscall on return |