Patch "numa: fix /proc/<pid>/numa_maps for hugetlbfs on s390" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
numa: fix /proc/<pid>/numa_maps for hugetlbfs on s390
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
numa-fix-proc-pid-numa_maps-for-hugetlbfs-on-s390.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
5c2ff95e41c9290d16556cd02e35b25d81be8fe0Mon Sep 17 00:00:00 2001
From: Michael Holzheu <[email protected]>
Date: Tue, 2 Feb 2016 16:57:26 -0800
Subject: numa: fix /proc/<pid>/numa_maps for hugetlbfs on s390
From: Michael Holzheu <[email protected]>
commit 5c2ff95e41c9290d16556cd02e35b25d81be8fe0 upstream.
When working with hugetlbfs ptes (which are actually pmds) is not valid to directly use pte functions like pte_present() because the hardware bit layout of pmds and ptes can be different. This is the case on s390. Therefore we have to convert the hugetlbfs ptes first into a valid pte encoding with huge_ptep_get().
Currently the /proc/<pid>/numa_maps code uses hugetlbfs ptes without huge_ptep_get(). On s390 this leads to the following two problems:
1) The pte_present() function returns false (instead of true) for PROT_NONE hugetlb ptes. Therefore PROT_NONE vmas are missing completely in the "numa_maps" output.
2) The pte_dirty() function always returns false for all hugetlb ptes. Therefore these pages are reported as "mapped=xxx" instead of "dirty=xxx".
Therefore use huge_ptep_get() to correctly convert the hugetlb ptes.
--- fs/proc/task_mmu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
fs/proc/task_mmu.c +4 -3
@@ -1473,18 +1473,19 @@ static int gather_pte_stats(pmd_t *pmd,static int gather_hugetlb_stats (pte_t *pte,unsigned long hmask,unsigned long addr,unsigned long end,struct mm_walk *walk) { +pte_t huge_pte =huge_ptep_get (pte);struct numa_maps *md;struct page *page; -if (!pte_present (*pte)) +if (!pte_present (huge_pte))return 0 ; - page =pte_page (*pte); + page =pte_page (huge_pte);if (!page)return 0 ; md = walk->private; -gather_stats (page, md,pte_dirty (*pte),1 ); +gather_stats (page, md,pte_dirty (huge_pte),1 );return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/numa-fix-proc-pid-numa_maps-for-hugetlbfs-on-s390.patch