diff options
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/mm/memory.c b/mm/memory.c index 92e6a6299e86..d7921760cf79 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -3018,9 +3018,9 @@ static int do_numa_page(struct mm_struct *mm, struct vm_area_struct *vma, | |||
3018 | * validation through pte_unmap_same(). It's of NUMA type but | 3018 | * validation through pte_unmap_same(). It's of NUMA type but |
3019 | * the pfn may be screwed if the read is non atomic. | 3019 | * the pfn may be screwed if the read is non atomic. |
3020 | * | 3020 | * |
3021 | * ptep_modify_prot_start is not called as this is clearing | 3021 | * We can safely just do a "set_pte_at()", because the old |
3022 | * the _PAGE_NUMA bit and it is not really expected that there | 3022 | * page table entry is not accessible, so there would be no |
3023 | * would be concurrent hardware modifications to the PTE. | 3023 | * concurrent hardware modifications to the PTE. |
3024 | */ | 3024 | */ |
3025 | ptl = pte_lockptr(mm, pmd); | 3025 | ptl = pte_lockptr(mm, pmd); |
3026 | spin_lock(ptl); | 3026 | spin_lock(ptl); |
@@ -3029,7 +3029,9 @@ static int do_numa_page(struct mm_struct *mm, struct vm_area_struct *vma, | |||
3029 | goto out; | 3029 | goto out; |
3030 | } | 3030 | } |
3031 | 3031 | ||
3032 | pte = pte_mknonnuma(pte); | 3032 | /* Make it present again */ |
3033 | pte = pte_modify(pte, vma->vm_page_prot); | ||
3034 | pte = pte_mkyoung(pte); | ||
3033 | set_pte_at(mm, addr, ptep, pte); | 3035 | set_pte_at(mm, addr, ptep, pte); |
3034 | update_mmu_cache(vma, addr, ptep); | 3036 | update_mmu_cache(vma, addr, ptep); |
3035 | 3037 | ||