Message ID | 1591155451-10393-1-git-send-email-jsanka@codeaurora.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 968d81a64a883af2d16dd3f8a6ad6b67db2fde58 |
Headers | show |
Series | drm/connector: notify userspace on hotplug after register complete | expand |
On Tue, Jun 02, 2020 at 08:37:31PM -0700, Jeykumar Sankaran wrote: > drm connector notifies userspace on hotplug event prematurely before > late_register and mode_object register completes. This leads to a race > between userspace and kernel on updating the IDR list. So, move the > notification to end of connector register. > > Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org> > Signed-off-by: Steve Cohen <cohens@codeaurora.org> Hm on the unregister side we don't have the race, there we remove everything and then send out the uevent. But there the uevent is also generated in a separate step, so I wonder whether we shouldn't do the same for register for symmetry ... Anyway this looks good, nice catch, I'll add cc: stable and merge. -Daniel > --- > drivers/gpu/drm/drm_connector.c | 5 +++++ > drivers/gpu/drm/drm_sysfs.c | 3 --- > 2 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index b1099e1..d877ddc 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -27,6 +27,7 @@ > #include <drm/drm_print.h> > #include <drm/drm_drv.h> > #include <drm/drm_file.h> > +#include <drm/drm_sysfs.h> > > #include <linux/uaccess.h> > > @@ -523,6 +524,10 @@ int drm_connector_register(struct drm_connector *connector) > drm_mode_object_register(connector->dev, &connector->base); > > connector->registration_state = DRM_CONNECTOR_REGISTERED; > + > + /* Let userspace know we have a new connector */ > + drm_sysfs_hotplug_event(connector->dev); > + > goto unlock; > > err_debugfs: > diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c > index 939f003..f0336c8 100644 > --- a/drivers/gpu/drm/drm_sysfs.c > +++ b/drivers/gpu/drm/drm_sysfs.c > @@ -291,9 +291,6 @@ int drm_sysfs_connector_add(struct drm_connector *connector) > return PTR_ERR(connector->kdev); > } > > - /* Let userspace know we have a new connector */ > - drm_sysfs_hotplug_event(dev); > - > if (connector->ddc) > return sysfs_create_link(&connector->kdev->kobj, > &connector->ddc->dev.kobj, "ddc"); > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index b1099e1..d877ddc 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -27,6 +27,7 @@ #include <drm/drm_print.h> #include <drm/drm_drv.h> #include <drm/drm_file.h> +#include <drm/drm_sysfs.h> #include <linux/uaccess.h> @@ -523,6 +524,10 @@ int drm_connector_register(struct drm_connector *connector) drm_mode_object_register(connector->dev, &connector->base); connector->registration_state = DRM_CONNECTOR_REGISTERED; + + /* Let userspace know we have a new connector */ + drm_sysfs_hotplug_event(connector->dev); + goto unlock; err_debugfs: diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index 939f003..f0336c8 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c @@ -291,9 +291,6 @@ int drm_sysfs_connector_add(struct drm_connector *connector) return PTR_ERR(connector->kdev); } - /* Let userspace know we have a new connector */ - drm_sysfs_hotplug_event(dev); - if (connector->ddc) return sysfs_create_link(&connector->kdev->kobj, &connector->ddc->dev.kobj, "ddc");