From: Dmitry Ilvokhin <d@ilvokhin.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: dan.j.williams@intel.com, Vlastimil Babka <vbabka@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>,
Brendan Jackman <jackmanb@google.com>,
Johannes Weiner <hannes@cmpxchg.org>, Zi Yan <ziy@nvidia.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
kernel-team@meta.com
Subject: Re: [PATCH 1/8] mm: use zone lock guard in reserve_highatomic_pageblock()
Date: Wed, 29 Apr 2026 18:01:19 +0000 [thread overview]
Message-ID: <afJHb21JImQvVMJP@shell.ilvokhin.com> (raw)
In-Reply-To: <20260428114721.GV3102624@noisy.programming.kicks-ass.net>
On Tue, Apr 28, 2026 at 01:47:21PM +0200, Peter Zijlstra wrote:
> On Tue, Apr 28, 2026 at 10:58:41AM +0000, Dmitry Ilvokhin wrote:
>
> > I re-tested my original patchset after rebasing and can still reproduce
> > the regression (though smaller). It appears to depend on compiler
> > inlining decisions: in some cases the compiler is able to deduplicate
> > the cleanup path across multiple return sites, while in others it is
> > not.
>
> I'm confused, all this has __always_inline on. And the compilers should
> be able to track the assignment of the variable and eliminate the test
> themselves if value-tracking excludes NULL.
>
> > Given that, I think we can go further than just removing
> > __GUARD_IS_ERR(). It should be possible to eliminate this branch
> > entirely and simplify the cleanup flow.
> >
> > https://lore.kernel.org/all/20260427165037.205337-1-d@ilvokhin.com/
> >
> > Reposting here to increase visibility, as several people involved in
> > this code have participated in this thread already.
> >
> > Any feedback would be appreciated.
>
> This would require very careful audit of all the current users, it's had
> this behaviour from the start.
I did a bit of code archeology to double check I was not missing
anything here.
- May 2023: guards were introduced by 54da6a092431 ("locking: Introduce
__cleanup() based infrastructure") and DEFINE_GUARD() called _unlock
unconditionally. __DEFINE_UNLOCK_GUARD() had a NULL check, but it was
unnecessary since conditional variants did not exist yet and the
constructor always set .lock.
- Sep 2023: conditional guards were added by e4ab322fbaaa ("cleanup: Add
conditional guard support"). The branch was added there, because
conditional destructor directly delegated to the base class destructor.
When a trylock failed, .lock was set to NULL.
- Jul 2025: ACQUIRE() was introduced by 857d18f23ab1 ("cleanup:
Introduce ACQUIRE() and ACQUIRE_ERR() for conditional locks") and
changed the conditional failure value from NULL to ERR_PTR(_RET).
- Mar 2026: 2deccd5c862a ("cleanup: Optimize guards")
EXTEND_CLASS_COND() was introduced with its own if (_cond) return;
pre-check before calling the base destructor.
After EXTEND_CLASS_COND() was introduced, the conditional destructor
does if (_cond) return; before calling the base, so the base destructor
is only ever reached for successfully acquired locks.
Peter, do you think it is accurate?
All the commits above are from you, so you are the best person to catch
if I missed something here :)
next prev parent reply other threads:[~2026-04-29 18:01 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-06 16:05 [PATCH 0/8] mm: introduce zone lock guards Dmitry Ilvokhin
2026-03-06 16:05 ` [PATCH 1/8] mm: use zone lock guard in reserve_highatomic_pageblock() Dmitry Ilvokhin
2026-03-06 17:53 ` Andrew Morton
2026-03-06 18:00 ` Steven Rostedt
2026-03-06 18:24 ` Vlastimil Babka
2026-03-06 18:33 ` Andrew Morton
2026-03-06 18:46 ` Steven Rostedt
2026-03-07 13:16 ` Peter Zijlstra
2026-03-07 14:09 ` Dmitry Ilvokhin
2026-03-09 16:45 ` Peter Zijlstra
2026-03-10 12:57 ` Dmitry Ilvokhin
2026-03-12 23:40 ` Dan Williams
2026-03-13 8:36 ` Peter Zijlstra
2026-03-18 8:02 ` [tip: locking/core] cleanup: Optimize guards tip-bot2 for Peter Zijlstra
2026-04-28 10:58 ` [PATCH 1/8] mm: use zone lock guard in reserve_highatomic_pageblock() Dmitry Ilvokhin
2026-04-28 11:47 ` Peter Zijlstra
2026-04-28 13:41 ` Dmitry Ilvokhin
2026-04-29 18:01 ` Dmitry Ilvokhin [this message]
2026-03-26 18:04 ` Dmitry Ilvokhin
2026-03-26 18:51 ` Andrew Morton
2026-03-06 16:05 ` [PATCH 2/8] mm: use zone lock guard in unset_migratetype_isolate() Dmitry Ilvokhin
2026-03-06 16:05 ` [PATCH 3/8] mm: use zone lock guard in unreserve_highatomic_pageblock() Dmitry Ilvokhin
2026-03-06 16:10 ` Steven Rostedt
2026-03-06 16:05 ` [PATCH 4/8] mm: use zone lock guard in set_migratetype_isolate() Dmitry Ilvokhin
2026-03-06 16:05 ` [PATCH 5/8] mm: use zone lock guard in take_page_off_buddy() Dmitry Ilvokhin
2026-03-06 16:05 ` [PATCH 6/8] mm: use zone lock guard in put_page_back_buddy() Dmitry Ilvokhin
2026-03-06 16:05 ` [PATCH 7/8] mm: use zone lock guard in free_pcppages_bulk() Dmitry Ilvokhin
2026-03-06 16:05 ` [PATCH 8/8] mm: use zone lock guard in __offline_isolated_pages() Dmitry Ilvokhin
2026-03-06 16:15 ` [PATCH 0/8] mm: introduce zone lock guards Steven Rostedt
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=afJHb21JImQvVMJP@shell.ilvokhin.com \
--to=d@ilvokhin.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=dan.j.williams@intel.com \
--cc=david@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=jackmanb@google.com \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=ziy@nvidia.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