Rev 1850 | Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1850 | Rev 1851 | ||
|---|---|---|---|
| Line 504... | Line 504... | ||
| 504 | 504 | ||
| 505 | page_table_lock(AS, true); |
505 | page_table_lock(AS, true); |
| 506 | t = page_mapping_find(AS, va); |
506 | t = page_mapping_find(AS, va); |
| 507 | if (t) { |
507 | if (t) { |
| 508 | /* |
508 | /* |
| 509 | * The mapping was found in software page hash table. |
509 | * The mapping was found in the software page hash table. |
| 510 | * Insert it into data translation cache. |
510 | * Insert it into data translation cache. |
| 511 | */ |
511 | */ |
| 512 | dtc_pte_copy(t); |
512 | dtc_pte_copy(t); |
| 513 | page_table_unlock(AS, true); |
513 | page_table_unlock(AS, true); |
| 514 | } else { |
514 | } else { |
| 515 | /* |
515 | /* |
| 516 | * Forward the page fault to address space page fault handler. |
516 | * Forward the page fault to the address space page fault handler. |
| 517 | */ |
517 | */ |
| 518 | page_table_unlock(AS, true); |
518 | page_table_unlock(AS, true); |
| 519 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
519 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| 520 | fault_if_from_uspace(istate,"Page fault at %p",va); |
520 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 521 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
521 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |