patch-1.3.93 linux/arch/sparc/mm/s4ckflt.S
Next file: linux/arch/sparc/mm/s4clow.h
Previous file: linux/arch/sparc/mm/s4cflsh.S
Back to the patch index
Back to the overall index
- Lines: 106
- Date:
Thu Jan 1 02:00:00 1970
- Orig file:
v1.3.92/linux/arch/sparc/mm/s4ckflt.S
- Orig date:
Mon Mar 4 08:49:58 1996
diff -u --recursive --new-file v1.3.92/linux/arch/sparc/mm/s4ckflt.S linux/arch/sparc/mm/s4ckflt.S
@@ -1,105 +0,0 @@
-/* s4ckflt.S: Quick in window kernel faults on the sun4c.
- *
- * Copyright (C) 1995 David S. Miller (davem@caipfs.rutgers.edu)
- */
-
-#include "s4clow.h"
-
- .text
- .align 8
- .globl sun4c_quick_kernel_fault
-sun4c_quick_kernel_fault:
- sethi %hi(REAL_PGDIR_MASK), %l5
- and %l7, %l5, %l7
- sethi %hi(C_LABEL(invalid_segment)), %l5
- lduba [%l7] 0x3, %l4
- ld [%l5 + %lo(C_LABEL(invalid_segment))], %l5
- cmp %l4, %l5
- bne segment_loaded
- nop
-
- /* We need some breathing room to pull this off, save
- * away some globals.
- */
- std %g0, [REGSAVE_BASE + KFLTREGS + 0x00]
- std %g2, [REGSAVE_BASE + KFLTREGS + 0x08]
- std %g4, [REGSAVE_BASE + KFLTREGS + 0x10]
- std %g6, [REGSAVE_BASE + KFLTREGS + 0x18]
- std %l0, [REGSAVE_BASE + KFLTREGS + 0x20]
- std %l2, [REGSAVE_BASE + KFLTREGS + 0x28]
-
- set C_LABEL(sun4c_kfree_ring), %g1
- ld [%g1 + RING_NENTRIES], %g2
- cmp %g2, 0x0
- be,a pseg_steal
- nop
-
- b distribute_segmap
- ld [%g1 + RING_RINGHD + MMU_ENTRY_NEXT], %g2
-
-pseg_steal:
- /* This is the hard case. */
- set C_LABEL(sun4c_kernel_ring), %g1
- ld [%g1 + RING_RINGHD + MMU_ENTRY_PREV], %g2
- b kernel_segment_cache_flush
- ld [%g2 + MMU_ENTRY_VADDR], %l0
-
-pseg_steal_after_flush:
- ld [%g2 + MMU_ENTRY_VADDR], %l0
- sethi %hi(0x30000000), %l1
- lduba [%l1] 0x02, %g7
- sethi %hi(C_LABEL(num_contexts)), %g6
- mov 0, %g5
- ld [%g6 + %lo(C_LABEL(num_contexts))], %g6
-1:
- stba %g5, [%l1] 0x02
- add %g5, 1, %g5
- cmp %g5, %g6
- bl 1b
- stba %l5, [%l0] 0x03
-
- stba %g7, [%l1] 0x02
-
-
-
-distribute_segmap:
- st %l7, [%g2 + MMU_ENTRY_VADDR]
- ldub [%g2 + MMU_ENTRY_PSEG], %g3
- sethi %hi(0x30000000), %l0
- lduba [%l0] 0x02, %g7
- sethi %hi(C_LABEL(num_contexts)), %g6
- mov 0, %g5
- ld [%g6 + %lo(C_LABEL(num_contexts))], %g6
-1:
- stba %g5, [%l0] 0x02
- add %g5, 1, %g5
- cmp %g5, %g6
- bl 1b
- stba %g3, [%l7] 0x03
-
- stba %g7, [%l0] 0x02
-
-segment_loaded:
- sethi %hi(VMALLOC_START), %l4
- cmp %l7, %l4
- bge vmalloc_kernel_fault
- nop
-
-
-
-
-
-vmalloc_kernel_fault:
-
-
-qkf_exit:
- /* Fault serviced, return from trap, but reload
- * registers first.
- */
- ldd [REGSAVE_BASE + KFLTREGS + 0x00], %g0
- ldd [REGSAVE_BASE + KFLTREGS + 0x08], %g2
- ldd [REGSAVE_BASE + KFLTREGS + 0x10], %g4
- ldd [REGSAVE_BASE + KFLTREGS + 0x18], %g6
- ldd [REGSAVE_BASE + KFLTREGS + 0x20], %l0
- ldd [REGSAVE_BASE + KFLTREGS + 0x28], %l2
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this