]> git.baikalelectronics.ru Git - kernel.git/commit
drm/probe-helper: don't lose hotplug event
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 21 Jan 2015 07:45:21 +0000 (08:45 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 22 Jan 2015 05:11:23 +0000 (06:11 +0100)
commit672569732b91a5d9ee816ee83f625289867e9589
treea5ee229d88358a8228124f8f5cfa0a5061b6f91a
parent2c5b2faa76e60b4846e4e89b4c0758e1b798d955
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>
drivers/gpu/drm/drm_probe_helper.c
include/drm/drm_crtc.h