Port-mips archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: mipsX_subr.S:tlb_invalid_exception
http://mail-index.netbsd.org/port-mips/2002/11/17/0005.html
According to this, the G bit is nothing to do with "wiring".
I also wonder how the wired bit in pte is used in mips.
On Sat, Oct 1, 2011 at 11:41 PM, Masao Uebayashi <uebayasi%gmail.com@localhost>
wrote:
> In the following code:
>
> 1693 bnez k0, MIPSX(kern_tlbi_odd)
> 1694 nop
> 1695
> 1696 INT_L k0, 0(k1) # get PTE entry
> 1697 _SLL k0, k0, WIRED_SHIFT # get rid of "wired" bit
> 1698 _SRL k0, k0, WIRED_SHIFT
> 1699 _MTC0 k0, MIPS_COP_0_TLB_LO0 # load PTE entry
> 1700 COP0_SYNC
> 1701 and k0, k0, MIPS3_PG_V # check for valid entry
> 1702 #ifdef MIPS3
> 1703 nop # required for QED5230
> 1704 #endif
> 1705 beqz k0, _C_LABEL(MIPSX(kern_gen_exception)) # PTE invalid
> 1706 nop # - delay slot -
>
> - Why load PTE before checking V bit? If invalid,
> kern_gen_exception() will load PTE later (uvm_fault() -> pmap_enter()
> -> tlb_update()), right?
>
> 1708 INT_L k0, 4(k1) # get odd PTE entry
> 1709 _SLL k0, k0, WIRED_SHIFT
> 1710 mfc0 k1, MIPS_COP_0_TLB_INDEX
> 1711 _SRL k0, k0, WIRED_SHIFT
> 1712 sltiu k1, k1, MIPS3_TLB_WIRED_UPAGES # Luckily this is
> MIPS3_PG_G
> 1713 or k1, k1, k0
> 1714 _MTC0 k0, MIPS_COP_0_TLB_LO1 # load PTE entry
> 1715 COP0_SYNC
>
> - Line 1712 + 1713 sets and ORs a value into k1, but it's unused. Is
> it intended?
>
> - Why trying to set G bit only in LO1? According to [1], LO0:G and
> LO1:G are AND'ed.
>
> [1] MIPS32™ Architecture For Programmers Volume III: The MIPS32™
> Privileged Resource Architecture
>
Home |
Main Index |
Thread Index |
Old Index