From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: "Michel Dänzer" <michel.daenzer@mailbox.org>
Cc: Julian Orth <ju.orth@gmail.com>,
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Louis Chauvet <louis.chauvet@bootlin.com>,
Haneen Mohammed <hamohammed.sa@gmail.com>,
Melissa Wen <melissa.srw@gmail.com>,
Daniel Stone <daniel.stone@collabora.com>,
Ian Forbes <ian.forbes@broadcom.com>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
kernel@collabora.com, wayland-devel@lists.freedesktop.org,
Marius Vlad <marius.vlad@collabora.com>,
Imre Deak <imre.deak@intel.com>
Subject: Re: [PATCH RESEND v7 0/2] Pass down hot-plug CONNECTOR ID to user-space
Date: Fri, 17 Apr 2026 17:55:30 +0300 [thread overview]
Message-ID: <aeJJ4lKAZDwBuW_U@intel.com> (raw)
In-Reply-To: <63a3d617-6603-438c-b22b-62acedb951e1@mailbox.org>
On Fri, Apr 17, 2026 at 04:17:45PM +0200, Michel Dänzer wrote:
> On 4/17/26 12:57, Ville Syrjälä wrote:
> > On Fri, Apr 17, 2026 at 09:49:36AM +0200, Michel Dänzer wrote:
> >> On 4/16/26 15:16, Julian Orth wrote:
> >>> On Thu, Apr 16, 2026 at 9:46 AM Nicolas Frattaroli
> >>> <nicolas.frattaroli@collabora.com> wrote:
> >>>> On Wednesday, 15 April 2026 20:57:53 Central European Summer Time Julian Orth wrote:
> >>>>> On Wed, Apr 15, 2026 at 8:19 PM Nicolas Frattaroli
> >>>>> <nicolas.frattaroli@collabora.com> wrote:
> >>>>>>
> >>>>>> This series addresses a shortcoming whereby a hot plug event is sent
> >>>>>> without it being passed the actual connector that caused it. This takes
> >>>>>> into consideration both the polling path and the HPD (Hot Plug Detect)
> >>>>>> path. It also adds support for the vkms driver (using ConfigFS) for
> >>>>>> propagating the connector ID when changing the connector's status.
> >>>>>>
> >>>>>> The motivation is that user-space applications such as Weston would
> >>>>>> previously receive non-connector-specific hotplug events, and then have
> >>>>>> to figure out themselves which connector needs to have a modeset
> >>>>>> executed on. This notably did not work when the hotplug events came in
> >>>>>> too fast, resulting in Weston missing an on-off-on transition of a
> >>>>>> connector, seeing that its state was unchanged from "on" so can't be the
> >>>>>> one that was hotplugged, and skipping reinitialising it as it looks
> >>>>>> through the other connectors that could've caused it.
> >>>>>
> >>>>> Have you considered adding a u64 serial number as a DRM connector
> >>>>> property that is incremented every time the connector changes in some
> >>>>> way? Userspace could then check this serial number to see if the
> >>>>> connector has changed since the last time it queried the serial
> >>>>> number.
> >>>>
> >>>> The connector internally already has an epoch_counter member which
> >>>> could be used for this. However, for the particular thing this
> >>>> series fixes, I don't think exposing it through the uAPI is necessary
> >>>> or desirable. Sending hotplug events specific to the connector does
> >>>> not need any additional handling on the userspace side as long as it
> >>>> already listens to the per-connector hotplug events in order to
> >>>> avoid the pitfall described in the cover letter.
> >>>
> >>> I currently do not handle per-connector hotplug events. Instead,
> >>> whenever I get a UDEV change event for a device, I re-fetch the entire
> >>> kernel state for the device. That is
> >>>
> >>> - DRM_IOCTL_MODE_GETRESOURCES
> >>> - DRM_IOCTL_MODE_OBJ_GETPROPERTIES for each connector, crtc, plane
> >>> - DRM_IOCTL_MODE_GETCONNECTOR for each connector
> >>> - DRM_IOCTL_MODE_GETPROPERTY for each connector property
> >>> - DRM_IOCTL_MODE_GETPROPBLOB for the EDID
> >>>
> >>> Once I have the new state, I compare it against the desired compositor
> >>> state and perform a modeset if necessary.
> >>
> >> mutter is doing something similar as well.
> >>
> >>
> >> Note that some are arguing a modeset is always required after a hotplug event, even if the state hasn't changed.
> >>
> >> The most convincing argument I've seen is the scenario of a GPU reset, after which a modeset is required to light up the displays again.
> >
> > GPU reset should relight the display on its own really. That's what
> > i915 does, albeit somewhat badly at the moment.
> >
> >> A hotplug event seems the only mechanism available for the kernel to request a modeset from the compositor. (The kernel may not be able to reliably do the modeset on its own, e.g. due to interactions with user-space atomic commits)
> >
> > There's nothing preventing the kernel from doing extra atomic
> > commits whenever it wants.
>
> I made that same argument at first.
>
> Then it occurred to me the kernel-internal atomic modeset commit could cause spurious EBUSY failures for user-space atomic commits overlapping with it.
Not so. Everything just gets blocked on the kms mutexes and the -EBUSY
stuff never even comes into play.
>
>
> > But if you want to punt the thing to userspace then the kernel must set the link-status
> > property to bad, and then fire the hotplug uevent.
>
> I later suggested using the link-status property for this as well.
>
> Checking with others on IRC and reading documentation / code though, I realized my recollection of its semantics was wrong, it actually doesn't look suitable for this. In particular, the expected user space response to link-status bad is to set a *different* mode (since the mode may be relevant for the link failure), not the same one which was already set.
The expected response it to retry with the same mode, at least if
that mode is still on the connector's mode list. If the mode got
pruned then there's perhaps no point in trying it again.
That's if the mode was on the connector's mode list to begin with.
If it was never there then just blindly retrying it again seems
like the correct option to me.
>
>
> >> P.S. https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/14420#note_2984697 even argued that two modesets are required after a hotplug event, one which turns things off and another one which turns them on again. I don't agree with that though, a single modeset should suffice.
> >
> > The actual argument is that you should not defer the hotplug
> > handling when things get disconnected, mainly because of crap type-c
> > firmware.
> >
> > I think the userspace behaviour there was that you get a disconnected,
> > defer processing it, and then you get a reconnect, and then decide that
> > nothing actually changed and a modeset is not needed after all. That is
> > not correct IMO. Clearly a ->disconnect->reconnect should count as a
> > change in the connector's state, and a full modeset is thus required.
>
> While that makes sense to me in principle, as Julian pointed out, the kernel can't rely on user space seeing the intermittent disconnected state.
>
> Seems like another argument for a serial number property. That would make the need for a modeset unambiguous.
I guess it could at least optimize the "has this connector changed?"
check for the single uevent without connector IDs case.
And I suppose it could avoid race conditions with switching drm masters
when the new master can't be sure it's seen all the uevents. Another
thing that would avoid the issues here is if each new master was
required to do one full modeset on everything. But maybe that was never
a rule?
But for the case where the kernel only sends the per-connector uevents
and the drm master sees all of them the serial number would do nothing.
In that case the kernel wouldn't even send the uevent unless the
serial number has changed.
>
>
> Note that the referenced issue is about a different scenario though:
>
> 1. mutter does modeset for DPMS off
> 2. hotplug events during DPMS off (presumably triggered by the monitor scanning its inputs)
> 3. mutter does modeset for DPMS on
>
> The monitor stays off after step 3. The argument in the comment I referenced is that mutter should repeat step 1 before step 3.
That can't be it. We don't do anything if you try to disable an already
disabled output. And the analysis of the logs indicated that the disable
(DPMS off) was completely missing.
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2026-04-17 14:55 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-15 17:59 [PATCH RESEND v7 0/2] Pass down hot-plug CONNECTOR ID to user-space Nicolas Frattaroli
2026-04-15 17:59 ` [PATCH RESEND v7 1/2] drm: Introduce pending_hp to drm_connector Nicolas Frattaroli
2026-04-15 17:59 ` [PATCH RESEND v7 2/2] drm: Send per-connector hotplug events Nicolas Frattaroli
2026-04-15 18:57 ` [PATCH RESEND v7 0/2] Pass down hot-plug CONNECTOR ID to user-space Julian Orth
2026-04-16 7:45 ` Nicolas Frattaroli
2026-04-16 13:16 ` Julian Orth
2026-04-16 13:35 ` Marius Vlad
2026-04-16 13:55 ` Julian Orth
2026-04-16 14:21 ` Nicolas Frattaroli
2026-04-16 15:27 ` Julian Orth
2026-04-17 7:49 ` Michel Dänzer
2026-04-17 10:57 ` Ville Syrjälä
2026-04-17 12:18 ` Julian Orth
2026-04-17 12:36 ` Julian Orth
2026-04-17 14:36 ` Ville Syrjälä
2026-04-17 12:42 ` Nicolas Frattaroli
2026-04-17 14:16 ` Ville Syrjälä
2026-04-17 15:00 ` Nicolas Frattaroli
2026-04-17 15:19 ` Ville Syrjälä
2026-04-17 14:17 ` Michel Dänzer
2026-04-17 14:55 ` Ville Syrjälä [this message]
2026-04-17 16:40 ` Michel Dänzer
2026-04-17 18:50 ` Ville Syrjälä
2026-04-17 14:25 ` Alex Deucher
2026-04-17 14:29 ` Michel Dänzer
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=aeJJ4lKAZDwBuW_U@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=airlied@gmail.com \
--cc=daniel.stone@collabora.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hamohammed.sa@gmail.com \
--cc=ian.forbes@broadcom.com \
--cc=imre.deak@intel.com \
--cc=ju.orth@gmail.com \
--cc=kernel@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=louis.chauvet@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marius.vlad@collabora.com \
--cc=melissa.srw@gmail.com \
--cc=michel.daenzer@mailbox.org \
--cc=mripard@kernel.org \
--cc=nicolas.frattaroli@collabora.com \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
--cc=wayland-devel@lists.freedesktop.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox