Rev 2089 | Rev 2745 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2089 | Rev 2462 | ||
|---|---|---|---|
| Line 468... | Line 468... | ||
| 468 | * Forward the page fault to address space page fault handler. |
468 | * Forward the page fault to address space page fault handler. |
| 469 | */ |
469 | */ |
| 470 | page_table_unlock(AS, true); |
470 | page_table_unlock(AS, true); |
| 471 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
471 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
| 472 | fault_if_from_uspace(istate,"Page fault at %p",va); |
472 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 473 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
473 | panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
| 474 | } |
474 | } |
| 475 | } |
475 | } |
| 476 | } |
476 | } |
| 477 | 477 | ||
| 478 | /** Data TLB fault handler for faults with VHPT turned off. |
478 | /** Data TLB fault handler for faults with VHPT turned off. |
| Line 515... | Line 515... | ||
| 515 | * Forward the page fault to the address space page fault handler. |
515 | * Forward the page fault to the address space page fault handler. |
| 516 | */ |
516 | */ |
| 517 | page_table_unlock(AS, true); |
517 | page_table_unlock(AS, true); |
| 518 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
518 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| 519 | fault_if_from_uspace(istate,"Page fault at %p",va); |
519 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 520 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
520 | panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
| 521 | } |
521 | } |
| 522 | } |
522 | } |
| 523 | } |
523 | } |
| 524 | 524 | ||
| 525 | /** Data nested TLB fault handler. |
525 | /** Data nested TLB fault handler. |
| Line 529... | Line 529... | ||
| 529 | * @param vector Interruption vector. |
529 | * @param vector Interruption vector. |
| 530 | * @param istate Structure with saved interruption state. |
530 | * @param istate Structure with saved interruption state. |
| 531 | */ |
531 | */ |
| 532 | void data_nested_tlb_fault(uint64_t vector, istate_t *istate) |
532 | void data_nested_tlb_fault(uint64_t vector, istate_t *istate) |
| 533 | { |
533 | { |
| 534 | panic("%s\n", __FUNCTION__); |
534 | panic("%s\n", __func__); |
| 535 | } |
535 | } |
| 536 | 536 | ||
| 537 | /** Data Dirty bit fault handler. |
537 | /** Data Dirty bit fault handler. |
| 538 | * |
538 | * |
| 539 | * @param vector Interruption vector. |
539 | * @param vector Interruption vector. |
| Line 561... | Line 561... | ||
| 561 | t->d = true; |
561 | t->d = true; |
| 562 | dtc_pte_copy(t); |
562 | dtc_pte_copy(t); |
| 563 | } else { |
563 | } else { |
| 564 | if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) { |
564 | if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) { |
| 565 | fault_if_from_uspace(istate,"Page fault at %p",va); |
565 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 566 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
566 | panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
| 567 | t->d = true; |
567 | t->d = true; |
| 568 | dtc_pte_copy(t); |
568 | dtc_pte_copy(t); |
| 569 | } |
569 | } |
| 570 | } |
570 | } |
| 571 | page_table_unlock(AS, true); |
571 | page_table_unlock(AS, true); |
| Line 598... | Line 598... | ||
| 598 | t->a = true; |
598 | t->a = true; |
| 599 | itc_pte_copy(t); |
599 | itc_pte_copy(t); |
| 600 | } else { |
600 | } else { |
| 601 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
601 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
| 602 | fault_if_from_uspace(istate,"Page fault at %p",va); |
602 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 603 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
603 | panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
| 604 | t->a = true; |
604 | t->a = true; |
| 605 | itc_pte_copy(t); |
605 | itc_pte_copy(t); |
| 606 | } |
606 | } |
| 607 | } |
607 | } |
| 608 | page_table_unlock(AS, true); |
608 | page_table_unlock(AS, true); |
| Line 635... | Line 635... | ||
| 635 | t->a = true; |
635 | t->a = true; |
| 636 | dtc_pte_copy(t); |
636 | dtc_pte_copy(t); |
| 637 | } else { |
637 | } else { |
| 638 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
638 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| 639 | fault_if_from_uspace(istate,"Page fault at %p",va); |
639 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 640 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
640 | panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
| 641 | t->a = true; |
641 | t->a = true; |
| 642 | itc_pte_copy(t); |
642 | itc_pte_copy(t); |
| 643 | } |
643 | } |
| 644 | } |
644 | } |
| 645 | page_table_unlock(AS, true); |
645 | page_table_unlock(AS, true); |
| Line 677... | Line 677... | ||
| 677 | page_table_unlock(AS, true); |
677 | page_table_unlock(AS, true); |
| 678 | } else { |
678 | } else { |
| 679 | page_table_unlock(AS, true); |
679 | page_table_unlock(AS, true); |
| 680 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
680 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| 681 | fault_if_from_uspace(istate,"Page fault at %p",va); |
681 | fault_if_from_uspace(istate,"Page fault at %p",va); |
| 682 | panic("%s: va=%p, rid=%d\n", __FUNCTION__, va, rid); |
682 | panic("%s: va=%p, rid=%d\n", __func__, va, rid); |
| 683 | } |
683 | } |
| 684 | } |
684 | } |
| 685 | } |
685 | } |
| 686 | 686 | ||
| 687 | /** @} |
687 | /** @} |