diff options
author | Rob Clark <robdclark@gmail.com> | 2013-09-11 17:34:07 -0400 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2013-09-11 17:36:28 -0400 |
commit | f816f272437f3a2be0c9254d4ab8f917950d86a0 (patch) | |
tree | 60a194cabed7ef5f367865d62daa99a62f5f6cf4 /drivers/gpu/drm/msm/msm_gem.c | |
parent | 1f70e079c773b2c5988b0f0b4d314fc0f6c7a1b8 (diff) | |
download | op-kernel-dev-f816f272437f3a2be0c9254d4ab8f917950d86a0.zip op-kernel-dev-f816f272437f3a2be0c9254d4ab8f917950d86a0.tar.gz |
drm/msm: return -EBUSY if bo still active
When we CPU_PREP a bo with NOSYNC flag (for example, to implement
PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE), an -EBUSY return indicates to
userspace that the bo is still busy. Previously it was incorrectly
returning 0 in this case.
And while we're in there throw in an bit of extra sanity checking in
case userspace tries to wait for a bogus fence.
Signed-off-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gem.c')
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 5999b67..583286f 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -437,12 +437,16 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, struct msm_gem_object *msm_obj = to_msm_bo(obj); int ret = 0; - if (is_active(msm_obj) && !(op & MSM_PREP_NOSYNC)) { + if (is_active(msm_obj)) { uint32_t fence = 0; + if (op & MSM_PREP_READ) fence = msm_obj->write_fence; if (op & MSM_PREP_WRITE) fence = max(fence, msm_obj->read_fence); + if (op & MSM_PREP_NOSYNC) + timeout = NULL; + ret = msm_wait_fence_interruptable(dev, fence, timeout); } |