|
@@ -1198,8 +1198,20 @@ munmap_back:
|
|
|
goto free_vma;
|
|
|
}
|
|
|
|
|
|
- if (vma_wants_writenotify(vma))
|
|
|
+ if (vma_wants_writenotify(vma)) {
|
|
|
+ pgprot_t pprot = vma->vm_page_prot;
|
|
|
+
|
|
|
+ /* Can vma->vm_page_prot have changed??
|
|
|
+ *
|
|
|
+ * Answer: Yes, drivers may have changed it in their
|
|
|
+ * f_op->mmap method.
|
|
|
+ *
|
|
|
+ * Ensures that vmas marked as uncached stay that way.
|
|
|
+ */
|
|
|
vma->vm_page_prot = vm_get_page_prot(vm_flags & ~VM_SHARED);
|
|
|
+ if (pgprot_val(pprot) == pgprot_val(pgprot_noncached(pprot)))
|
|
|
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
|
|
+ }
|
|
|
|
|
|
vma_link(mm, vma, prev, rb_link, rb_parent);
|
|
|
file = vma->vm_file;
|