diff options
-rw-r--r-- | drivers/gpu/drm/msm/msm_atomic.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_drv.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_drv.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem.c | 2 |
4 files changed, 14 insertions, 13 deletions
diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 1b22d8bfe142..1ceb4f22dd89 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c | |||
@@ -283,12 +283,8 @@ int msm_atomic_commit(struct drm_device *dev, | |||
283 | 283 | ||
284 | timeout = ktime_add_ms(ktime_get(), 1000); | 284 | timeout = ktime_add_ms(ktime_get(), 1000); |
285 | 285 | ||
286 | ret = msm_wait_fence_interruptable(dev, c->fence, &timeout); | 286 | /* uninterruptible wait */ |
287 | if (ret) { | 287 | msm_wait_fence(dev, c->fence, &timeout, false); |
288 | WARN_ON(ret); // TODO unswap state back? or?? | ||
289 | commit_destroy(c); | ||
290 | return ret; | ||
291 | } | ||
292 | 288 | ||
293 | complete_commit(c); | 289 | complete_commit(c); |
294 | 290 | ||
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index b7ef56ed8d1c..d3467b115e04 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c | |||
@@ -637,8 +637,8 @@ static void msm_debugfs_cleanup(struct drm_minor *minor) | |||
637 | * Fences: | 637 | * Fences: |
638 | */ | 638 | */ |
639 | 639 | ||
640 | int msm_wait_fence_interruptable(struct drm_device *dev, uint32_t fence, | 640 | int msm_wait_fence(struct drm_device *dev, uint32_t fence, |
641 | ktime_t *timeout) | 641 | ktime_t *timeout , bool interruptible) |
642 | { | 642 | { |
643 | struct msm_drm_private *priv = dev->dev_private; | 643 | struct msm_drm_private *priv = dev->dev_private; |
644 | int ret; | 644 | int ret; |
@@ -667,7 +667,12 @@ int msm_wait_fence_interruptable(struct drm_device *dev, uint32_t fence, | |||
667 | remaining_jiffies = timespec_to_jiffies(&ts); | 667 | remaining_jiffies = timespec_to_jiffies(&ts); |
668 | } | 668 | } |
669 | 669 | ||
670 | ret = wait_event_interruptible_timeout(priv->fence_event, | 670 | if (interruptible) |
671 | ret = wait_event_interruptible_timeout(priv->fence_event, | ||
672 | fence_completed(dev, fence), | ||
673 | remaining_jiffies); | ||
674 | else | ||
675 | ret = wait_event_timeout(priv->fence_event, | ||
671 | fence_completed(dev, fence), | 676 | fence_completed(dev, fence), |
672 | remaining_jiffies); | 677 | remaining_jiffies); |
673 | 678 | ||
@@ -853,7 +858,7 @@ static int msm_ioctl_wait_fence(struct drm_device *dev, void *data, | |||
853 | return -EINVAL; | 858 | return -EINVAL; |
854 | } | 859 | } |
855 | 860 | ||
856 | return msm_wait_fence_interruptable(dev, args->fence, &timeout); | 861 | return msm_wait_fence(dev, args->fence, &timeout, true); |
857 | } | 862 | } |
858 | 863 | ||
859 | static const struct drm_ioctl_desc msm_ioctls[] = { | 864 | static const struct drm_ioctl_desc msm_ioctls[] = { |
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index e7c5ea125d45..4ff0ec9c994b 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h | |||
@@ -164,8 +164,8 @@ int msm_atomic_commit(struct drm_device *dev, | |||
164 | 164 | ||
165 | int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu); | 165 | int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu); |
166 | 166 | ||
167 | int msm_wait_fence_interruptable(struct drm_device *dev, uint32_t fence, | 167 | int msm_wait_fence(struct drm_device *dev, uint32_t fence, |
168 | ktime_t *timeout); | 168 | ktime_t *timeout, bool interruptible); |
169 | int msm_queue_fence_cb(struct drm_device *dev, | 169 | int msm_queue_fence_cb(struct drm_device *dev, |
170 | struct msm_fence_cb *cb, uint32_t fence); | 170 | struct msm_fence_cb *cb, uint32_t fence); |
171 | void msm_update_fence(struct drm_device *dev, uint32_t fence); | 171 | void msm_update_fence(struct drm_device *dev, uint32_t fence); |
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index f211b80e3a1e..c76cc853b08a 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c | |||
@@ -460,7 +460,7 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout) | |||
460 | if (op & MSM_PREP_NOSYNC) | 460 | if (op & MSM_PREP_NOSYNC) |
461 | timeout = NULL; | 461 | timeout = NULL; |
462 | 462 | ||
463 | ret = msm_wait_fence_interruptable(dev, fence, timeout); | 463 | ret = msm_wait_fence(dev, fence, timeout, true); |
464 | } | 464 | } |
465 | 465 | ||
466 | /* TODO cache maintenance */ | 466 | /* TODO cache maintenance */ |