* [PATCH v2 1/3] mm/memcg: revise the using condition of lock_page_lruvec function series @ 2020-12-22 5:20 Alex Shi 2020-12-22 5:20 ` [PATCH v2 2/3] mm/memcg: remove rcu locking for " Alex Shi 2020-12-22 5:20 ` [PATCH v2 3/3] mm/compaction: remove rcu_read_lock during page compaction Alex Shi 0 siblings, 2 replies; 4+ messages in thread From: Alex Shi @ 2020-12-22 5:20 UTC (permalink / raw) To: hughd Cc: Johannes Weiner, Michal Hocko, Vladimir Davydov, Andrew Morton, cgroups, linux-mm, linux-kernel lock_page_lruvec() and its variants are safe to use under the same conditions as commit_charge(): add lock_page_memcg() to the comment. Polished with Hugh Dickins' suggestions, thanks! Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Acked-by: Hugh Dickins <hughd@google.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: cgroups@vger.kernel.org Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/memcontrol.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index b80328f52fb4..8d400efc81b9 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1345,10 +1345,11 @@ void lruvec_memcg_debug(struct lruvec *lruvec, struct page *page) * lock_page_lruvec - lock and return lruvec for a given page. * @page: the page * - * This series functions should be used in either conditions: - * PageLRU is cleared or unset - * or page->_refcount is zero - * or page is locked. + * These functions are safe to use under any of the following conditions: + * - page locked + * - PageLRU cleared + * - lock_page_memcg() + * - page->_refcount is zero */ struct lruvec *lock_page_lruvec(struct page *page) { -- 2.29.GIT ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/3] mm/memcg: remove rcu locking for lock_page_lruvec function series 2020-12-22 5:20 [PATCH v2 1/3] mm/memcg: revise the using condition of lock_page_lruvec function series Alex Shi @ 2020-12-22 5:20 ` Alex Shi 2020-12-22 8:00 ` Alex Shi 2020-12-22 5:20 ` [PATCH v2 3/3] mm/compaction: remove rcu_read_lock during page compaction Alex Shi 1 sibling, 1 reply; 4+ messages in thread From: Alex Shi @ 2020-12-22 5:20 UTC (permalink / raw) To: hughd Cc: Johannes Weiner, Michal Hocko, Vladimir Davydov, Andrew Morton, cgroups, linux-mm, linux-kernel lock_page_lruvec() and its variants used rcu_read_lock() with the intention of safeguarding against the mem_cgroup being destroyed concurrently; but so long as they are called under the specified conditions (as they are), there is no way for the page's mem_cgroup to be destroyed. Delete the unnecessary rcu_read_lock() and _unlock(). Hugh Dickin's polished the commit log, Thanks a lot! Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Acked-by: Hugh Dickins <hughd@google.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: cgroups@vger.kernel.org Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/memcontrol.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 8d400efc81b9..0af13c4fe4b3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1356,10 +1356,8 @@ struct lruvec *lock_page_lruvec(struct page *page) struct lruvec *lruvec; struct pglist_data *pgdat = page_pgdat(page); - rcu_read_lock(); lruvec = mem_cgroup_page_lruvec(page, pgdat); spin_lock(&lruvec->lru_lock); - rcu_read_unlock(); lruvec_memcg_debug(lruvec, page); @@ -1371,10 +1369,8 @@ struct lruvec *lock_page_lruvec_irq(struct page *page) struct lruvec *lruvec; struct pglist_data *pgdat = page_pgdat(page); - rcu_read_lock(); lruvec = mem_cgroup_page_lruvec(page, pgdat); spin_lock_irq(&lruvec->lru_lock); - rcu_read_unlock(); lruvec_memcg_debug(lruvec, page); @@ -1386,10 +1382,8 @@ struct lruvec *lock_page_lruvec_irqsave(struct page *page, unsigned long *flags) struct lruvec *lruvec; struct pglist_data *pgdat = page_pgdat(page); - rcu_read_lock(); lruvec = mem_cgroup_page_lruvec(page, pgdat); spin_lock_irqsave(&lruvec->lru_lock, *flags); - rcu_read_unlock(); lruvec_memcg_debug(lruvec, page); -- 2.29.GIT ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/3] mm/memcg: remove rcu locking for lock_page_lruvec function series 2020-12-22 5:20 ` [PATCH v2 2/3] mm/memcg: remove rcu locking for " Alex Shi @ 2020-12-22 8:00 ` Alex Shi 0 siblings, 0 replies; 4+ messages in thread From: Alex Shi @ 2020-12-22 8:00 UTC (permalink / raw) To: hughd Cc: Johannes Weiner, Michal Hocko, Vladimir Davydov, Andrew Morton, cgroups, linux-mm, linux-kernel, Hui Su, Alexander Duyck Cc: Hui Su and Alexander Duyck as Hugh suggested. 在 2020/12/22 下午1:20, Alex Shi 写道: > lock_page_lruvec() and its variants used rcu_read_lock() with the > intention of safeguarding against the mem_cgroup being destroyed > concurrently; but so long as they are called under the specified > conditions (as they are), there is no way for the page's mem_cgroup > to be destroyed. Delete the unnecessary rcu_read_lock() and _unlock(). > > Hugh Dickin's polished the commit log, Thanks a lot! > > Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> > Acked-by: Hugh Dickins <hughd@google.com> > Cc: Hugh Dickins <hughd@google.com> > Cc: Johannes Weiner <hannes@cmpxchg.org> > Cc: Michal Hocko <mhocko@kernel.org> > Cc: Vladimir Davydov <vdavydov.dev@gmail.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: cgroups@vger.kernel.org > Cc: linux-mm@kvack.org > Cc: linux-kernel@vger.kernel.org > --- > mm/memcontrol.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 8d400efc81b9..0af13c4fe4b3 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -1356,10 +1356,8 @@ struct lruvec *lock_page_lruvec(struct page *page) > struct lruvec *lruvec; > struct pglist_data *pgdat = page_pgdat(page); > > - rcu_read_lock(); > lruvec = mem_cgroup_page_lruvec(page, pgdat); > spin_lock(&lruvec->lru_lock); > - rcu_read_unlock(); > > lruvec_memcg_debug(lruvec, page); > > @@ -1371,10 +1369,8 @@ struct lruvec *lock_page_lruvec_irq(struct page *page) > struct lruvec *lruvec; > struct pglist_data *pgdat = page_pgdat(page); > > - rcu_read_lock(); > lruvec = mem_cgroup_page_lruvec(page, pgdat); > spin_lock_irq(&lruvec->lru_lock); > - rcu_read_unlock(); > > lruvec_memcg_debug(lruvec, page); > > @@ -1386,10 +1382,8 @@ struct lruvec *lock_page_lruvec_irqsave(struct page *page, unsigned long *flags) > struct lruvec *lruvec; > struct pglist_data *pgdat = page_pgdat(page); > > - rcu_read_lock(); > lruvec = mem_cgroup_page_lruvec(page, pgdat); > spin_lock_irqsave(&lruvec->lru_lock, *flags); > - rcu_read_unlock(); > > lruvec_memcg_debug(lruvec, page); > > ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 3/3] mm/compaction: remove rcu_read_lock during page compaction 2020-12-22 5:20 [PATCH v2 1/3] mm/memcg: revise the using condition of lock_page_lruvec function series Alex Shi 2020-12-22 5:20 ` [PATCH v2 2/3] mm/memcg: remove rcu locking for " Alex Shi @ 2020-12-22 5:20 ` Alex Shi 1 sibling, 0 replies; 4+ messages in thread From: Alex Shi @ 2020-12-22 5:20 UTC (permalink / raw) To: hughd; +Cc: Johannes Weiner, Andrew Morton, linux-mm, linux-kernel isolate_migratepages_block() used rcu_read_lock() with the intention of safeguarding against the mem_cgroup being destroyed concurrently; but its TestClearPageLRU already protects against that. Delete the unnecessary rcu_read_lock() and _unlock(). Hugh Dickin' helped on commit log polishing, Thanks! Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Acked-by: Hugh Dickins <hughd@google.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/compaction.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 8049d3530812..02af220fb992 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -995,7 +995,6 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, if (!TestClearPageLRU(page)) goto isolate_fail_put; - rcu_read_lock(); lruvec = mem_cgroup_page_lruvec(page, pgdat); /* If we already hold the lock, we can skip some rechecking */ @@ -1005,7 +1004,6 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, compact_lock_irqsave(&lruvec->lru_lock, &flags, cc); locked = lruvec; - rcu_read_unlock(); lruvec_memcg_debug(lruvec, page); @@ -1026,8 +1024,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, SetPageLRU(page); goto isolate_fail_put; } - } else - rcu_read_unlock(); + } /* The whole page is taken off the LRU; skip the tail pages. */ if (PageCompound(page)) -- 2.29.GIT ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-12-22 8:00 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-12-22 5:20 [PATCH v2 1/3] mm/memcg: revise the using condition of lock_page_lruvec function series Alex Shi 2020-12-22 5:20 ` [PATCH v2 2/3] mm/memcg: remove rcu locking for " Alex Shi 2020-12-22 8:00 ` Alex Shi 2020-12-22 5:20 ` [PATCH v2 3/3] mm/compaction: remove rcu_read_lock during page compaction Alex Shi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).