Ignore:
File:
1 edited

Legend:

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

    rc99693a r26aafe8  
    4949 *
    5050 * @param as       Address space.
     51 * @param lock     Lock/unlock the address space.
    5152 * @param badvaddr Faulting virtual address.
    5253 * @param access   Access mode that caused the fault.
     
    6162    istate_t *istate, int *pfrc)
    6263{
     64        ASSERT(mutex_locked(&as->lock));
     65
    6366        /*
    6467         * Check if the mapping exists in page tables.
    6568         */
    66         pte_t *pte = page_mapping_find(as, badvaddr, true);
     69        pte_t *pte = page_mapping_find(as, badvaddr);
    6770        if ((pte) && (pte->present)) {
    6871                /*
     
    7679                 * Resort to higher-level page fault handler.
    7780                 */
     81                page_table_unlock(as, true);
     82               
    7883                int rc = as_page_fault(badvaddr, access, istate);
    7984                switch (rc) {
     
    8388                         * The mapping ought to be in place.
    8489                         */
    85                         pte = page_mapping_find(as, badvaddr, true);
     90                        page_table_lock(as, true);
     91                        pte = page_mapping_find(as, badvaddr);
    8692                        ASSERT((pte) && (pte->present));
    8793                        *pfrc = 0;
    8894                        return pte;
    8995                case AS_PF_DEFER:
     96                        page_table_lock(as, true);
    9097                        *pfrc = rc;
    9198                        return NULL;
    9299                case AS_PF_FAULT:
     100                        page_table_lock(as, true);
    93101                        *pfrc = rc;
    94102                        return NULL;
     
    206214                badvaddr = istate->pc;
    207215       
     216        page_table_lock(as, true);
     217       
    208218        int pfrc;
    209219        pte_t *pte = find_mapping_and_check(as, badvaddr,
     
    213223                switch (pfrc) {
    214224                case AS_PF_FAULT:
     225                        page_table_unlock(as, true);
    215226                        pht_refill_fail(badvaddr, istate);
    216227                        return;
     
    220231                         * or copy_to_uspace().
    221232                         */
     233                        page_table_unlock(as, true);
    222234                        return;
    223235                default:
     
    229241        pte->accessed = 1;
    230242        pht_insert(badvaddr, pte);
     243       
     244        page_table_unlock(as, true);
    231245}
    232246
Note: See TracChangeset for help on using the changeset viewer.