]> git.karo-electronics.de Git - karo-tx-linux.git/commit
drm/i2c: adv7511: Fix mutex deadlock when interrupts are disabled
authorArchit Taneja <architt@codeaurora.org>
Fri, 3 Jul 2015 06:11:10 +0000 (11:41 +0530)
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Mon, 11 Jan 2016 09:54:42 +0000 (09:54 +0000)
commit3795f2d7d0055c8233376467cbfdd5da893ade5d
tree6b5c16ed5b0667e2e2037f7429bf92e653eb96b3
parente1ccb3bfbba42d9e806589a61db65171fa3dd8a5
drm/i2c: adv7511: Fix mutex deadlock when interrupts are disabled

When the adv7511 i2c client doesn't have an interrupt line, we observe a
deadlock on caused by trying to lock drm device's mode_config.mutex twice
in the same context.

Here is the sequence that causes it:

ioctl DRM_IOCTL_MODE_GETCONNECTOR from userspace
  drm_mode_getconnector (acquires mode_config mutex)
    connector->fill_modes()
    drm_helper_probe_single_connector_modes
      connector_funcs->get_modes
adv7511_encoder_get_modes
  adv7511_get_edid_block
    adv7511_irq_process
      drm_helper_hpd_irq_event (acquires mode_config mutex again)

In adv7511_irq_process, don't call drm_helper_hpd_irq_event when not
called from interrupt context. It doesn't serve any purpose there anyway.

Signed-off-by: Archit Taneja <architt@codeaurora.org>
drivers/gpu/drm/i2c/adv7511.c