From: Zach O'Keefe Date: Wed, 20 Jul 2022 14:06:02 +0000 (-0700) Subject: mm/khugepaged: delay computation of hpage boundaries until use X-Git-Tag: howlett/maple/20220722_2~36 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e6f776d7b69d8d1bc3341c6c2f3c497c9a44f3c0;p=users%2Fjedix%2Flinux-maple.git mm/khugepaged: delay computation of hpage boundaries until use Only compute hstart/hend once we've passed all checks that would cause early return in madvise_collapse(). Link: https://lkml.kernel.org/r/20220720140603.1958773-4-zokeefe@google.com Fixes: c9d968ffd9ba ("mm/madvise: introduce MADV_COLLAPSE sync hugepage collapse") Signed-off-by: Zach O'Keefe Reviewed-by: Yang Shi Cc: Alex Shi Cc: Andrea Arcangeli Cc: Arnd Bergmann Cc: Axel Rasmussen Cc: Chris Kennelly Cc: Chris Zankel Cc: Dan Carpenter Cc: David Hildenbrand Cc: David Rientjes Cc: Helge Deller Cc: Hugh Dickins Cc: Ivan Kokshaysky Cc: James Bottomley Cc: Jens Axboe Cc: "Kirill A. Shutemov" Cc: Matthew Wilcox Cc: Matt Turner Cc: Max Filippov Cc: Miaohe Lin Cc: Michal Hocko Cc: Minchan Kim Cc: Pasha Tatashin Cc: Pavel Begunkov Cc: Peter Xu Cc: Rongwei Wang Cc: SeongJae Park Cc: Song Liu Cc: "Souptick Joarder (HPE)" Cc: Thomas Bogendoerfer Cc: Vlastimil Babka Cc: Zi Yan Signed-off-by: Andrew Morton --- diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 66314506e3ee9..6eec731bb925f 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -2416,9 +2416,6 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, if (!vma->anon_vma || !vma_is_anonymous(vma)) return -EINVAL; - hstart = (start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK; - hend = end & HPAGE_PMD_MASK; - if (!hugepage_vma_check(vma, vma->vm_flags, false, false, false)) return -EINVAL; @@ -2431,6 +2428,9 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, mmgrab(mm); lru_add_drain_all(); + hstart = (start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK; + hend = end & HPAGE_PMD_MASK; + for (addr = hstart; addr < hend; addr += HPAGE_PMD_SIZE) { int result = SCAN_FAIL;