Patch "mm/mlock: remove lru_lock on TestClearPageMlocked" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mm/mlock: remove lru_lock on TestClearPageMlocked

to the 5.10-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:
     mm-mlock-remove-lru_lock-on-testclearpagemlocked.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b824ddafd0a14e7a943171ce5903b83057e0c587
Author: Alex Shi <alexs@xxxxxxxxxx>
Date:   Tue Dec 15 12:34:07 2020 -0800

    mm/mlock: remove lru_lock on TestClearPageMlocked
    
    [ Upstream commit 3db19aa39bac33f2e850fa1ddd67be29b192e51f ]
    
    In the func munlock_vma_page, comments mentained lru_lock needed for
    serialization with split_huge_pages.  But the page must be PageLocked as
    well as pages in split_huge_page series funcs.  Thus the PageLocked is
    enough to serialize both funcs.
    
    Further more, Hugh Dickins pointed: before splitting in
    split_huge_page_to_list, the page was unmap_page() to remove pmd/ptes
    which protect the page from munlock.  Thus, no needs to guard
    __split_huge_page_tail for mlock clean, just keep the lru_lock there for
    isolation purpose.
    
    LKP found a preempt issue on __mod_zone_page_state which need change to
    mod_zone_page_state.  Thanks!
    
    Link: https://lkml.kernel.org/r/1604566549-62481-13-git-send-email-alex.shi@xxxxxxxxxxxxxxxxx
    Signed-off-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx>
    Acked-by: Hugh Dickins <hughd@xxxxxxxxxx>
    Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx>
    Acked-by: Vlastimil Babka <vbabka@xxxxxxx>
    Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
    Cc: Alexander Duyck <alexander.duyck@xxxxxxxxx>
    Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx>
    Cc: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx>
    Cc: "Chen, Rong A" <rong.a.chen@xxxxxxxxx>
    Cc: Daniel Jordan <daniel.m.jordan@xxxxxxxxxx>
    Cc: "Huang, Ying" <ying.huang@xxxxxxxxx>
    Cc: Jann Horn <jannh@xxxxxxxxxx>
    Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
    Cc: Kirill A. Shutemov <kirill@xxxxxxxxxxxxx>
    Cc: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx>
    Cc: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx>
    Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx>
    Cc: Michal Hocko <mhocko@xxxxxxxxxx>
    Cc: Michal Hocko <mhocko@xxxxxxxx>
    Cc: Mika Penttilä <mika.penttila@xxxxxxxxxxxx>
    Cc: Minchan Kim <minchan@xxxxxxxxxx>
    Cc: Shakeel Butt <shakeelb@xxxxxxxxxx>
    Cc: Tejun Heo <tj@xxxxxxxxxx>
    Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
    Cc: Vladimir Davydov <vdavydov.dev@xxxxxxxxx>
    Cc: Wei Yang <richard.weiyang@xxxxxxxxx>
    Cc: Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx>
    Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
    Stable-dep-of: 829ae0f81ce0 ("mm: migrate: fix THP's mapcount on isolation")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/mm/mlock.c b/mm/mlock.c
index 884b1216da6a..796c726a0407 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -187,40 +187,24 @@ static void __munlock_isolation_failed(struct page *page)
 unsigned int munlock_vma_page(struct page *page)
 {
 	int nr_pages;
-	pg_data_t *pgdat = page_pgdat(page);
 
 	/* For try_to_munlock() and to serialize with page migration */
 	BUG_ON(!PageLocked(page));
-
 	VM_BUG_ON_PAGE(PageTail(page), page);
 
-	/*
-	 * Serialize with any parallel __split_huge_page_refcount() which
-	 * might otherwise copy PageMlocked to part of the tail pages before
-	 * we clear it in the head page. It also stabilizes thp_nr_pages().
-	 */
-	spin_lock_irq(&pgdat->lru_lock);
-
 	if (!TestClearPageMlocked(page)) {
 		/* Potentially, PTE-mapped THP: do not skip the rest PTEs */
-		nr_pages = 1;
-		goto unlock_out;
+		return 0;
 	}
 
 	nr_pages = thp_nr_pages(page);
-	__mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
+	mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
 
-	if (__munlock_isolate_lru_page(page, true)) {
-		spin_unlock_irq(&pgdat->lru_lock);
+	if (!isolate_lru_page(page))
 		__munlock_isolated_page(page);
-		goto out;
-	}
-	__munlock_isolation_failed(page);
-
-unlock_out:
-	spin_unlock_irq(&pgdat->lru_lock);
+	else
+		__munlock_isolation_failed(page);
 
-out:
 	return nr_pages - 1;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux