Commit f4d41d93 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Daniel Vetter
Browse files

drm/atmel-hlcdc: Handle drm_atomic_helper_swap_state failure



drm_atomic_helper_swap_state() will be changed to interruptible waiting
in the next few commits, so all drivers have to be changed to handling
failure.

Atmel tracks pending commits through dc->commit.pending, so it can
ignore the changes by setting stall = false. We never return failure in
this case, so make failure a BUG_ON.

Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170711143314.2148-5-maarten.lankhorst@linux.intel.com


Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 8572636e
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -539,14 +539,13 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
		dc->commit.pending = true;
	spin_unlock(&dc->commit.wait.lock);

	if (ret) {
		kfree(commit);
		goto error;
	}
	if (ret)
		goto err_free;

	/* Swap the state, this is the point of no return. */
	drm_atomic_helper_swap_state(state, true);
	/* We have our own synchronization through the commit lock. */
	BUG_ON(drm_atomic_helper_swap_state(state, false) < 0);

	/* Swap state succeeded, this is the point of no return. */
	drm_atomic_state_get(state);
	if (async)
		queue_work(dc->wq, &commit->work);
@@ -555,6 +554,8 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,

	return 0;

err_free:
	kfree(commit);
error:
	drm_atomic_helper_cleanup_planes(dev, state);
	return ret;