Message ID | 20230302222404.175303-1-jthoughton@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm: teach mincore_hugetlb about pte markers | expand |
On Thu, Mar 02, 2023 at 10:24:04PM +0000, James Houghton wrote: > By checking huge_pte_none(), we incorrectly classify PTE markers as > "present". Instead, check huge_pte_none_mostly(), classifying PTE > markers the same as if the PTE were completely blank. > > PTE markers, unlike other kinds of swap entries, don't reference any > physical page and don't indicate that a physical page was mapped > previously. As such, treat them as non-present for the sake of > mincore(). > > Fixes: 5c041f5d1f23 ("mm: teach core mm about pte markers") > Signed-off-by: James Houghton <jthoughton@google.com> Acked-by: Peter Xu <peterx@redhat.com> Thanks, James.
On Thu, 2 Mar 2023 17:32:48 -0500 Peter Xu <peterx@redhat.com> wrote: > On Thu, Mar 02, 2023 at 10:24:04PM +0000, James Houghton wrote: > > By checking huge_pte_none(), we incorrectly classify PTE markers as > > "present". Instead, check huge_pte_none_mostly(), classifying PTE > > markers the same as if the PTE were completely blank. > > > > PTE markers, unlike other kinds of swap entries, don't reference any > > physical page and don't indicate that a physical page was mapped > > previously. As such, treat them as non-present for the sake of > > mincore(). > > > > Fixes: 5c041f5d1f23 ("mm: teach core mm about pte markers") > > Signed-off-by: James Houghton <jthoughton@google.com> > > Acked-by: Peter Xu <peterx@redhat.com> > I think I'll add cc:stable to this.
On 02.03.23 23:24, James Houghton wrote: > By checking huge_pte_none(), we incorrectly classify PTE markers as > "present". Instead, check huge_pte_none_mostly(), classifying PTE > markers the same as if the PTE were completely blank. > > PTE markers, unlike other kinds of swap entries, don't reference any > physical page and don't indicate that a physical page was mapped > previously. As such, treat them as non-present for the sake of > mincore(). > > Fixes: 5c041f5d1f23 ("mm: teach core mm about pte markers") > Signed-off-by: James Houghton <jthoughton@google.com> > --- > mm/mincore.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/mincore.c b/mm/mincore.c > index cd69b9db0081..d359650b0f75 100644 > --- a/mm/mincore.c > +++ b/mm/mincore.c > @@ -33,7 +33,7 @@ static int mincore_hugetlb(pte_t *pte, unsigned long hmask, unsigned long addr, > * Hugepages under user process are always in RAM and never > * swapped out, but theoretically it needs to be checked. > */ > - present = pte && !huge_pte_none(huge_ptep_get(pte)); > + present = pte && !huge_pte_none_mostly(huge_ptep_get(pte)); > for (; addr != end; vec++, addr += PAGE_SIZE) > *vec = present; > walk->private = vec; Acked-by: David Hildenbrand <david@redhat.com>
diff --git a/mm/mincore.c b/mm/mincore.c index cd69b9db0081..d359650b0f75 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -33,7 +33,7 @@ static int mincore_hugetlb(pte_t *pte, unsigned long hmask, unsigned long addr, * Hugepages under user process are always in RAM and never * swapped out, but theoretically it needs to be checked. */ - present = pte && !huge_pte_none(huge_ptep_get(pte)); + present = pte && !huge_pte_none_mostly(huge_ptep_get(pte)); for (; addr != end; vec++, addr += PAGE_SIZE) *vec = present; walk->private = vec;
By checking huge_pte_none(), we incorrectly classify PTE markers as "present". Instead, check huge_pte_none_mostly(), classifying PTE markers the same as if the PTE were completely blank. PTE markers, unlike other kinds of swap entries, don't reference any physical page and don't indicate that a physical page was mapped previously. As such, treat them as non-present for the sake of mincore(). Fixes: 5c041f5d1f23 ("mm: teach core mm about pte markers") Signed-off-by: James Houghton <jthoughton@google.com> --- mm/mincore.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)