Message ID | 1bdf384c-8137-a149-2a1e-475a4791c3c@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm: page_vma_mapped_walk() cleanup and THP fixes | expand |
On Wed, Jun 09, 2021 at 11:54:46PM -0700, Hugh Dickins wrote: > Aha! Shouldn't that quick scan over pte_none()s make sure that it holds > ptlock in the PVMW_SYNC case? That too might have been responsible for > BUGs or WARNs in split_huge_page_to_list() or its unmap_page(), though > I've never seen any. > > Fixes: ace71a19cec5 ("mm: introduce page_vma_mapped_walk()") > Signed-off-by: Hugh Dickins <hughd@google.com> > Cc: <stable@vger.kernel.org> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
On Thu, 10 Jun 2021, Kirill A. Shutemov wrote: > On Wed, Jun 09, 2021 at 11:54:46PM -0700, Hugh Dickins wrote: > > Aha! Shouldn't that quick scan over pte_none()s make sure that it holds > > ptlock in the PVMW_SYNC case? That too might have been responsible for > > BUGs or WARNs in split_huge_page_to_list() or its unmap_page(), though > > I've never seen any. > > > > Fixes: ace71a19cec5 ("mm: introduce page_vma_mapped_walk()") > > Signed-off-by: Hugh Dickins <hughd@google.com> > > Cc: <stable@vger.kernel.org> > > Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Thanks Kirill. And Wang Yugui has now reported the good news, that this afterthought patch finally fixes the unmap_page() BUGs they were hitting on 5.10. Andrew, please add a link to https://lore.kernel.org/linux-mm/20210412180659.B9E3.409509F4@e16-tech.com/ and Tested-by: Wang Yugui <wangyugui@e16-tech.com> Thanks, Hugh
diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c index 6eb2f1863506..7ae4a016304b 100644 --- a/mm/page_vma_mapped.c +++ b/mm/page_vma_mapped.c @@ -277,6 +277,10 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw) goto restart; } pvmw->pte++; + if ((pvmw->flags & PVMW_SYNC) && !pvmw->ptl) { + pvmw->ptl = pte_lockptr(mm, pvmw->pmd); + spin_lock(pvmw->ptl); + } } while (pte_none(*pvmw->pte)); if (!pvmw->ptl) {
Aha! Shouldn't that quick scan over pte_none()s make sure that it holds ptlock in the PVMW_SYNC case? That too might have been responsible for BUGs or WARNs in split_huge_page_to_list() or its unmap_page(), though I've never seen any. Fixes: ace71a19cec5 ("mm: introduce page_vma_mapped_walk()") Signed-off-by: Hugh Dickins <hughd@google.com> Cc: <stable@vger.kernel.org> --- mm/page_vma_mapped.c | 4 ++++ 1 file changed, 4 insertions(+)