Changeset 2a2fbc8 in mainline for kernel/arch/ia64/src/mm/tlb.c
- Timestamp:
- 2016-09-01T17:05:13Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 42d08592
- Parents:
- f126c87 (diff), fb63c06 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/mm/tlb.c
rf126c87 r2a2fbc8 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 494 /* 495 495 * The mapping was found in software page hash table. 496 496 * Insert it into data translation cache. 497 497 */ 498 itc_pte_copy( t);498 itc_pte_copy(&t); 499 499 } else { 500 500 /* … … 600 600 601 601 602 pte_t *entry = page_mapping_find(as, va, true); 603 if (entry) { 602 pte_t t; 603 bool found = page_mapping_find(as, va, true, &t); 604 if (found) { 604 605 /* 605 606 * The mapping was found in the software page hash table. 606 607 * Insert it into data translation cache. 607 608 */ 608 dtc_pte_copy( entry);609 dtc_pte_copy(&t); 609 610 } else { 610 611 if (try_memmap_io_insertion(va, istate)) … … 641 642 { 642 643 uintptr_t va; 643 pte_t *t;644 pte_t t; 644 645 as_t *as = AS; 645 646 … … 649 650 as = AS_KERNEL; 650 651 651 t = page_mapping_find(as, va, true); 652 ASSERT((t) && (t->p)); 653 if ((t) && (t->p) && (t->w)) { 652 bool found = page_mapping_find(as, va, true, &t); 653 654 ASSERT(found); 655 ASSERT(t.p); 656 657 if (found && t.p && t.w) { 654 658 /* 655 659 * Update the Dirty bit in page tables and reinsert 656 660 * the mapping into DTC. 657 661 */ 658 t->d = true; 659 dtc_pte_copy(t); 662 t.d = true; 663 dtc_pte_copy(&t); 664 page_mapping_update(as, va, true, &t); 660 665 } else { 661 666 as_page_fault(va, PF_ACCESS_WRITE, istate); … … 672 677 { 673 678 uintptr_t va; 674 pte_t *t;679 pte_t t; 675 680 676 681 va = istate->cr_ifa; /* faulting address */ … … 678 683 ASSERT(!is_kernel_fault(va)); 679 684 680 t = page_mapping_find(AS, va, true); 681 ASSERT((t) && (t->p)); 682 if ((t) && (t->p) && (t->x)) { 685 bool found = page_mapping_find(AS, va, true, &t); 686 687 ASSERT(found); 688 ASSERT(t.p); 689 690 if (found && t.p && t.x) { 683 691 /* 684 692 * Update the Accessed bit in page tables and reinsert 685 693 * the mapping into ITC. 686 694 */ 687 t->a = true; 688 itc_pte_copy(t); 695 t.a = true; 696 itc_pte_copy(&t); 697 page_mapping_update(AS, va, true, &t); 689 698 } else { 690 699 as_page_fault(va, PF_ACCESS_EXEC, istate); … … 701 710 { 702 711 uintptr_t va; 703 pte_t *t;712 pte_t t; 704 713 as_t *as = AS; 705 714 … … 709 718 as = AS_KERNEL; 710 719 711 t = page_mapping_find(as, va, true); 712 ASSERT((t) && (t->p)); 713 if ((t) && (t->p)) { 720 bool found = page_mapping_find(as, va, true, &t); 721 722 ASSERT(found); 723 ASSERT(t.p); 724 725 if (found && t.p) { 714 726 /* 715 727 * Update the Accessed bit in page tables and reinsert 716 728 * the mapping into DTC. 717 729 */ 718 t->a = true; 719 dtc_pte_copy(t); 730 t.a = true; 731 dtc_pte_copy(&t); 732 page_mapping_update(as, va, true, &t); 720 733 } else { 721 734 if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { … … 736 749 { 737 750 uintptr_t va; 738 pte_t *t;751 pte_t t; 739 752 740 753 va = istate->cr_ifa; /* faulting address */ … … 745 758 * Assume a write to a read-only page. 746 759 */ 747 t = page_mapping_find(AS, va, true); 748 ASSERT((t) && (t->p)); 749 ASSERT(!t->w); 760 bool found = page_mapping_find(AS, va, true, &t); 761 762 ASSERT(found); 763 ASSERT(t.p); 764 ASSERT(!t.w); 765 750 766 as_page_fault(va, PF_ACCESS_WRITE, istate); 751 767 } … … 760 776 { 761 777 uintptr_t va; 762 pte_t *t;778 pte_t t; 763 779 764 780 va = istate->cr_ifa; /* faulting address */ … … 766 782 ASSERT(!is_kernel_fault(va)); 767 783 768 t = page_mapping_find(AS, va, true); 769 ASSERT(t); 770 771 if (t->p) { 784 bool found = page_mapping_find(AS, va, true, &t); 785 786 ASSERT(found); 787 788 if (t.p) { 772 789 /* 773 790 * If the Present bit is set in page hash table, just copy it 774 791 * and update ITC/DTC. 775 792 */ 776 if (t ->x)777 itc_pte_copy( t);793 if (t.x) 794 itc_pte_copy(&t); 778 795 else 779 dtc_pte_copy( t);796 dtc_pte_copy(&t); 780 797 } else { 781 798 as_page_fault(va, PF_ACCESS_READ, istate);
Note:
See TracChangeset
for help on using the changeset viewer.