- Timestamp:
- 2006-03-16T12:57:31Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e898a8d7
- Parents:
- b7dcabb
- Location:
- arch
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/src/mm/tlb.c
rb7dcabb r2299914 424 424 425 425 va = istate->cr_ifa; /* faulting address */ 426 page_table_lock(AS, true); 426 427 t = page_mapping_find(AS, va); 427 428 if (t) { … … 431 432 */ 432 433 itc_pte_copy(t); 434 page_table_unlock(AS, true); 433 435 } else { 434 436 /* 435 437 * Forward the page fault to address space page fault handler. 436 438 */ 439 page_table_unlock(AS, true); 437 440 if (!as_page_fault(va)) { 441 page_table_unlock(AS, true); 438 442 panic("%s: va=%P, rid=%d\n", __FUNCTION__, istate->cr_ifa, rr.map.rid); 439 443 } … … 467 471 } 468 472 473 page_table_lock(AS, true); 469 474 t = page_mapping_find(AS, va); 470 475 if (t) { … … 474 479 */ 475 480 dtc_pte_copy(t); 481 page_table_unlock(AS, true); 476 482 } else { 477 483 /* 478 484 * Forward the page fault to address space page fault handler. 479 485 */ 486 page_table_unlock(AS, true); 480 487 if (!as_page_fault(va)) { 481 488 panic("%s: va=%P, rid=%d, iip=%P\n", __FUNCTION__, va, rid, istate->cr_iip); … … 505 512 pte_t *t; 506 513 514 page_table_lock(AS, true); 507 515 t = page_mapping_find(AS, istate->cr_ifa); 508 516 ASSERT(t && t->p); … … 515 523 dtc_pte_copy(t); 516 524 } 525 page_table_unlock(AS, true); 517 526 } 518 527 … … 526 535 pte_t *t; 527 536 537 page_table_lock(AS, true); 528 538 t = page_mapping_find(AS, istate->cr_ifa); 529 539 ASSERT(t && t->p); … … 536 546 itc_pte_copy(t); 537 547 } 548 page_table_unlock(AS, true); 538 549 } 539 550 … … 547 558 pte_t *t; 548 559 560 page_table_lock(AS, true); 549 561 t = page_mapping_find(AS, istate->cr_ifa); 550 562 ASSERT(t && t->p); … … 557 569 dtc_pte_copy(t); 558 570 } 571 page_table_unlock(AS, true); 559 572 } 560 573 … … 571 584 572 585 va = istate->cr_ifa; /* faulting address */ 586 page_table_lock(AS, true); 573 587 t = page_mapping_find(AS, va); 574 588 ASSERT(t); … … 583 597 else 584 598 dtc_pte_copy(t); 599 page_table_unlock(AS, true); 585 600 } else { 601 page_table_unlock(AS, true); 586 602 if (!as_page_fault(va)) { 587 603 panic("%s: va=%P, rid=%d\n", __FUNCTION__, va, rr.map.rid); -
arch/mips32/src/mm/tlb.c
rb7dcabb r2299914 88 88 { 89 89 entry_lo_t lo; 90 entry_hi_t hi; 90 entry_hi_t hi; 91 asid_t asid; 91 92 __address badvaddr; 92 93 pte_t *pte; … … 94 95 badvaddr = cp0_badvaddr_read(); 95 96 96 spinlock_lock(&AS->lock); 97 spinlock_lock(&AS->lock); 98 asid = AS->asid; 99 spinlock_unlock(&AS->lock); 100 101 page_table_lock(AS, true); 97 102 98 103 pte = find_mapping_and_check(badvaddr); … … 105 110 pte->a = 1; 106 111 107 prepare_entry_hi(&hi, AS->asid, badvaddr);112 prepare_entry_hi(&hi, asid, badvaddr); 108 113 prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->cacheable, pte->pfn); 109 114 … … 123 128 tlbwr(); 124 129 125 spinlock_unlock(&AS->lock);130 page_table_unlock(AS, true); 126 131 return; 127 132 128 133 fail: 129 spinlock_unlock(&AS->lock);134 page_table_unlock(AS, true); 130 135 tlb_refill_fail(istate); 131 136 } … … 155 160 tlbp(); 156 161 index.value = cp0_index_read(); 157 158 spinlock_lock(&AS->lock);162 163 page_table_lock(AS, true); 159 164 160 165 /* … … 192 197 tlbwi(); 193 198 194 spinlock_unlock(&AS->lock);199 page_table_unlock(AS, true); 195 200 return; 196 201 197 202 fail: 198 spinlock_unlock(&AS->lock);203 page_table_unlock(AS, true); 199 204 tlb_invalid_fail(istate); 200 205 } … … 224 229 tlbp(); 225 230 index.value = cp0_index_read(); 226 227 spinlock_lock(&AS->lock);231 232 page_table_lock(AS, true); 228 233 229 234 /* … … 268 273 tlbwi(); 269 274 270 spinlock_unlock(&AS->lock);275 page_table_unlock(AS, true); 271 276 return; 272 277 273 278 fail: 274 spinlock_unlock(&AS->lock);279 page_table_unlock(AS, true); 275 280 tlb_modified_fail(istate); 276 281 } … … 350 355 * Resort to higher-level page fault handler. 351 356 */ 357 page_table_unlock(AS, true); 352 358 if (as_page_fault(badvaddr)) { 353 359 /* … … 355 361 * The mapping ought to be in place. 356 362 */ 363 page_table_lock(AS, true); 357 364 pte = page_mapping_find(AS, badvaddr); 358 365 ASSERT(pte && pte->p); 359 366 return pte; 367 } else { 368 page_table_lock(AS, true); 369 printf("Page fault.\n"); 370 return NULL; 360 371 } 361 } 362 363 /* 364 * Handler cannot succeed if badvaddr has no mapping. 365 */ 366 if (!pte) { 367 printf("No such mapping.\n"); 368 return NULL; 369 } 370 371 /* 372 * Handler cannot succeed if the mapping is marked as invalid. 373 */ 374 if (!pte->p) { 375 printf("Invalid mapping.\n"); 376 return NULL; 377 } 378 379 return pte; 372 373 } 380 374 } 381 375
Note:
See TracChangeset
for help on using the changeset viewer.