423,6 → 423,7 |
pte_t *t; |
|
va = istate->cr_ifa; /* faulting address */ |
page_table_lock(AS, true); |
t = page_mapping_find(AS, va); |
if (t) { |
/* |
430,11 → 431,14 |
* Insert it into data translation cache. |
*/ |
itc_pte_copy(t); |
page_table_unlock(AS, true); |
} else { |
/* |
* Forward the page fault to address space page fault handler. |
*/ |
page_table_unlock(AS, true); |
if (!as_page_fault(va)) { |
page_table_unlock(AS, true); |
panic("%s: va=%P, rid=%d\n", __FUNCTION__, istate->cr_ifa, rr.map.rid); |
} |
} |
466,6 → 470,7 |
} |
} |
|
page_table_lock(AS, true); |
t = page_mapping_find(AS, va); |
if (t) { |
/* |
473,10 → 478,12 |
* Insert it into data translation cache. |
*/ |
dtc_pte_copy(t); |
page_table_unlock(AS, true); |
} else { |
/* |
* Forward the page fault to address space page fault handler. |
*/ |
page_table_unlock(AS, true); |
if (!as_page_fault(va)) { |
panic("%s: va=%P, rid=%d, iip=%P\n", __FUNCTION__, va, rid, istate->cr_iip); |
} |
504,6 → 511,7 |
{ |
pte_t *t; |
|
page_table_lock(AS, true); |
t = page_mapping_find(AS, istate->cr_ifa); |
ASSERT(t && t->p); |
if (t && t->p) { |
514,6 → 522,7 |
t->d = true; |
dtc_pte_copy(t); |
} |
page_table_unlock(AS, true); |
} |
|
/** Instruction access bit fault handler. |
525,6 → 534,7 |
{ |
pte_t *t; |
|
page_table_lock(AS, true); |
t = page_mapping_find(AS, istate->cr_ifa); |
ASSERT(t && t->p); |
if (t && t->p) { |
535,6 → 545,7 |
t->a = true; |
itc_pte_copy(t); |
} |
page_table_unlock(AS, true); |
} |
|
/** Data access bit fault handler. |
546,6 → 557,7 |
{ |
pte_t *t; |
|
page_table_lock(AS, true); |
t = page_mapping_find(AS, istate->cr_ifa); |
ASSERT(t && t->p); |
if (t && t->p) { |
556,6 → 568,7 |
t->a = true; |
dtc_pte_copy(t); |
} |
page_table_unlock(AS, true); |
} |
|
/** Page not present fault handler. |
570,6 → 583,7 |
pte_t *t; |
|
va = istate->cr_ifa; /* faulting address */ |
page_table_lock(AS, true); |
t = page_mapping_find(AS, va); |
ASSERT(t); |
|
582,7 → 596,9 |
itc_pte_copy(t); |
else |
dtc_pte_copy(t); |
page_table_unlock(AS, true); |
} else { |
page_table_unlock(AS, true); |
if (!as_page_fault(va)) { |
panic("%s: va=%P, rid=%d\n", __FUNCTION__, va, rr.map.rid); |
} |