linux/drivers/gpu/drm/bridge/analogix
Yakir Yang 7b4b7a8db4 drm: bridge: analogix/dp: Fix the possible dead lock in bridge disable time
It may caused a dead lock if we flush the hpd work in bridge disable time.

The normal flow would like:
  IN --> DRM IOCTL
        1. Acquire crtc_ww_class_mutex (DRM IOCTL)
  IN --> analogix_dp_bridge
        2. Acquire hpd work lock (Flush hpd work)
        3. HPD work already in idle, no need to run the work function.
  OUT <-- analogix_dp_bridge
  OUT <-- DRM IOCTL

The dead lock flow would like:
  IN --> DRM IOCTL
        1. Acquire crtc_ww_class_mutex (DRM IOCTL)
  IN --> analogix_dp_bridge
        2. Acquire hpd work lock (Flush hpd work)
  IN --> analogix_dp_hotplug
  IN --> drm_helper_hpd_irq_event
        3. Acquire mode_config lock (This lock already have been acquired in previous step 1)
** Dead Lock Now **

It's wrong to flush the hpd work in bridge->disable time, I guess the
original code just want to ensure the delay work must be finish before
encoder disabled.

The flush work in bridge disable time is try to ensure the HPD event
won't be missed before display card disabled, actually we can take a
fast respond way(interrupt thread) to update DRM HPD event to fix the
delay update and possible dead lock.

Tested-by: Caesar Wang <wxt@rock-chips.com>
Tested-by: Douglas Anderson <dianders@chromium.org>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Yakir Yang <ykk@rock-chips.com>
2016-04-05 10:13:10 +08:00
..
Kconfig drm: bridge: analogix/dp: split exynos dp driver to bridge directory 2016-04-05 10:11:48 +08:00
Makefile drm: bridge: analogix/dp: split exynos dp driver to bridge directory 2016-04-05 10:11:48 +08:00
analogix_dp_core.c drm: bridge: analogix/dp: Fix the possible dead lock in bridge disable time 2016-04-05 10:13:10 +08:00
analogix_dp_core.h drm: bridge: analogix/dp: Fix the possible dead lock in bridge disable time 2016-04-05 10:13:10 +08:00
analogix_dp_reg.c drm: bridge: analogix/dp: Fix the possible dead lock in bridge disable time 2016-04-05 10:13:10 +08:00
analogix_dp_reg.h drm: bridge: analogix/dp: add some rk3288 special registers setting 2016-04-05 10:13:06 +08:00