]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - mm/huge_memory.c
Merge branch 'linus' into x86/urgent, to merge dependent patch
[mirror_ubuntu-artful-kernel.git] / mm / huge_memory.c
index 8e791a3db6b6804987ae587feff95c79ac940480..fc00c8cb5a82ee89addf4d2ee8983894bf6aa5d1 100644 (file)
@@ -1262,6 +1262,9 @@ int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
        bool migrated = false;
        int flags = 0;
 
+       /* A PROT_NONE fault should not end up here */
+       BUG_ON(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)));
+
        ptl = pmd_lock(mm, pmdp);
        if (unlikely(!pmd_same(pmd, *pmdp)))
                goto out_unlock;
@@ -1490,12 +1493,14 @@ int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
                        return 0;
                }
 
-               ret = 1;
-               entry = pmdp_get_and_clear_notify(mm, addr, pmd);
-               entry = pmd_modify(entry, newprot);
-               ret = HPAGE_PMD_NR;
-               set_pmd_at(mm, addr, pmd, entry);
-               BUG_ON(pmd_write(entry));
+               if (!prot_numa || !pmd_protnone(*pmd)) {
+                       ret = 1;
+                       entry = pmdp_get_and_clear_notify(mm, addr, pmd);
+                       entry = pmd_modify(entry, newprot);
+                       ret = HPAGE_PMD_NR;
+                       set_pmd_at(mm, addr, pmd, entry);
+                       BUG_ON(pmd_write(entry));
+               }
                spin_unlock(ptl);
        }