summaryrefslogtreecommitdiff
path: root/mm/hugetlb.c
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2013-04-26 09:14:47 +0300
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-04-26 09:14:47 +0300
commit9bf9d47a29afbf7a43eae74a988a4aefe88ccbfd (patch)
tree966b838e2190a7d6868cda5f4eee6d0f490da27c /mm/hugetlb.c
parente45f265e7ea3ee6de24efe91fe2928d603cb1741 (diff)
parent138f296e140f79cb955caba70690076fb14e6f6d (diff)
Merge branch '3.10/fb-mmap' into for-next
Merge topic branch to get vm_iomap_memory into use. Conflicts: drivers/video/fbmon.c
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r--mm/hugetlb.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index ca9a7c6d7e97..1a12f5b9a0ab 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2961,7 +2961,17 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
break;
}
- if (absent ||
+ /*
+ * We need call hugetlb_fault for both hugepages under migration
+ * (in which case hugetlb_fault waits for the migration,) and
+ * hwpoisoned hugepages (in which case we need to prevent the
+ * caller from accessing to them.) In order to do this, we use
+ * here is_swap_pte instead of is_hugetlb_entry_migration and
+ * is_hugetlb_entry_hwpoisoned. This is because it simply covers
+ * both cases, and because we can't follow correct pages
+ * directly from any kind of swap entries.
+ */
+ if (absent || is_swap_pte(huge_ptep_get(pte)) ||
((flags & FOLL_WRITE) && !pte_write(huge_ptep_get(pte)))) {
int ret;