Ignore:
File:
1 edited

Legend:

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

    rb2fa1204 r346b12a2  
    9797        entry_lo_t lo;
    9898        uintptr_t badvaddr;
    99         pte_t *pte;
     99        pte_t pte;
    100100       
    101101        badvaddr = cp0_badvaddr_read();
    102102
    103         pte = page_mapping_find(AS, badvaddr, true);
    104         if (pte && pte->p) {
     103        bool found = page_mapping_find(AS, badvaddr, true, &pte);
     104        if (found && pte.p) {
    105105                /*
    106106                 * Record access to PTE.
    107107                 */
    108                 pte->a = 1;
    109 
    110                 tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d,
    111                     pte->cacheable, pte->pfn);
     108                pte.a = 1;
     109
     110                tlb_prepare_entry_lo(&lo, pte.g, pte.p, pte.d,
     111                    pte.cacheable, pte.pfn);
     112
     113                page_mapping_update(AS, badvaddr, true, &pte);
    112114
    113115                /*
     
    138140        tlb_index_t index;
    139141        uintptr_t badvaddr;
    140         pte_t *pte;
     142        pte_t pte;
    141143
    142144        /*
     
    162164        badvaddr = cp0_badvaddr_read();
    163165
    164         pte = page_mapping_find(AS, badvaddr, true);
    165         if (pte && pte->p) {
     166        bool found = page_mapping_find(AS, badvaddr, true, &pte);
     167        if (found && pte.p) {
    166168                /*
    167169                 * Read the faulting TLB entry.
     
    172174                 * Record access to PTE.
    173175                 */
    174                 pte->a = 1;
    175 
    176                 tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d,
    177                     pte->cacheable, pte->pfn);
     176                pte.a = 1;
     177
     178                tlb_prepare_entry_lo(&lo, pte.g, pte.p, pte.d,
     179                    pte.cacheable, pte.pfn);
     180
     181                page_mapping_update(AS, badvaddr, true, &pte);
    178182
    179183                /*
     
    200204        tlb_index_t index;
    201205        uintptr_t badvaddr;
    202         pte_t *pte;
     206        pte_t pte;
    203207
    204208        badvaddr = cp0_badvaddr_read();
     
    224228        }
    225229
    226         pte = page_mapping_find(AS, badvaddr, true);
    227         if (pte && pte->p && pte->w) {
     230        bool found = page_mapping_find(AS, badvaddr, true, &pte);
     231        if (found && pte.p && pte.w) {
    228232                /*
    229233                 * Read the faulting TLB entry.
     
    234238                 * Record access and write to PTE.
    235239                 */
    236                 pte->a = 1;
    237                 pte->d = 1;
    238 
    239                 tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->w,
    240                     pte->cacheable, pte->pfn);
     240                pte.a = 1;
     241                pte.d = 1;
     242
     243                tlb_prepare_entry_lo(&lo, pte.g, pte.p, pte.w,
     244                    pte.cacheable, pte.pfn);
     245
     246                page_mapping_update(AS, badvaddr, true, &pte);
    241247
    242248                /*
Note: See TracChangeset for help on using the changeset viewer.