Merge "drm/msm: wait fence complete before flip"

This commit is contained in:
Linux Build Service Account 2017-05-25 15:51:48 -07:00 committed by Gerrit - the friendly Code Review server
commit 599b4011d6

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
* Copyright (C) 2014 Red Hat * Copyright (C) 2014 Red Hat
* Author: Rob Clark <robdclark@gmail.com> * Author: Rob Clark <robdclark@gmail.com>
* *
@ -429,11 +429,21 @@ static void complete_commit(struct msm_commit *commit)
commit_destroy(commit); commit_destroy(commit);
} }
static int msm_atomic_commit_dispatch(struct drm_device *dev,
struct drm_atomic_state *state, struct msm_commit *commit);
static void fence_cb(struct msm_fence_cb *cb) static void fence_cb(struct msm_fence_cb *cb)
{ {
struct msm_commit *commit = struct msm_commit *commit =
container_of(cb, struct msm_commit, fence_cb); container_of(cb, struct msm_commit, fence_cb);
complete_commit(commit); int ret = -EINVAL;
ret = msm_atomic_commit_dispatch(commit->dev, commit->state, commit);
if (ret) {
DRM_ERROR("%s: atomic commit failed\n", __func__);
drm_atomic_state_free(commit->state);
commit_destroy(commit);
}
} }
static void _msm_drm_commit_work_cb(struct kthread_work *work) static void _msm_drm_commit_work_cb(struct kthread_work *work)
@ -624,13 +634,7 @@ int msm_atomic_commit(struct drm_device *dev,
*/ */
if (async) { if (async) {
ret = msm_atomic_commit_dispatch(dev, state, commit); msm_queue_fence_cb(dev, &commit->fence_cb, commit->fence);
if (ret) {
DRM_ERROR("%s: atomic commit failed\n", __func__);
drm_atomic_state_free(state);
commit_destroy(commit);
goto error;
}
return 0; return 0;
} }