Changes in kernel/arch/ia64/src/mm/tlb.c [9928240:560b81c] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/mm/tlb.c
r9928240 r560b81c 484 484 { 485 485 uintptr_t va; 486 pte_t *t;486 pte_t t; 487 487 488 488 va = istate->cr_ifa; /* faulting address */ … … 490 490 ASSERT(!is_kernel_fault(va)); 491 491 492 t = page_mapping_find(AS, va, true); 493 if (t) { 492 bool found = page_mapping_find(AS, va, true, &t); 493 if (found) { 494 ASSERT(t.p); 495 494 496 /* 495 497 * The mapping was found in software page hash table. 496 498 * Insert it into data translation cache. 497 499 */ 498 itc_pte_copy( t);500 itc_pte_copy(&t); 499 501 } else { 500 502 /* … … 600 602 601 603 602 pte_t *entry = page_mapping_find(as, va, true); 603 if (entry) { 604 pte_t t; 605 bool found = page_mapping_find(as, va, true, &t); 606 if (found) { 607 ASSERT(t.p); 608 604 609 /* 605 610 * The mapping was found in the software page hash table. 606 611 * Insert it into data translation cache. 607 612 */ 608 dtc_pte_copy( entry);613 dtc_pte_copy(&t); 609 614 } else { 610 615 if (try_memmap_io_insertion(va, istate)) … … 641 646 { 642 647 uintptr_t va; 643 pte_t *t;648 pte_t t; 644 649 as_t *as = AS; 645 650 … … 649 654 as = AS_KERNEL; 650 655 651 t = page_mapping_find(as, va, true); 652 ASSERT((t) && (t->p)); 653 if ((t) && (t->p) && (t->w)) { 656 bool found = page_mapping_find(as, va, true, &t); 657 658 ASSERT(found); 659 ASSERT(t.p); 660 661 if (found && t.p && t.w) { 654 662 /* 655 663 * Update the Dirty bit in page tables and reinsert 656 664 * the mapping into DTC. 657 665 */ 658 t->d = true; 659 dtc_pte_copy(t); 666 t.d = true; 667 dtc_pte_copy(&t); 668 page_mapping_update(as, va, true, &t); 660 669 } else { 661 670 as_page_fault(va, PF_ACCESS_WRITE, istate); … … 672 681 { 673 682 uintptr_t va; 674 pte_t *t;683 pte_t t; 675 684 676 685 va = istate->cr_ifa; /* faulting address */ … … 678 687 ASSERT(!is_kernel_fault(va)); 679 688 680 t = page_mapping_find(AS, va, true); 681 ASSERT((t) && (t->p)); 682 if ((t) && (t->p) && (t->x)) { 689 bool found = page_mapping_find(AS, va, true, &t); 690 691 ASSERT(found); 692 ASSERT(t.p); 693 694 if (found && t.p && t.x) { 683 695 /* 684 696 * Update the Accessed bit in page tables and reinsert 685 697 * the mapping into ITC. 686 698 */ 687 t->a = true; 688 itc_pte_copy(t); 699 t.a = true; 700 itc_pte_copy(&t); 701 page_mapping_update(AS, va, true, &t); 689 702 } else { 690 703 as_page_fault(va, PF_ACCESS_EXEC, istate); … … 701 714 { 702 715 uintptr_t va; 703 pte_t *t;716 pte_t t; 704 717 as_t *as = AS; 705 718 … … 709 722 as = AS_KERNEL; 710 723 711 t = page_mapping_find(as, va, true); 712 ASSERT((t) && (t->p)); 713 if ((t) && (t->p)) { 724 bool found = page_mapping_find(as, va, true, &t); 725 726 ASSERT(found); 727 ASSERT(t.p); 728 729 if (found && t.p) { 714 730 /* 715 731 * Update the Accessed bit in page tables and reinsert 716 732 * the mapping into DTC. 717 733 */ 718 t->a = true; 719 dtc_pte_copy(t); 734 t.a = true; 735 dtc_pte_copy(&t); 736 page_mapping_update(as, va, true, &t); 720 737 } else { 721 738 if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { … … 736 753 { 737 754 uintptr_t va; 738 pte_t *t;755 pte_t t; 739 756 740 757 va = istate->cr_ifa; /* faulting address */ … … 745 762 * Assume a write to a read-only page. 746 763 */ 747 t = page_mapping_find(AS, va, true); 748 ASSERT((t) && (t->p)); 749 ASSERT(!t->w); 764 bool found = page_mapping_find(AS, va, true, &t); 765 766 ASSERT(found); 767 ASSERT(t.p); 768 ASSERT(!t.w); 769 750 770 as_page_fault(va, PF_ACCESS_WRITE, istate); 751 771 } … … 760 780 { 761 781 uintptr_t va; 762 pte_t *t;782 pte_t t; 763 783 764 784 va = istate->cr_ifa; /* faulting address */ … … 766 786 ASSERT(!is_kernel_fault(va)); 767 787 768 t = page_mapping_find(AS, va, true); 769 ASSERT(t); 770 771 if (t->p) { 788 bool found = page_mapping_find(AS, va, true, &t); 789 790 ASSERT(found); 791 792 if (t.p) { 772 793 /* 773 794 * If the Present bit is set in page hash table, just copy it 774 795 * and update ITC/DTC. 775 796 */ 776 if (t ->x)777 itc_pte_copy( t);797 if (t.x) 798 itc_pte_copy(&t); 778 799 else 779 dtc_pte_copy( t);800 dtc_pte_copy(&t); 780 801 } else { 781 802 as_page_fault(va, PF_ACCESS_READ, istate);
Note:
See TracChangeset
for help on using the changeset viewer.