From: Matthew Brost <matthew.brost@intel.com>
To: Tejun Heo <tj@kernel.org>
Cc: <intel-xe@lists.freedesktop.org>,
<dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>,
<jiangshanlai@gmail.com>, <simona.vetter@ffwll.ch>,
<christian.koenig@amd.com>, <pstanner@redhat.com>,
<dakr@kernel.org>
Subject: Re: [RFC PATCH 1/3] workqueue: Add an interface to taint workqueue lockdep with reclaim
Date: Tue, 21 Oct 2025 15:06:55 -0700 [thread overview]
Message-ID: <aPgD/3d7lJKoSzI8@lstrano-desk.jf.intel.com> (raw)
In-Reply-To: <aPgDXsQY5qAfU0Tv@lstrano-desk.jf.intel.com>
On Tue, Oct 21, 2025 at 03:04:14PM -0700, Matthew Brost wrote:
> On Tue, Oct 21, 2025 at 11:56:30AM -1000, Tejun Heo wrote:
> > Hello,
Missed a comment.
> >
> > On Tue, Oct 21, 2025 at 02:39:50PM -0700, Matthew Brost wrote:
> > > Drivers often use workqueues that are in the reclaim path (e.g., DRM
> > > scheduler workqueues). It is useful to teach lockdep that memory cannot
> > > be allocated on these workqueues. Add an interface to taint workqueue
> > > lockdep with reclaim.
> >
> > Given that it's about reclaim, "memory cannot be allocated" may be a bit
> > misleading. Can you make the description more accurate? Also, it'd be great
Can fix the comment. The rule is memory cannot be allocated in the
context of reclaim (e.g., GFP_KERNEL).
> > if you can include an example lockdep splat for reference.
My driver (Xe) doesn't break anything but can hack to trigger a lockdep
warning and include it.
Matt
> >
> > > Cc: Tejun Heo <tj@kernel.org>
> > > Cc: Lai Jiangshan <jiangshanlai@gmail.com>
> > > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > > ---
> > > include/linux/workqueue.h | 19 +++++++++++++++++++
> > > kernel/workqueue.c | 9 +++++++++
> > > 2 files changed, 28 insertions(+)
> > >
> > > diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
> > > index dabc351cc127..954c7eb7e225 100644
> > > --- a/include/linux/workqueue.h
> > > +++ b/include/linux/workqueue.h
> > > @@ -553,6 +553,25 @@ alloc_workqueue_lockdep_map(const char *fmt, unsigned int flags, int max_active,
> > > 1, lockdep_map, ##args))
> > > #endif
> > >
> > > +
> > > +#ifdef CONFIG_LOCKDEP
> > > +/**
> > > + * taint_reclaim_workqueue - taint workqueue lockdep map with reclaim
> > > + * @wq: workqueue to taint with reclaim
> > > + * gfp: gfp taint
> > ^@
> >
> > > + *
> > > + * Drivers often use workqueues that are in the reclaim path (e.g., DRM
> > > + * scheduler workqueues). It is useful to teach lockdep that memory cannot be
> > > + * allocated on these workqueues.
> > > + */
> > > +extern void taint_reclaim_workqueue(struct workqueue_struct *wq, gfp_t gfp);
> > > +#else
> > > +static inline void taint_reclaim_workqueue(struct workqueue_struct *wq,
> > > + gfp_t gfp)
> >
> > Would a more direct name work better, maybe something like
> > workqueue_warn_on_reclaim()?
> >
>
> Can rename, but perhaps not needed depending on what we land on below.
>
> > Hmm... would it make sense to tie this to WQ_MEM_RECLAIM - ie. enable it
> > implicitly on workqueues w/ the flag set?
> >
>
> I had considered this, and for a while I thought WQ_MEM_RECLAIM already
> did what I'm suggesting—especially since I’ve spotted bugs in drivers
> where I would have expected lockdep to catch them.
>
> In my opinion, this approach is better, but it has a broader kernel-wide
> scope and could potentially break some things. My subsequent patches
> will likely break one or two DRM drivers, so it might not be a concern
> to fix everything that breaks across the kernel. It's up to you which
> route we want to take here.
>
> Matt
>
> > Thanks.
> >
> > --
> > tejun
next prev parent reply other threads:[~2025-10-21 22:07 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-21 21:39 [RFC PATCH 0/3] Enforce DRM scheduler reclaim rules Matthew Brost
2025-10-21 21:39 ` [RFC PATCH 1/3] workqueue: Add an interface to taint workqueue lockdep with reclaim Matthew Brost
2025-10-21 21:56 ` Tejun Heo
2025-10-21 22:04 ` Matthew Brost
2025-10-21 22:06 ` Matthew Brost [this message]
2025-10-21 23:25 ` Tejun Heo
2025-10-22 1:16 ` Matthew Brost
2025-10-21 23:28 ` Tejun Heo
2025-10-22 1:22 ` Matthew Brost
2025-10-22 1:51 ` Tejun Heo
2025-10-27 21:58 ` Matthew Brost
2025-10-28 9:32 ` Christian König
2025-10-28 20:16 ` Matthew Brost
2025-10-29 9:48 ` Christian König
2025-10-29 15:06 ` Tejun Heo
2025-10-29 16:46 ` Matthew Brost
2025-10-29 18:16 ` Tejun Heo
2025-10-21 21:39 ` [RFC PATCH 2/3] drm/sched: Taint workqueues " Matthew Brost
2025-10-27 11:03 ` Philipp Stanner
2025-10-27 17:00 ` Matthew Brost
2025-10-21 21:39 ` [RFC PATCH 3/3] drm/sched: Prevent adding dependencies to an armed job Matthew Brost
2025-10-27 11:13 ` Philipp Stanner
2025-10-27 16:56 ` Matthew Brost
2025-10-28 9:27 ` Philipp Stanner
2025-10-21 21:56 ` ✗ CI.checkpatch: warning for Enforce DRM scheduler reclaim rules Patchwork
2025-10-21 21:58 ` ✓ CI.KUnit: success " Patchwork
2025-10-21 22:13 ` ✗ CI.checksparse: warning " Patchwork
2025-10-21 22:31 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-10-22 1:46 ` ✗ Xe.CI.Full: " Patchwork
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=aPgD/3d7lJKoSzI8@lstrano-desk.jf.intel.com \
--to=matthew.brost@intel.com \
--cc=christian.koenig@amd.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jiangshanlai@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pstanner@redhat.com \
--cc=simona.vetter@ffwll.ch \
--cc=tj@kernel.org \
/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.