Ignore:
File:
1 edited

Legend:

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

    r2bdf8313 rbd81386  
    100100        mutex_unlock(&AS->lock);
    101101       
     102        page_table_lock(AS, true);
     103       
    102104        pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc);
    103105        if (!pte) {
     
    111113                         * or copy_to_uspace().
    112114                         */
     115                        page_table_unlock(AS, true);
    113116                        return;
    114117                default:
     
    141144        tlbwr();
    142145
     146        page_table_unlock(AS, true);
    143147        return;
    144148       
    145149fail:
     150        page_table_unlock(AS, true);
    146151        tlb_refill_fail(istate);
    147152}
     
    171176        index.value = cp0_index_read();
    172177
     178        page_table_lock(AS, true);     
     179       
    173180        /*
    174181         * Fail if the entry is not in TLB.
     
    190197                         * or copy_to_uspace().
    191198                         */
     199                        page_table_unlock(AS, true);                     
    192200                        return;
    193201                default:
     
    219227        tlbwi();
    220228
     229        page_table_unlock(AS, true);
    221230        return;
    222231       
    223232fail:
     233        page_table_unlock(AS, true);
    224234        tlb_invalid_fail(istate);
    225235}
     
    249259        index.value = cp0_index_read();
    250260
     261        page_table_lock(AS, true);     
     262       
    251263        /*
    252264         * Fail if the entry is not in TLB.
     
    268280                         * or copy_to_uspace().
    269281                         */
     282                        page_table_unlock(AS, true);                     
    270283                        return;
    271284                default:
     
    298311        tlbwi();
    299312
     313        page_table_unlock(AS, true);
    300314        return;
    301315       
    302316fail:
     317        page_table_unlock(AS, true);
    303318        tlb_modified_fail(istate);
    304319}
     
    349364        pte_t *pte;
    350365
     366        ASSERT(mutex_locked(&AS->lock));
     367
    351368        hi.value = cp0_entry_hi_read();
    352369
     
    362379         * Check if the mapping exists in page tables.
    363380         */     
    364         pte = page_mapping_find(AS, badvaddr, true);
     381        pte = page_mapping_find(AS, badvaddr);
    365382        if (pte && pte->p && (pte->w || access != PF_ACCESS_WRITE)) {
    366383                /*
     
    376393                 * Resort to higher-level page fault handler.
    377394                 */
     395                page_table_unlock(AS, true);
    378396                switch (rc = as_page_fault(badvaddr, access, istate)) {
    379397                case AS_PF_OK:
     
    382400                         * The mapping ought to be in place.
    383401                         */
    384                         pte = page_mapping_find(AS, badvaddr, true);
     402                        page_table_lock(AS, true);
     403                        pte = page_mapping_find(AS, badvaddr);
    385404                        ASSERT(pte && pte->p);
    386405                        ASSERT(pte->w || access != PF_ACCESS_WRITE);
     
    388407                        break;
    389408                case AS_PF_DEFER:
     409                        page_table_lock(AS, true);
    390410                        *pfrc = AS_PF_DEFER;
    391411                        return NULL;
    392412                        break;
    393413                case AS_PF_FAULT:
     414                        page_table_lock(AS, true);
    394415                        *pfrc = AS_PF_FAULT;
    395416                        return NULL;
Note: See TracChangeset for help on using the changeset viewer.