[Nouveau] [PATCH] drm/nouveau/disp: use drm_kms_helper_connector_hotplug_event()

Simon Ser contact at emersion.fr
Wed Jun 21 22:13:13 UTC 2023


Hi Lyude!

On Wednesday, June 21st, 2023 at 23:56, Lyude Paul <lyude at redhat.com> wrote:

> > -	if (changed)
> > +	if (changed == 1)
> > +		drm_kms_helper_connector_hotplug_event(first_changed_connector);
> > +	else if (changed > 0)
> >  		drm_kms_helper_hotplug_event(dev);
> 
> I'm curious if you think there might be an advantage to doing this per-
> connector even with multiple connectors? Seems like we could do that if we
> stored changed connectors as a bitmask.

I believe firing off multiple per-connector uevents would be worse than a
single per-device uevent because user-space would see intermediate states
instead of an atomic change.

Let's say I have 3 connectors connected, and different settings set in my
compositor when 1, 2 or 3 screens are connected. Let's say an unplug
disconnects 2 monitors at the same time. With a single uevent, the compositor
refreshes the whole device state, and then applies the 1-screen settings. With
2 uevents (one for each connector), the compositor refreshes the first
disconnected connector state, then applies the 2-screen settings, then
refreshes the second disconnected connector state, then applies the 1-screen
settings. Applying the 2-screen settings might cause an unnecessarily glitchy
intermediate state, where windows move around, modesets are performed, user
configured commands are run, just to un-do everything right after.

I hope this makes sense,

Simon


More information about the Nouveau mailing list