aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Roper <[email protected]>2016-01-12 07:13:37 -0800
committerMatt Roper <[email protected]>2016-01-12 10:11:16 -0800
commit0cd1262de7b7509bbbcd650a9918e8895dee6d73 (patch)
tree880ad8a08c2a2e8255d577e7161932664ac733a9
parentceccad59100e2b8fa6b2ba38351ba5e730324f0f (diff)
drm/i915: Handle error paths during watermark sanitization properly (v3)
sanitize_watermarks() does not properly handle errors returned by drm_atomic_helper_duplicate_state(). Make failures drop locks before returning. We also change the lock of connection_mutex to a drm_modeset_lock_all_ctx() to make sure any EDEADLK's are handled earlier. v2: Change call to lock connetion_mutex with a call to drm_modeset_lock_all_ctx(). This ensures that any lock contention is handled earlier and drm_atomic_helper_duplicate_state() won't return EDEADLK. (Maarten) v3: Drop locks properly in more error paths. (Maarten) Cc: Daniel Vetter <[email protected]> Cc: Maarten Lankhorst <[email protected]> Signed-off-by: Matt Roper <[email protected]> Reviewed-by: Maarten Lankhorst <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
-rw-r--r--drivers/gpu/drm/i915/intel_display.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9c87d5784f1a..3b79981735c8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -15355,17 +15355,17 @@ static void sanitize_watermarks(struct drm_device *dev)
*/
drm_modeset_acquire_init(&ctx, 0);
retry:
- ret = drm_modeset_lock(&dev->mode_config.connection_mutex, &ctx);
+ ret = drm_modeset_lock_all_ctx(dev, &ctx);
if (ret == -EDEADLK) {
drm_modeset_backoff(&ctx);
goto retry;
} else if (WARN_ON(ret)) {
- return;
+ goto fail;
}
state = drm_atomic_helper_duplicate_state(dev, &ctx);
if (WARN_ON(IS_ERR(state)))
- return;
+ goto fail;
/*
* Hardware readout is the only time we don't want to calculate
@@ -15388,7 +15388,7 @@ retry:
* BIOS-programmed watermarks untouched and hope for the best.
*/
WARN(true, "Could not determine valid watermarks for inherited state\n");
- return;
+ goto fail;
}
/* Write calculated watermark values back */
@@ -15401,6 +15401,7 @@ retry:
}
drm_atomic_state_free(state);
+fail:
drm_modeset_drop_locks(&ctx);
drm_modeset_acquire_fini(&ctx);
}