From: Marek Czernohous <mczernohous@gmail.com>
To: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: sashiko-bot@kernel.org, linux-kernel@vger.kernel.org,
Danilo Krummrich <dakr@kernel.org>, Lyude Paul <lyude@redhat.com>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Subject: Re: [PATCH 2/3] drm/nouveau: cancel the DP IRQ work before freeing the connector
Date: Sat, 15 Aug 2026 22:42:51 +0200 [thread overview]
Message-ID: <178682657122.3795552.6920623796751043528@gmail.com> (raw)
In-Reply-To: <20260815201130.7BDDF1F000E9@smtp.kernel.org>
Three findings, three different answers, so let me take them in turn.
The NULL dereference in nouveau_dp_irq() is 3/3 of this series. Same
thread, sent alongside this patch. Nothing further needed there, and
the two are related on purpose: 2/3 drains the work, 3/3 fixes the
handler that work runs.
The LVDS error path in nouveau_connector_create() is real as far as I
can see, and independent of anything here. drm_connector_init() has
already put the connector on dev->mode_config.connector_list when the
nouveau_bios_parse_lvds_table() failure path kfree()s it without
drm_connector_cleanup(). I am not touching it in this series; it wants
its own patch and I have no way to reach that path on my hardware.
The hpd_work point is the interesting one, and I owe a correction on it.
2/3 does not create that path. Without this patch the same already
queued irq_work still runs to completion and still ends in
nouveau_connector_hpd(), which schedules drm->hpd_work under
drm->hpd_lock; the only thing this patch adds is that the destroy now
waits for it. If anything that narrows the exposure, because without
the wait the work can run later still, potentially after the connector
is gone. That is the bug 2/3 is about.
But the wider question the bot is asking is fair, and my cover letter
answered it too confidently. It says "there is no fourth patch here"
on the strength of drm->hpd_work being drained in
nouveau_display_fini(). Having looked again after the bot's mail: that
drain runs at nouveau_display.c:600 under "if (!runtime &&
!drm->headless)", and disp->fini() drains it a second time under the
same condition (dispnv50/disp.c:2686, dispnv04/disp.c:72, which I had
not spotted when I wrote the cover). Both of those are before
drm_mode_config_cleanup() reaches nouveau_connector_destroy(). So a
late irq_work really can re-arm hpd_work after every drain, and nothing
drains it again. Whether that is reachable in practice I do not know:
nvif_event_block() on conn->irq has already run by then, so it needs
work that was queued before the block and has not run yet.
I cannot rule it out, so I should not have written that sentence as a
finding. It should have said that I looked and did not find a fourth
patch, not that there is none. If the maintainers want, the shape of a
fix is probably a drain of hpd_work after the connectors are gone, or
making nouveau_connector_hpd() a no-op once teardown has started, but
that is a separate change from this series and I would rather someone
who knows the hotplug path weighs in before I write it.
For the avoidance of doubt: 2/3 and 3/3 still stand as posted. 1/3 is
withdrawn, for an unrelated reason, in the sibling thread.
next prev parent reply other threads:[~2026-08-15 20:42 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-15 19:54 [PATCH 0/3] drm/nouveau: teardown ordering fixes for events and work Marek Czernohous
2026-08-15 19:54 ` [PATCH 2/3] drm/nouveau: cancel the DP IRQ work before freeing the connector Marek Czernohous
[not found] ` <20260815201130.7BDDF1F000E9@smtp.kernel.org>
2026-08-15 20:42 ` Marek Czernohous [this message]
2026-08-20 18:26 ` lyude
2026-08-20 18:36 ` lyude
2026-08-20 18:13 ` lyude
2026-08-20 18:27 ` lyude
2026-08-15 19:54 ` [PATCH 3/3] drm/nouveau: don't dereference outp before checking it in nouveau_dp_irq Marek Czernohous
2026-08-20 18:28 ` lyude
2026-08-15 19:54 ` [PATCH 1/3] drm/nouveau: destroy the fence event before cancelling its work Marek Czernohous
[not found] ` <20260815200914.8A1131F000E9@smtp.kernel.org>
2026-08-15 20:25 ` Marek Czernohous
2026-08-16 12:58 ` [PATCH v2] drm/nouveau: disable the fence uevent work instead of just cancelling it Marek Czernohous
2026-08-16 13:21 ` Marek Czernohous
2026-08-20 17:55 ` lyude
2026-08-20 18:08 ` lyude
2026-08-18 23:58 ` [PATCH 0/3] drm/nouveau: teardown ordering fixes for events and work lyude
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=178682657122.3795552.6920623796751043528@gmail.com \
--to=mczernohous@gmail.com \
--cc=airlied@gmail.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=nouveau@lists.freedesktop.org \
--cc=sashiko-bot@kernel.org \
--cc=simona@ffwll.ch \
/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