diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-12-06 11:37:15 +0000 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-12-06 13:41:15 +0100 |
commit | 1fe7841d892925aff10c3b070937e974d7835d2b (patch) | |
tree | d6583207eae0d63583ed099e399cf33652bc5b94 /drivers/gpu/drm/drm_probe_helper.c | |
parent | d5264ed3823abb0513cbdc5dd7444d4f61954409 (diff) | |
download | op-kernel-dev-1fe7841d892925aff10c3b070937e974d7835d2b.zip op-kernel-dev-1fe7841d892925aff10c3b070937e974d7835d2b.tar.gz |
drm: Don't block the kworker waiting for mode_config.mutex in output_poll()
If we cannot acquire the mode_config.mutex immediately, just back off and
queue a new attempt after the poll interval. This is mostly to stop the
hung task spam when the system is deadlocked, but it will also lessen
the load (in such extreme cases).
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
[danvet:s/lock/mutex/ per Eric's comment.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20161206113715.30382-1-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/drm_probe_helper.c')
-rw-r--r-- | drivers/gpu/drm/drm_probe_helper.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index 078d970..ac953f0 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -392,7 +392,11 @@ static void output_poll_execute(struct work_struct *work) if (!drm_kms_helper_poll) goto out; - mutex_lock(&dev->mode_config.mutex); + if (!mutex_trylock(&dev->mode_config.mutex)) { + repoll = true; + goto out; + } + drm_for_each_connector(connector, dev) { /* Ignore forced connectors. */ |