Changes in kernel/arch/ppc32/src/mm/tlb.c [c99693a:26aafe8] in mainline
- File:
-
- 1 edited
-
kernel/arch/ppc32/src/mm/tlb.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/mm/tlb.c
rc99693a r26aafe8 49 49 * 50 50 * @param as Address space. 51 * @param lock Lock/unlock the address space. 51 52 * @param badvaddr Faulting virtual address. 52 53 * @param access Access mode that caused the fault. … … 61 62 istate_t *istate, int *pfrc) 62 63 { 64 ASSERT(mutex_locked(&as->lock)); 65 63 66 /* 64 67 * Check if the mapping exists in page tables. 65 68 */ 66 pte_t *pte = page_mapping_find(as, badvaddr , true);69 pte_t *pte = page_mapping_find(as, badvaddr); 67 70 if ((pte) && (pte->present)) { 68 71 /* … … 76 79 * Resort to higher-level page fault handler. 77 80 */ 81 page_table_unlock(as, true); 82 78 83 int rc = as_page_fault(badvaddr, access, istate); 79 84 switch (rc) { … … 83 88 * The mapping ought to be in place. 84 89 */ 85 pte = page_mapping_find(as, badvaddr, true); 90 page_table_lock(as, true); 91 pte = page_mapping_find(as, badvaddr); 86 92 ASSERT((pte) && (pte->present)); 87 93 *pfrc = 0; 88 94 return pte; 89 95 case AS_PF_DEFER: 96 page_table_lock(as, true); 90 97 *pfrc = rc; 91 98 return NULL; 92 99 case AS_PF_FAULT: 100 page_table_lock(as, true); 93 101 *pfrc = rc; 94 102 return NULL; … … 206 214 badvaddr = istate->pc; 207 215 216 page_table_lock(as, true); 217 208 218 int pfrc; 209 219 pte_t *pte = find_mapping_and_check(as, badvaddr, … … 213 223 switch (pfrc) { 214 224 case AS_PF_FAULT: 225 page_table_unlock(as, true); 215 226 pht_refill_fail(badvaddr, istate); 216 227 return; … … 220 231 * or copy_to_uspace(). 221 232 */ 233 page_table_unlock(as, true); 222 234 return; 223 235 default: … … 229 241 pte->accessed = 1; 230 242 pht_insert(badvaddr, pte); 243 244 page_table_unlock(as, true); 231 245 } 232 246
Note:
See TracChangeset
for help on using the changeset viewer.
