On Thu, 12 Dec 2024, Imre Deak <imre.deak@xxxxxxxxx> wrote: > The connectors enumerated by the GETRESOURCES ioctl may not be fully > initialized yet wrt. to the state set up during connector registration > (for instance the connector's debugfs/sysfs interfaces may not exist > yet). This can happen in two ways: > > 1. Connectors initialized and added to the > drm_mode_config::connector_list during driver loading will be visible > to the GETRESOURCES ioctl caller once the driver is registered via > drm_dev_register()->drm_minor_register(DRM_MINOR_PRIMARY) and before > the connectors are registered via drm_dev_register()-> > drm_modeset_register_all(). > > 2. Dynamic connectors (MST) - after being initialized - may be added to > the connector_list after the driver is loaded and registered and before > the connector's userspace interfaces (debugfs, sysfs etc.) are added > in drm_connector_dynamic_register(). > > A solution for 1. would be to register the driver only after the > connectors are registered, for 2. to add the connector to connector_list > only after the userspace interfaces are registered. > > The fix would require a bigger change, not the topic of this patchset, > so adding only a FIXME comment here. References to "this patchset" become meaningless after this has been committed. Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> > > Suggested-by: Simona Vetter <simona.vetter@xxxxxxxx> > Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > drivers/gpu/drm/drm_mode_config.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c > index 37d2e0a4ef4be..8642a2fb25a90 100644 > --- a/drivers/gpu/drm/drm_mode_config.c > +++ b/drivers/gpu/drm/drm_mode_config.c > @@ -150,6 +150,15 @@ int drm_mode_getresources(struct drm_device *dev, void *data, > drm_connector_list_iter_begin(dev, &conn_iter); > count = 0; > connector_id = u64_to_user_ptr(card_res->connector_id_ptr); > + /* > + * FIXME: the connectors on the list may not be fully initialized yet, > + * if the ioctl is called before the connectors are registered. (See > + * drm_dev_register()->drm_modeset_register_all() for static and > + * drm_connector_dynamic_register() for dynamic connectors.) > + * The driver should only get registered after static connectors are > + * fully initialized and dynamic connectors should be added to the > + * connector list only after fully initializing them. > + */ > drm_for_each_connector_iter(connector, &conn_iter) { > /* only expose writeback connectors if userspace understands them */ > if (!file_priv->writeback_connectors && -- Jani Nikula, Intel