Message ID | 1464597519-16659-4-git-send-email-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, May 30, 2016 at 09:38:21AM +0100, Chris Wilson wrote: > Protect against drivers that may try to register the connector more > than once, or who try to unregister it multiple times. > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: dri-devel@lists.freedesktop.org > --- > drivers/gpu/drm/drm_crtc.c | 9 +++++++++ > include/drm/drm_crtc.h | 1 + > 2 files changed, 10 insertions(+) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 81641544ac3e..8b9ee921a9e1 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -1030,6 +1030,9 @@ int drm_connector_register(struct drm_connector *connector) > { > int ret; > > + if (connector->registered) > + return 0; > + > ret = drm_sysfs_connector_add(connector); > if (ret) > return ret; > @@ -1047,6 +1050,7 @@ int drm_connector_register(struct drm_connector *connector) > > drm_mode_object_register(connector->dev, &connector->base); > > + connector->registered = true; > return 0; > > err_debugfs: > @@ -1065,11 +1069,16 @@ EXPORT_SYMBOL(drm_connector_register); > */ > void drm_connector_unregister(struct drm_connector *connector) > { > + if (!connector->registered) > + return; > + > if (connector->funcs->early_unregister) > connector->funcs->early_unregister(connector); > > drm_sysfs_connector_remove(connector); > drm_debugfs_connector_remove(connector); > + > + connector->registered = false; > } > EXPORT_SYMBOL(drm_connector_unregister); > > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index 77b775cff4e7..35e47eea5ee1 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -1212,6 +1212,7 @@ struct drm_connector { > bool interlace_allowed; > bool doublescan_allowed; > bool stereo_allowed; > + bool registered; Needs kerneldoc for this on, with that fixed Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > struct list_head modes; /* list of modes on this connector */ > > enum drm_connector_status status; > -- > 2.8.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 81641544ac3e..8b9ee921a9e1 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1030,6 +1030,9 @@ int drm_connector_register(struct drm_connector *connector) { int ret; + if (connector->registered) + return 0; + ret = drm_sysfs_connector_add(connector); if (ret) return ret; @@ -1047,6 +1050,7 @@ int drm_connector_register(struct drm_connector *connector) drm_mode_object_register(connector->dev, &connector->base); + connector->registered = true; return 0; err_debugfs: @@ -1065,11 +1069,16 @@ EXPORT_SYMBOL(drm_connector_register); */ void drm_connector_unregister(struct drm_connector *connector) { + if (!connector->registered) + return; + if (connector->funcs->early_unregister) connector->funcs->early_unregister(connector); drm_sysfs_connector_remove(connector); drm_debugfs_connector_remove(connector); + + connector->registered = false; } EXPORT_SYMBOL(drm_connector_unregister); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 77b775cff4e7..35e47eea5ee1 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -1212,6 +1212,7 @@ struct drm_connector { bool interlace_allowed; bool doublescan_allowed; bool stereo_allowed; + bool registered; struct list_head modes; /* list of modes on this connector */ enum drm_connector_status status;
Protect against drivers that may try to register the connector more than once, or who try to unregister it multiple times. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: dri-devel@lists.freedesktop.org --- drivers/gpu/drm/drm_crtc.c | 9 +++++++++ include/drm/drm_crtc.h | 1 + 2 files changed, 10 insertions(+)