Changeset 38dc82d in mainline for kernel/arch/ia64/src/mm/tlb.c
- Timestamp:
- 2016-08-31T14:16:45Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 346b12a2
- Parents:
- dc05a9a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/mm/tlb.c
rdc05a9a r38dc82d 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); 660 664 } else { 661 665 as_page_fault(va, PF_ACCESS_WRITE, istate); … … 672 676 { 673 677 uintptr_t va; 674 pte_t *t;678 pte_t t; 675 679 676 680 va = istate->cr_ifa; /* faulting address */ … … 678 682 ASSERT(!is_kernel_fault(va)); 679 683 680 t = page_mapping_find(AS, va, true); 681 ASSERT((t) && (t->p)); 682 if ((t) && (t->p) && (t->x)) { 684 bool found = page_mapping_find(AS, va, true, &t); 685 686 ASSERT(found); 687 ASSERT(t.p); 688 689 if (found && t.p && t.x) { 683 690 /* 684 691 * Update the Accessed bit in page tables and reinsert 685 692 * the mapping into ITC. 686 693 */ 687 t ->a = true;688 itc_pte_copy( t);694 t.a = true; 695 itc_pte_copy(&t); 689 696 } else { 690 697 as_page_fault(va, PF_ACCESS_EXEC, istate); … … 701 708 { 702 709 uintptr_t va; 703 pte_t *t;710 pte_t t; 704 711 as_t *as = AS; 705 712 … … 709 716 as = AS_KERNEL; 710 717 711 t = page_mapping_find(as, va, true); 712 ASSERT((t) && (t->p)); 713 if ((t) && (t->p)) { 718 bool found = page_mapping_find(as, va, true, &t); 719 720 ASSERT(found); 721 ASSERT(t.p); 722 723 if (found && t.p) { 714 724 /* 715 725 * Update the Accessed bit in page tables and reinsert 716 726 * the mapping into DTC. 717 727 */ 718 t ->a = true;719 dtc_pte_copy( t);728 t.a = true; 729 dtc_pte_copy(&t); 720 730 } else { 721 731 if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { … … 736 746 { 737 747 uintptr_t va; 738 pte_t *t;748 pte_t t; 739 749 740 750 va = istate->cr_ifa; /* faulting address */ … … 745 755 * Assume a write to a read-only page. 746 756 */ 747 t = page_mapping_find(AS, va, true); 748 ASSERT((t) && (t->p)); 749 ASSERT(!t->w); 757 bool found = page_mapping_find(AS, va, true, &t); 758 759 ASSERT(found); 760 ASSERT(t.p); 761 ASSERT(!t.w); 762 750 763 as_page_fault(va, PF_ACCESS_WRITE, istate); 751 764 } … … 760 773 { 761 774 uintptr_t va; 762 pte_t *t;775 pte_t t; 763 776 764 777 va = istate->cr_ifa; /* faulting address */ … … 766 779 ASSERT(!is_kernel_fault(va)); 767 780 768 t = page_mapping_find(AS, va, true); 769 ASSERT(t); 770 771 if (t->p) { 781 bool found = page_mapping_find(AS, va, true, &t); 782 783 ASSERT(found); 784 785 if (t.p) { 772 786 /* 773 787 * If the Present bit is set in page hash table, just copy it 774 788 * and update ITC/DTC. 775 789 */ 776 if (t ->x)777 itc_pte_copy( t);790 if (t.x) 791 itc_pte_copy(&t); 778 792 else 779 dtc_pte_copy( t);793 dtc_pte_copy(&t); 780 794 } else { 781 795 as_page_fault(va, PF_ACCESS_READ, istate);
Note:
See TracChangeset
for help on using the changeset viewer.