From: Andrew Morton <akpm@linux-foundation.org>
To: Andrew Yang <andrew.yang@mediatek.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>,
Matthew Wilcox <willy@infradead.org>,
"Vlastimil Babka" <vbabka@suse.cz>,
David Howells <dhowells@redhat.com>,
"William Kucharski" <william.kucharski@oracle.com>,
David Hildenbrand <david@redhat.com>,
Yang Shi <shy828301@gmail.com>, Marc Zyngier <maz@kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-mediatek@lists.infradead.org>, <wsd_upstream@mediatek.com>,
Nicholas Tang <nicholas.tang@mediatek.com>,
Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>
Subject: Re: [PATCH] mm/migrate: fix race between lock page and clear PG_Isolated
Date: Mon, 14 Mar 2022 21:21:27 -0700 [thread overview]
Message-ID: <20220314212127.a2797926ee0ef8a7ad05dcaa@linux-foundation.org> (raw)
In-Reply-To: <20220315030515.20263-1-andrew.yang@mediatek.com>
On Tue, 15 Mar 2022 11:05:15 +0800 Andrew Yang <andrew.yang@mediatek.com> wrote:
> When memory is tight, system may start to compact memory for large
> continuous memory demands. If one process tries to lock a memory page
> that is being locked and isolated for compaction, it may wait a long time
> or even forever. This is because compaction will perform non-atomic
> PG_Isolated clear while holding page lock, this may overwrite PG_waiters
> set by the process that can't obtain the page lock and add itself to the
> waiting queue to wait for the lock to be unlocked.
>
> CPU1 CPU2
> lock_page(page); (successful)
> lock_page(); (failed)
> __ClearPageIsolated(page); SetPageWaiters(page) (may be overwritten)
> unlock_page(page);
>
> The solution is to not perform non-atomic operation on page flags while
> holding page lock.
Sure, the non-atomic bitop optimization is really risky and I suspect
we reach for it too often. Or at least without really clearly
demonstrating that it is safe, and documenting our assumptions.
I'm thinking this one should be backported, so I'll queue it for
5.18-rc1, with a cc:stable so it gets trickled back.
next prev parent reply other threads:[~2022-03-15 4:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20220315030515.20263-1-andrew.yang@mediatek.com>
2022-03-15 3:32 ` Matthew Wilcox
2022-03-21 23:26 ` Andrew Morton
2022-03-15 4:21 ` Andrew Morton [this message]
2022-03-15 15:45 ` David Hildenbrand
2022-03-15 17:43 ` Matthew Wilcox
2022-03-15 19:07 ` David Hildenbrand
2022-03-15 20:34 ` Hugh Dickins
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=20220314212127.a2797926ee0ef8a7ad05dcaa@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=Kuan-Ying.Lee@mediatek.com \
--cc=andrew.yang@mediatek.com \
--cc=david@redhat.com \
--cc=dhowells@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-mm@kvack.org \
--cc=matthias.bgg@gmail.com \
--cc=maz@kernel.org \
--cc=nicholas.tang@mediatek.com \
--cc=shy828301@gmail.com \
--cc=vbabka@suse.cz \
--cc=william.kucharski@oracle.com \
--cc=willy@infradead.org \
--cc=wsd_upstream@mediatek.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