Rev 1411 | Rev 1675 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1411 | Rev 1621 | ||
|---|---|---|---|
| Line 43... | Line 43... | ||
| 43 | #include <arch/asm.h> |
43 | #include <arch/asm.h> |
| 44 | #include <typedefs.h> |
44 | #include <typedefs.h> |
| 45 | #include <panic.h> |
45 | #include <panic.h> |
| 46 | #include <print.h> |
46 | #include <print.h> |
| 47 | #include <arch.h> |
47 | #include <arch.h> |
| - | 48 | #include <interrupt.h> |
|
| 48 | 49 | ||
| 49 | /** Invalidate all TLB entries. */ |
50 | /** Invalidate all TLB entries. */ |
| 50 | void tlb_invalidate_all(void) |
51 | void tlb_invalidate_all(void) |
| 51 | { |
52 | { |
| 52 | ipl_t ipl; |
53 | ipl_t ipl; |
| Line 450... | Line 451... | ||
| 450 | /* |
451 | /* |
| 451 | * Forward the page fault to address space page fault handler. |
452 | * Forward the page fault to address space page fault handler. |
| 452 | */ |
453 | */ |
| 453 | page_table_unlock(AS, true); |
454 | page_table_unlock(AS, true); |
| 454 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
455 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
| - | 456 | fault_if_from_uspace(istate,"Page fault at %P",va); |
|
| 455 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
457 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
| 456 | } |
458 | } |
| 457 | } |
459 | } |
| 458 | } |
460 | } |
| 459 | 461 | ||
| Line 496... | Line 498... | ||
| 496 | /* |
498 | /* |
| 497 | * Forward the page fault to address space page fault handler. |
499 | * Forward the page fault to address space page fault handler. |
| 498 | */ |
500 | */ |
| 499 | page_table_unlock(AS, true); |
501 | page_table_unlock(AS, true); |
| 500 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
502 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| - | 503 | fault_if_from_uspace(istate,"Page fault at %P",va); |
|
| 501 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
504 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
| 502 | } |
505 | } |
| 503 | } |
506 | } |
| 504 | } |
507 | } |
| 505 | 508 | ||
| Line 541... | Line 544... | ||
| 541 | */ |
544 | */ |
| 542 | t->d = true; |
545 | t->d = true; |
| 543 | dtc_pte_copy(t); |
546 | dtc_pte_copy(t); |
| 544 | } else { |
547 | } else { |
| 545 | if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) { |
548 | if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) { |
| - | 549 | fault_if_from_uspace(istate,"Page fault at %P",va); |
|
| 546 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
550 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
| 547 | t->d = true; |
551 | t->d = true; |
| 548 | dtc_pte_copy(t); |
552 | dtc_pte_copy(t); |
| 549 | } |
553 | } |
| 550 | } |
554 | } |
| Line 577... | Line 581... | ||
| 577 | */ |
581 | */ |
| 578 | t->a = true; |
582 | t->a = true; |
| 579 | itc_pte_copy(t); |
583 | itc_pte_copy(t); |
| 580 | } else { |
584 | } else { |
| 581 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
585 | if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
| - | 586 | fault_if_from_uspace(istate,"Page fault at %P",va); |
|
| 582 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
587 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
| 583 | t->a = true; |
588 | t->a = true; |
| 584 | itc_pte_copy(t); |
589 | itc_pte_copy(t); |
| 585 | } |
590 | } |
| 586 | } |
591 | } |
| Line 613... | Line 618... | ||
| 613 | */ |
618 | */ |
| 614 | t->a = true; |
619 | t->a = true; |
| 615 | dtc_pte_copy(t); |
620 | dtc_pte_copy(t); |
| 616 | } else { |
621 | } else { |
| 617 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
622 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| - | 623 | fault_if_from_uspace(istate,"Page fault at %P",va); |
|
| 618 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
624 | panic("%s: va=%p, rid=%d, iip=%p\n", __FUNCTION__, va, rid, istate->cr_iip); |
| 619 | t->a = true; |
625 | t->a = true; |
| 620 | itc_pte_copy(t); |
626 | itc_pte_copy(t); |
| 621 | } |
627 | } |
| 622 | } |
628 | } |
| Line 654... | Line 660... | ||
| 654 | dtc_pte_copy(t); |
660 | dtc_pte_copy(t); |
| 655 | page_table_unlock(AS, true); |
661 | page_table_unlock(AS, true); |
| 656 | } else { |
662 | } else { |
| 657 | page_table_unlock(AS, true); |
663 | page_table_unlock(AS, true); |
| 658 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
664 | if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
| - | 665 | fault_if_from_uspace(istate,"Page fault at %P",va); |
|
| 659 | panic("%s: va=%p, rid=%d\n", __FUNCTION__, va, rid); |
666 | panic("%s: va=%p, rid=%d\n", __FUNCTION__, va, rid); |
| 660 | } |
667 | } |
| 661 | } |
668 | } |
| 662 | } |
669 | } |