From: Matthew Wilcox <willy@infradead.org>
To: Alex Shi <alex.shi@linux.alibaba.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
akpm@linux-foundation.org, mgorman@techsingularity.net,
tj@kernel.org, hughd@google.com, khlebnikov@yandex-team.ru,
daniel.m.jordan@oracle.com, lkp@intel.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
shakeelb@google.com, iamjoonsoo.kim@lge.com,
richard.weiyang@gmail.com, kirill@shutemov.name,
alexander.duyck@gmail.com, rong.a.chen@intel.com,
mhocko@suse.com, vdavydov.dev@gmail.com, shy828301@gmail.com,
Vlastimil Babka <vbabka@suse.cz>,
Minchan Kim <minchan@kernel.org>
Subject: Re: [PATCH v20 08/20] mm: page_idle_get_page() does not need lru_lock
Date: Thu, 5 Nov 2020 04:57:02 +0000 [thread overview]
Message-ID: <20201105045702.GI17076@casper.infradead.org> (raw)
In-Reply-To: <6eea82d8-e406-06ee-2333-eb6e2f1944e5@linux.alibaba.com>
On Thu, Nov 05, 2020 at 12:52:05PM +0800, Alex Shi wrote:
> @@ -1054,8 +1054,27 @@ static void __page_set_anon_rmap(struct page *page,
> if (!exclusive)
> anon_vma = anon_vma->root;
>
> + /*
> + * w/o the WRITE_ONCE here the following scenario may happens due to
> + * store reordering.
> + *
> + * CPU 0 CPU 1
> + *
> + * do_anonymous_page page_idle_clear_pte_refs
> + * __page_set_anon_rmap
> + * page->mapping = anon_vma + PAGE_MAPPING_ANON
> + * lru_cache_add_inactive_or_unevictable()
> + * SetPageLRU(page)
> + * rmap_walk
> + * if PageAnon(page)
> + *
> + * The 'SetPageLRU' may reordered before page->mapping setting, and
> + * page->mapping may set with anon_vma, w/o anon bit, then rmap_walk
> + * may goes to rmap_walk_file() for a anon page.
> + */
> +
> anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
> - page->mapping = (struct address_space *) anon_vma;
> + WRITE_ONCE(page->mapping, (struct address_space *) anon_vma);
> page->index = linear_page_index(vma, address);
> }
I don't like these verbose comments with detailed descriptions in
the source code. They're fine in changelogs, but they clutter the
code, and they get outdated really quickly. My preference is for
something more brief:
/*
* Prevent page->mapping from pointing to an anon_vma without
* the PAGE_MAPPING_ANON bit set. This could happen if the
* compiler stores anon_vma and then adds PAGE_MAPPING_ANON to it.
*/
next prev parent reply other threads:[~2020-11-05 4:57 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-29 10:44 [PATCH v20 00/20] per memcg lru lock Alex Shi
2020-10-29 10:44 ` [PATCH v20 01/20] mm/memcg: warning on !memcg after readahead page charged Alex Shi
2020-10-29 13:43 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 02/20] mm/memcg: bail early from swap accounting if memcg disabled Alex Shi
2020-10-29 13:46 ` Johannes Weiner
2020-10-30 2:27 ` Alex Shi
2020-10-30 14:04 ` Johannes Weiner
2020-10-31 1:13 ` Alex Shi
2020-10-29 10:44 ` [PATCH v20 03/20] mm/thp: move lru_add_page_tail func to huge_memory.c Alex Shi
2020-10-29 13:47 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 04/20] mm/thp: use head for head page in lru_add_page_tail Alex Shi
2020-10-29 13:50 ` Johannes Weiner
2020-10-30 2:46 ` Alex Shi
2020-10-30 13:52 ` Johannes Weiner
2020-10-31 1:14 ` Alex Shi
2020-11-02 16:03 ` Matthew Wilcox
2020-11-03 2:43 ` Alex Shi
2020-10-29 10:44 ` [PATCH v20 05/20] mm/thp: Simplify lru_add_page_tail() Alex Shi
2020-10-29 14:00 ` Johannes Weiner
2020-10-30 2:48 ` Alex Shi
2020-10-29 10:44 ` [PATCH v20 06/20] mm/thp: narrow lru locking Alex Shi
2020-10-29 10:44 ` [PATCH v20 07/20] mm/vmscan: remove unnecessary lruvec adding Alex Shi
2020-11-02 14:20 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 08/20] mm: page_idle_get_page() does not need lru_lock Alex Shi
2020-11-02 14:41 ` Johannes Weiner
2020-11-02 14:49 ` Matthew Wilcox
2020-11-02 20:20 ` Johannes Weiner
2020-11-04 11:27 ` Alex Shi
2020-11-04 17:46 ` Johannes Weiner
2020-11-05 4:52 ` Alex Shi
2020-11-05 4:57 ` Matthew Wilcox [this message]
2020-11-05 5:03 ` Alex Shi
2020-11-05 15:36 ` Johannes Weiner
2020-11-05 15:43 ` Matthew Wilcox
2020-11-06 1:11 ` Alex Shi
2020-11-11 7:27 ` Hugh Dickins
2020-10-29 10:44 ` [PATCH v20 09/20] mm/memcg: add debug checking in lock_page_memcg Alex Shi
2020-11-02 14:45 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 10/20] mm/swap.c: fold vm event PGROTATED into pagevec_move_tail_fn Alex Shi
2020-11-02 14:48 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 11/20] mm/lru: move lock into lru_note_cost Alex Shi
2020-10-29 13:42 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 12/20] mm/vmscan: remove lruvec reget in move_pages_to_lru Alex Shi
2020-11-02 14:52 ` Johannes Weiner
2020-11-03 2:51 ` Alex Shi
2020-10-29 10:44 ` [PATCH v20 13/20] mm/mlock: remove lru_lock on TestClearPageMlocked Alex Shi
2020-11-02 14:55 ` Johannes Weiner
2020-10-29 10:44 ` [PATCH v20 14/20] mm/mlock: remove __munlock_isolate_lru_page Alex Shi
2020-11-02 14:56 ` Johannes Weiner
2020-10-29 10:45 ` [PATCH v20 15/20] mm/lru: introduce TestClearPageLRU Alex Shi
2020-11-02 15:10 ` Johannes Weiner
2020-11-03 3:02 ` Alex Shi
2020-10-29 10:45 ` [PATCH v20 16/20] mm/compaction: do page isolation first in compaction Alex Shi
2020-11-02 15:18 ` Johannes Weiner
2020-10-29 10:45 ` [PATCH v20 17/20] mm/swap.c: serialize memcg changes in pagevec_lru_move_fn Alex Shi
2020-11-02 15:20 ` Johannes Weiner
2020-10-29 10:45 ` [PATCH v20 18/20] mm/lru: replace pgdat lru_lock with lruvec lock Alex Shi
2020-10-30 2:49 ` Alex Shi
2020-11-02 20:41 ` Johannes Weiner
2020-11-03 4:58 ` Alex Shi
2020-10-29 10:45 ` [PATCH v20 19/20] mm/lru: introduce the relock_page_lruvec function Alex Shi
2020-11-02 20:44 ` Johannes Weiner
2020-10-29 10:45 ` [PATCH v20 20/20] mm/lru: revise the comments of lru_lock Alex Shi
2020-11-02 20:46 ` Johannes Weiner
2020-11-04 11:55 ` [PATCH v20 00/20] per memcg lru lock Alex Shi
2020-11-04 16:59 ` Johannes Weiner
2020-11-05 5:07 ` Alex Shi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201105045702.GI17076@casper.infradead.org \
--to=willy@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=alex.shi@linux.alibaba.com \
--cc=alexander.duyck@gmail.com \
--cc=cgroups@vger.kernel.org \
--cc=daniel.m.jordan@oracle.com \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=khlebnikov@yandex-team.ru \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=mgorman@techsingularity.net \
--cc=mhocko@suse.com \
--cc=minchan@kernel.org \
--cc=richard.weiyang@gmail.com \
--cc=rong.a.chen@intel.com \
--cc=shakeelb@google.com \
--cc=shy828301@gmail.com \
--cc=tj@kernel.org \
--cc=vbabka@suse.cz \
--cc=vdavydov.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).