aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm/drm_crtc.h
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2015-01-21 02:45:21 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-01-22 00:11:23 -0500
commit162b6a57ac50eec236530a16c071ffa50e87362a (patch)
treea5ee229d88358a8228124f8f5cfa0a5061b6f91a /include/drm/drm_crtc.h
parent42c5814c9c9828a7fcbe25f69c5c8cbbf29ed957 (diff)
drm/probe-helper: don't lose hotplug event
There's a race window (small for hpd, 10s large for polled outputs) where userspace could sneak in with an unrelated connnector probe ioctl call and eat the hotplug event (since neither the hpd nor the poll code see a state change). To avoid this, check whether the connector state changes in all other ->detect calls (in the current helper code that's only probe_single) and if that's the case, fire off a hotplug event. Note that we can't directly call the hotplug event handler, since that expects that no locks are held (due to reentrancy with the fb code to update the kms console). Also, this requires that drivers using the probe_single helper function set up the poll work. All current drivers do that already, and with the reworked hpd handling there'll be no downside to unconditionally setting up the poll work any more. v2: Review from Rob Clark - Don't bail out of the output poll work immediately if it's disabled to make sure we deliver the delayed hoptplug events. Instead just jump to the tail. - Don't scheduel the work when it's not set up. Would be a driver bug since using probe helpers for anything dynamic without them initialized makes them all noops. Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> (v1) Cc: Rob Clark <robdclark@gmail.com> Reviewed-by: Rob Clark <robdclark@gmail.com> Tested-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'include/drm/drm_crtc.h')
-rw-r--r--include/drm/drm_crtc.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index f444263055c5..65da9fb939a7 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1089,6 +1089,7 @@ struct drm_mode_config {
1089 /* output poll support */ 1089 /* output poll support */
1090 bool poll_enabled; 1090 bool poll_enabled;
1091 bool poll_running; 1091 bool poll_running;
1092 bool delayed_event;
1092 struct delayed_work output_poll_work; 1093 struct delayed_work output_poll_work;
1093 1094
1094 /* pointers to standard properties */ 1095 /* pointers to standard properties */