patch-2.4.19 linux-2.4.19/arch/mips64/kernel/r4k_tlb.S
Next file: linux-2.4.19/arch/mips64/kernel/r4k_tlb_debug.c
Previous file: linux-2.4.19/arch/mips64/kernel/r4k_switch.S
Back to the patch index
Back to the overall index
- Lines: 127
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
linux-2.4.18/arch/mips64/kernel/r4k_tlb.S
- Orig date:
Wed Jul 4 11:50:39 2001
diff -urN linux-2.4.18/arch/mips64/kernel/r4k_tlb.S linux-2.4.19/arch/mips64/kernel/r4k_tlb.S
@@ -1,126 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2000 Silicon Graphics, Inc.
- * Written by Ulf Carlsson (ulfc@engr.sgi.com)
- */
-#include <linux/config.h>
-#include <linux/threads.h>
-#include <asm/asm.h>
-#include <asm/regdef.h>
-#include <asm/mipsregs.h>
-#include <asm/pgtable.h>
-#include <asm/stackframe.h>
-
- .data
- .comm pgd_current, NR_CPUS * 8, 8
-
- /*
- * After this macro runs we have a pointer to the pte of the address
- * that caused the fault in in PTR.
- */
-
- .macro LOAD_PTE2, ptr, tmp
-#ifdef CONFIG_SMP
- dmfc0 \tmp, CP0_CONTEXT
- dla \ptr, pgd_current
- dsrl \tmp, 23
- daddu \ptr, \tmp
-#else
- dla \ptr, pgd_current
-#endif
- dmfc0 \tmp, CP0_BADVADDR
- ld \ptr, (\ptr)
- bltz \tmp, kaddr
- dsrl \tmp, (PGDIR_SHIFT-3) # get pgd offset in bytes
- andi \tmp, ((PTRS_PER_PGD - 1)<<3)
- daddu \ptr, \tmp # add in pgd offset
- dmfc0 \tmp, CP0_BADVADDR
- ld \ptr, (\ptr) # get pmd pointer
- dsrl \tmp, (PMD_SHIFT-3) # get pmd offset in bytes
- andi \tmp, ((PTRS_PER_PMD - 1)<<3)
- daddu \ptr, \tmp # add in pmd offset
- dmfc0 \tmp, CP0_XCONTEXT
- ld \ptr, (\ptr) # get pte pointer
- andi \tmp, 0xff0 # get pte offset
- daddu \ptr, \tmp
- .endm
-
- /*
- * This places the even/odd pte pair in the page table at the pte
- * entry pointed to by PTE into ENTRYLO0 and ENTRYLO1.
- */
- .macro PTE_RELOAD, pte0, pte1
- dsrl \pte0, 6 # convert to entrylo0
- dmtc0 \pte0, CP0_ENTRYLO0 # load it
- dsrl \pte1, 6 # convert to entrylo1
- dmtc0 \pte1, CP0_ENTRYLO1 # load it
- .endm
-
- .text
- .set noreorder
- .set mips3
-
- .align 5
-FEXPORT(except_vec0)
- .set noat
-1: b 1b
- nop
-
- /* TLB refill handler for the R10000.
- * Attention: We may only use 32 instructions.
- */
-
- .align 5
-FEXPORT(except_vec1_r10k)
- .set noat
- LOAD_PTE2 k1 k0
- ld k0, 0(k1) # get even pte
- ld k1, 8(k1) # get odd pte
- PTE_RELOAD k0 k1
- nop
- tlbwr
- eret
-kaddr:
- dla k0, handle_vmalloc_address # MAPPED kernel needs this
- jr k0
- nop
-
- .align 5
-FEXPORT(handle_vmalloc_address)
- .set noat
- /*
- * First, determine that the address is in/above vmalloc range.
- */
- dmfc0 k0, CP0_BADVADDR
- dli k1, VMALLOC_START
-
- /*
- * Now find offset into kptbl.
- */
- dsubu k0, k0, k1
- dla k1, kptbl
- dsrl k0, (PAGE_SHIFT+1) # get vpn2
- dsll k0, 4 # byte offset of pte
- daddu k1, k1, k0
-
- /*
- * Determine that fault address is within vmalloc range.
- */
- dla k0, ekptbl
- sltu k0, k1, k0
- beqz k0, not_vmalloc
-
- /*
- * Load cp0 registers.
- */
- ld k0, 0(k1) # get even pte
- ld k1, 8(k1) # get odd pte
-
-not_vmalloc:
- PTE_RELOAD k0 k1
- nop
- tlbwr
- eret
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)