diff options
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c index fd56f92f3469..f0efc5db793f 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c | |||
| @@ -411,16 +411,20 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, | |||
| 411 | struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); | 411 | struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); |
| 412 | struct drm_device *dev = obj->dev; | 412 | struct drm_device *dev = obj->dev; |
| 413 | bool write = !!(op & ETNA_PREP_WRITE); | 413 | bool write = !!(op & ETNA_PREP_WRITE); |
| 414 | unsigned long remain = | 414 | int ret; |
| 415 | op & ETNA_PREP_NOSYNC ? 0 : etnaviv_timeout_to_jiffies(timeout); | 415 | |
| 416 | long lret; | 416 | if (op & ETNA_PREP_NOSYNC) { |
| 417 | 417 | if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv, | |
| 418 | lret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv, | 418 | write)) |
| 419 | write, true, remain); | 419 | return -EBUSY; |
| 420 | if (lret < 0) | 420 | } else { |
| 421 | return lret; | 421 | unsigned long remain = etnaviv_timeout_to_jiffies(timeout); |
| 422 | else if (lret == 0) | 422 | |
| 423 | return remain == 0 ? -EBUSY : -ETIMEDOUT; | 423 | ret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv, |
| 424 | write, true, remain); | ||
| 425 | if (ret <= 0) | ||
| 426 | return ret == 0 ? -ETIMEDOUT : ret; | ||
| 427 | } | ||
| 424 | 428 | ||
| 425 | if (etnaviv_obj->flags & ETNA_BO_CACHED) { | 429 | if (etnaviv_obj->flags & ETNA_BO_CACHED) { |
| 426 | if (!etnaviv_obj->sgt) { | 430 | if (!etnaviv_obj->sgt) { |
