H41467 s 00071/00000/00000 d D 1.1 02/03/13 20:31:04 patch 2 1 cC cF1 cK10455 cO-rw-rw-r-- e s 00000/00000/00000 d D 1.0 02/03/13 20:31:04 patch 1 0 c BitKeeper file /home/marcelo/bk/linux-2.4/arch/mips64/mm/tlb-dbg-r4k.c cBtorvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 cHplucky.distro.conectiva cK51116 cParch/mips64/mm/tlb-dbg-r4k.c cR303ef9852d40098e cV4 cX0x821 cZ-03:00 e u U f e 0 f x 0x821 t T I 2 /* * 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) 1999 Ralf Baechle * Copyright (C) 1999 Silicon Graphics, Inc. * * TLB debugging routines. These perform horribly slow but can easily be * modified for debugging purposes. */ #include #include #include #include #include #include #include #include asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write, unsigned long address); asmlinkage void tlb_refill_debug(struct pt_regs regs) { show_regs(®s); panic(__FUNCTION__ " called. This Does Not Happen (TM)."); } asmlinkage void xtlb_refill_debug(struct pt_regs *regs) { unsigned long addr; pgd_t *pgd; pmd_t *pmd; pte_t *pte; addr = regs->cp0_badvaddr & ~((PAGE_SIZE << 1) - 1); pgd = pgd_offset(current->active_mm, addr); pmd = pmd_offset(pgd, addr); pte = pte_offset(pmd, addr); set_entrylo0(pte_val(pte[0]) >> 6); set_entrylo1(pte_val(pte[1]) >> 6); __asm__ __volatile__("nop;nop;nop"); tlb_write_random(); } asmlinkage void xtlb_mod_debug(struct pt_regs *regs) { unsigned long addr; addr = regs->cp0_badvaddr; do_page_fault(regs, 1, addr); } asmlinkage void xtlb_tlbl_debug(struct pt_regs *regs) { unsigned long addr; addr = regs->cp0_badvaddr; do_page_fault(regs, 0, addr); } asmlinkage void xtlb_tlbs_debug(struct pt_regs *regs) { unsigned long addr; addr = regs->cp0_badvaddr; do_page_fault(regs, 1, addr); } E 2 I 1 E 1