summaryrefslogtreecommitdiffstats
path: root/mm-add-pte_present-check-on-existing-hugetlb_entry-callbacks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mm-add-pte_present-check-on-existing-hugetlb_entry-callbacks.patch')
-rw-r--r--mm-add-pte_present-check-on-existing-hugetlb_entry-callbacks.patch71
1 files changed, 0 insertions, 71 deletions
diff --git a/mm-add-pte_present-check-on-existing-hugetlb_entry-callbacks.patch b/mm-add-pte_present-check-on-existing-hugetlb_entry-callbacks.patch
deleted file mode 100644
index 0227d27d8..000000000
--- a/mm-add-pte_present-check-on-existing-hugetlb_entry-callbacks.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-Bugzilla: 1104097 1105042
-Upstream-status: Queued in linux-next, CC'd to stable
-
-From ecc894926ef62080c2a4c4286eccce9d2f30f05a Mon Sep 17 00:00:00 2001
-From: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
-Date: Fri, 6 Jun 2014 10:00:01 -0400
-Subject: [PATCH] mm: add !pte_present() check on existing hugetlb_entry
- callbacks
-
-Page table walker doesn't check non-present hugetlb entry in common path,
-so hugetlb_entry() callbacks must check it. The reason for this behavior
-is that some callers want to handle it in its own way.
-
-However, some callers don't check it now, which causes unpredictable
-result, for example when we have a race between migrating hugepage and
-reading /proc/pid/numa_maps. This patch fixes it by adding !pte_present
-checks on buggy callbacks.
-
-This bug exists for years and got visible by introducing hugepage migration.
-
-ChangeLog v2:
-- fix if condition (check !pte_present() instead of pte_present())
-
-Reported-by: Sasha Levin <sasha.levin@oracle.com>
-Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
-Cc: Rik van Riel <riel@redhat.com>
-Cc: <stable@vger.kernel.org> [3.12+]
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-
-[ Backported to 3.15. Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> ]
----
- fs/proc/task_mmu.c | 3 +++
- mm/mempolicy.c | 6 +++++-
- 2 files changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index 442177b1119a..89620cdb57c9 100644
---- a/fs/proc/task_mmu.c
-+++ b/fs/proc/task_mmu.c
-@@ -1354,6 +1354,9 @@ static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask,
- if (pte_none(*pte))
- return 0;
-
-+ if (!pte_present(*pte))
-+ return 0;
-+
- page = pte_page(*pte);
- if (!page)
- return 0;
-diff --git a/mm/mempolicy.c b/mm/mempolicy.c
-index 78e1472933ea..30cc47f8ffa0 100644
---- a/mm/mempolicy.c
-+++ b/mm/mempolicy.c
-@@ -526,9 +526,13 @@ static void queue_pages_hugetlb_pmd_range(struct vm_area_struct *vma,
- int nid;
- struct page *page;
- spinlock_t *ptl;
-+ pte_t entry;
-
- ptl = huge_pte_lock(hstate_vma(vma), vma->vm_mm, (pte_t *)pmd);
-- page = pte_page(huge_ptep_get((pte_t *)pmd));
-+ entry = huge_ptep_get((pte_t *)pmd);
-+ if (!pte_present(entry))
-+ goto unlock;
-+ page = pte_page(entry);
- nid = page_to_nid(page);
- if (node_isset(nid, *nodes) == !!(flags & MPOL_MF_INVERT))
- goto unlock;
---
-1.9.3
-