Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/mips32/src/mm/tlb.c

    rbd81386 r98000fb  
    321321void tlb_refill_fail(istate_t *istate)
    322322{
    323         uintptr_t va = cp0_badvaddr_read();
     323        char *symbol, *sym2;
     324
     325        symbol = symtab_fmt_name_lookup(istate->epc);
     326        sym2 = symtab_fmt_name_lookup(istate->ra);
    324327       
    325328        fault_if_from_uspace(istate, "TLB Refill Exception on %p.",
    326             (void *) va);
    327         panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, "TLB Refill Exception.");
     329            cp0_badvaddr_read());
     330        panic("%x: TLB Refill Exception at %x (%s<-%s).", cp0_badvaddr_read(),
     331            istate->epc, symbol, sym2);
    328332}
    329333
     
    331335void tlb_invalid_fail(istate_t *istate)
    332336{
    333         uintptr_t va = cp0_badvaddr_read();
    334        
     337        char *symbol;
     338
     339        symbol = symtab_fmt_name_lookup(istate->epc);
     340
    335341        fault_if_from_uspace(istate, "TLB Invalid Exception on %p.",
    336             (void *) va);
    337         panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, "TLB Invalid Exception.");
     342            cp0_badvaddr_read());
     343        panic("%x: TLB Invalid Exception at %x (%s).", cp0_badvaddr_read(),
     344            istate->epc, symbol);
    338345}
    339346
    340347void tlb_modified_fail(istate_t *istate)
    341348{
    342         uintptr_t va = cp0_badvaddr_read();
    343        
     349        char *symbol;
     350
     351        symbol = symtab_fmt_name_lookup(istate->epc);
     352
    344353        fault_if_from_uspace(istate, "TLB Modified Exception on %p.",
    345             (void *) va);
    346         panic_memtrap(istate, PF_ACCESS_WRITE, va, "TLB Modified Exception.");
     354            cp0_badvaddr_read());
     355        panic("%x: TLB Modified Exception at %x (%s).", cp0_badvaddr_read(),
     356            istate->epc, symbol);
    347357}
    348358
    349359/** Try to find PTE for faulting address.
     360 *
     361 * The AS->lock must be held on entry to this function.
    350362 *
    351363 * @param badvaddr      Faulting virtual address.
     
    363375        entry_hi_t hi;
    364376        pte_t *pte;
    365 
    366         ASSERT(mutex_locked(&AS->lock));
    367377
    368378        hi.value = cp0_entry_hi_read();
     
    451461        hi_save.value = cp0_entry_hi_read();
    452462       
    453         printf("[nr] [asid] [vpn2] [mask] [gvdc] [pfn ]\n");
     463        printf("#  ASID VPN2   MASK G V D C PFN\n");
     464        printf("-- ---- ------ ---- - - - - ------\n");
    454465       
    455466        for (i = 0; i < TLB_ENTRY_COUNT; i++) {
     
    462473                lo1.value = cp0_entry_lo1_read();
    463474               
    464                 printf("%-4u %-6u %#6x %#6x  %1u%1u%1u%1u %#6x\n",
     475                printf("%-2u %-4u %#6x %#4x %1u %1u %1u %1u %#6x\n",
    465476                    i, hi.asid, hi.vpn2, mask.mask,
    466477                    lo0.g, lo0.v, lo0.d, lo0.c, lo0.pfn);
    467                 printf("                           %1u%1u%1u%1u %#6x\n",
     478                printf("                    %1u %1u %1u %1u %#6x\n",
    468479                    lo1.g, lo1.v, lo1.d, lo1.c, lo1.pfn);
    469480        }
     
    557568        entry_hi_t hi, hi_save;
    558569        tlb_index_t index;
    559        
    560         if (asid == ASID_INVALID)
    561                 return;
     570
     571        ASSERT(asid != ASID_INVALID);
    562572
    563573        hi_save.value = cp0_entry_hi_read();
Note: See TracChangeset for help on using the changeset viewer.