From: Leonardo Bras <leobras.c@gmail.com>
To: "Vlastimil Babka (SUSE)" <vbabka@kernel.org>
Cc: "Leonardo Bras" <leobras.c@gmail.com>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
"Jonathan Corbet" <corbet@lwn.net>,
"Shuah Khan" <skhan@linuxfoundation.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Ingo Molnar" <mingo@redhat.com>, "Will Deacon" <will@kernel.org>,
"Boqun Feng" <boqun@kernel.org>,
"Waiman Long" <longman@redhat.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"David Hildenbrand" <david@kernel.org>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
"Mike Rapoport" <rppt@kernel.org>,
"Suren Baghdasaryan" <surenb@google.com>,
"Michal Hocko" <mhocko@suse.com>, "Jann Horn" <jannh@google.com>,
"Pedro Falcato" <pfalcato@suse.de>,
"Brendan Jackman" <jackmanb@google.com>,
"Johannes Weiner" <hannes@cmpxchg.org>, "Zi Yan" <ziy@nvidia.com>,
"Harry Yoo" <harry@kernel.org>, "Hao Li" <hao.li@linux.dev>,
"Christoph Lameter" <cl@gentwo.org>,
"David Rientjes" <rientjes@google.com>,
"Roman Gushchin" <roman.gushchin@linux.dev>,
"Chris Li" <chrisl@kernel.org>,
"Kairui Song" <kasong@tencent.com>,
"Kemeng Shi" <shikemeng@huaweicloud.com>,
"Nhat Pham" <nphamcs@gmail.com>, "Baoquan He" <bhe@redhat.com>,
"Barry Song" <baohua@kernel.org>,
"Youngjun Park" <youngjun.park@lge.com>,
"Qi Zheng" <qi.zheng@linux.dev>,
"Shakeel Butt" <shakeel.butt@linux.dev>,
"Axel Rasmussen" <axelrasmussen@google.com>,
"Yuanchu Xie" <yuanchu@google.com>, "Wei Xu" <weixugc@google.com>,
"Borislav Petkov (AMD)" <bp@alien8.de>,
"Randy Dunlap" <rdunlap@infradead.org>,
"Feng Tang" <feng.tang@linux.alibaba.com>,
"Dapeng Mi" <dapeng1.mi@linux.intel.com>,
"Kees Cook" <kees@kernel.org>, "Marco Elver" <elver@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Li RongQing" <lirongqing@baidu.com>,
"Eric Biggers" <ebiggers@kernel.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
"Nathan Chancellor" <nathan@kernel.org>,
"Nicolas Schier" <nsc@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Thomas Weißschuh" <thomas.weissschuh@linutronix.de>,
"Thomas Gleixner" <tglx@kernel.org>,
"Douglas Anderson" <dianders@chromium.org>,
"Gary Guo" <gary@garyguo.net>,
"Christian Brauner" <brauner@kernel.org>,
"Pasha Tatashin" <pasha.tatashin@soleen.com>,
"Coiby Xu" <coxu@redhat.com>,
"Masahiro Yamada" <masahiroy@kernel.org>,
"Frederic Weisbecker" <frederic@kernel.org>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, linux-rt-devel@lists.linux.dev,
"Marcelo Tosatti" <mtosatti@redhat.com>
Subject: Re: [PATCH v4 4/4] slub: apply new pw_queue_on() interface
Date: Mon, 13 Jul 2026 18:44:49 -0300 [thread overview]
Message-ID: <alVcUZcSeLf187VD@WindFlash> (raw)
In-Reply-To: <157f60cb-ff83-4fed-8b05-e6c6390f85bc@kernel.org>
On Mon, Jul 13, 2026 at 12:55:36PM +0200, Vlastimil Babka (SUSE) wrote:
> On 7/13/26 09:36, Sebastian Andrzej Siewior wrote:
> > On 2026-07-12 19:35:28 [-0300], Leonardo Bras wrote:
> >> On Wed, May 20, 2026 at 04:53:08PM +0200, Sebastian Andrzej Siewior wrote:
> >> > On 2026-05-18 22:27:50 [-0300], Leonardo Bras wrote:
> >> > > @@ -4733,121 +4735,121 @@ void *alloc_from_pcs(struct kmem_cache *s, gfp_t gfp, int node)
> >> > >
> >> > > /*
> >> > > * We assume the percpu sheaves contain only local objects although it's
> >> > > * not completely guaranteed, so we verify later.
> >> > > */
> >> > > if (unlikely(node_requested && node != numa_mem_id())) {
> >> > > stat(s, ALLOC_NODE_MISMATCH);
> >> > > return NULL;
> >> > > }
> >> > >
> >> > > - if (!local_trylock(&s->cpu_sheaves->lock))
> >> > > + if (!pw_trylock_local(&s->cpu_sheaves->lock))
> >> > > return NULL;
> >> >
> >> > alloc_from_pcs() can be called from kmalloc_nolock()/ NMI context.
> >> > I don't remember why exactly local_trylock_t was introduced here instead
> >> > of a per-CPU spinlock_t.
> >>
> >> Probably to save the cost of using atomic operations on locking, and having
>
> Yes. Also function call overhead as spinlocks are often not inlined.
Oh, right, I remember getting numbers on that. Inlined per-cpu spinlocks
take much less time.
>
> >> about the same restrictions that would allow using local_locks
>
> Indeed.
>
> >> > But there should be nothing wrong with a
> >> > trylock on it from NMI as you do here.
> >>
> >> Awesome!
> >
> > The problem is always the unlock which requires full locking and is
> > usually the problem from NMI.
> >
> >> >
> >> > One thing worth noting, on !PREEMPT_RT, spin_trylock() always succeeds
> >> > on UP. kmalloc_nolock() checks for it, not sure about other callers.
> >>
> >>
> >> Sorry, I did not sure I understand that part.
> >> You mean we have since it always returns true, we may be in NMI context,
> >> after it was interrupted holding this lock, and it will return true which
> >> will use the protected area even though the lock should avoid it?
> >
> > from include/linux/spinlock_api_up.h:
> > | static __always_inline int _raw_spin_trylock(raw_spinlock_t *lock)
> > | __cond_acquires(true, lock)
> > | {
> > | __LOCK(lock);
> > | return 1;
> > | }
> >
> > on UP a spin_trylock() always succeeds.
>
> Indeed. This was a problem in the page allocator, because there we don't
> even disable irqs, so it wasn't just nmi, but an irq that could get a
> false-positive spin_trylock(). See 038a102535eb ("mm/page_alloc: prevent pcp
> corruption with SMP=n") which was a hot fix.
>
> This was later cleaned up with 3 commits starting with a373f371166d
> ("mm/page_alloc: effectively disable pcp with CONFIG_SMP=n").
>
> Since here you're also replacing local_trylock() (with no _irqsave) with
> effectively spin_trylock(), the problem also won't be limited to NMIs and
> thus the checks in kmalloc_nolock() won't help.
>
> But I see in Patch 1:
>
> +config PWLOCKS
> + bool "Per-CPU Work locks"
> + depends on SMP || COMPILE_TEST
>
> So that's basically avoiding the problem in the same way as the page
> allocator after the clean up.
> Maybe just remove the COMPILE_TEST part? It's not clear to me what it
> achieves. Just make it require SMP as there's no point for this on !SMP.
>
I don't mind removing it, but IIRC that was added by Marcelo, I have to
ask him the reason he added it.
Thanks!
Leo
next prev parent reply other threads:[~2026-07-13 21:44 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-19 1:27 [PATCH v4 0/4] Introduce Per-CPU Work helpers (was QPW) Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 1/4] Introducing pw_lock() and per-cpu queue & flush work Leonardo Bras
2026-05-20 10:08 ` Frederic Weisbecker
2026-07-12 20:49 ` Leonardo Bras
2026-05-20 13:48 ` Sebastian Andrzej Siewior
2026-05-20 14:47 ` Frederic Weisbecker
2026-07-12 21:17 ` Leonardo Bras
2026-07-12 21:17 ` Leonardo Bras
2026-05-20 22:06 ` Randy Dunlap
2026-07-12 21:23 ` Leonardo Bras
2026-05-26 19:15 ` Jonathan Corbet
2026-07-12 21:32 ` Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 2/4] mm/swap: move bh draining into a separate workqueue Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 3/4] swap: apply new pw_queue_on() interface Leonardo Bras
2026-05-20 15:07 ` Sebastian Andrzej Siewior
2026-07-12 21:43 ` Leonardo Bras
2026-07-13 7:31 ` Sebastian Andrzej Siewior
2026-07-13 21:28 ` Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 4/4] slub: " Leonardo Bras
2026-05-19 10:21 ` kernel test robot
2026-05-20 14:53 ` Sebastian Andrzej Siewior
2026-07-12 22:35 ` Leonardo Bras
2026-07-13 7:36 ` Sebastian Andrzej Siewior
2026-07-13 10:55 ` Vlastimil Babka (SUSE)
2026-07-13 21:44 ` Leonardo Bras [this message]
2026-07-13 21:40 ` Leonardo Bras
2026-07-14 9:47 ` Sebastian Andrzej Siewior
2026-05-19 6:58 ` [syzbot ci] Re: Introduce Per-CPU Work helpers (was QPW) syzbot ci
2026-05-20 13:09 ` [PATCH v4 0/4] " Sebastian Andrzej Siewior
2026-07-12 20:32 ` Leonardo Bras
2026-07-13 8:07 ` Sebastian Andrzej Siewior
2026-07-13 21:17 ` Leonardo Bras
2026-07-14 10:12 ` Sebastian Andrzej Siewior
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=alVcUZcSeLf187VD@WindFlash \
--to=leobras.c@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=bhe@redhat.com \
--cc=bigeasy@linutronix.de \
--cc=boqun@kernel.org \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=chrisl@kernel.org \
--cc=cl@gentwo.org \
--cc=corbet@lwn.net \
--cc=coxu@redhat.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=david@kernel.org \
--cc=dianders@chromium.org \
--cc=ebiggers@kernel.org \
--cc=elver@google.com \
--cc=feng.tang@linux.alibaba.com \
--cc=frederic@kernel.org \
--cc=gary@garyguo.net \
--cc=hannes@cmpxchg.org \
--cc=hao.li@linux.dev \
--cc=harry@kernel.org \
--cc=jackmanb@google.com \
--cc=jannh@google.com \
--cc=kasong@tencent.com \
--cc=kees@kernel.org \
--cc=kuba@kernel.org \
--cc=liam@infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=lirongqing@baidu.com \
--cc=ljs@kernel.org \
--cc=longman@redhat.com \
--cc=masahiroy@kernel.org \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nathan@kernel.org \
--cc=nphamcs@gmail.com \
--cc=nsc@kernel.org \
--cc=ojeda@kernel.org \
--cc=pasha.tatashin@soleen.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=pfalcato@suse.de \
--cc=qi.zheng@linux.dev \
--cc=rdunlap@infradead.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rppt@kernel.org \
--cc=shakeel.butt@linux.dev \
--cc=shikemeng@huaweicloud.com \
--cc=skhan@linuxfoundation.org \
--cc=surenb@google.com \
--cc=tglx@kernel.org \
--cc=thomas.weissschuh@linutronix.de \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=will@kernel.org \
--cc=youngjun.park@lge.com \
--cc=yuanchu@google.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.