]> git.karo-electronics.de Git - linux-beck.git/commitdiff
drm/etnaviv: Remove manual call to reservation_object_test_signaled_rcu before wait
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 29 Aug 2016 07:08:25 +0000 (08:08 +0100)
committerSumit Semwal <sumit.semwal@linaro.org>
Wed, 12 Oct 2016 14:14:48 +0000 (19:44 +0530)
Since fence_wait_timeout_reservation_object_wait_timeout_rcu() with a
timeout of 0 becomes reservation_object_test_signaled_rcu(), we do not
need to handle such conversion in the caller. The only challenge are
those callers that wish to differentiate the error code between the
nonblocking busy check and potentially blocking wait.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Russell King <linux+etnaviv@armlinux.org.uk>
Cc: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20160829070834.22296-2-chris@chris-wilson.co.uk
drivers/gpu/drm/etnaviv/etnaviv_gem.c

index 5ce3603e6eacb1aab7c59ed66399f743d5346990..9ffca2478e029e80bf53c0774a595d36ec25171b 100644 (file)
@@ -409,20 +409,16 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op,
        struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
        struct drm_device *dev = obj->dev;
        bool write = !!(op & ETNA_PREP_WRITE);
-       int ret;
-
-       if (op & ETNA_PREP_NOSYNC) {
-               if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv,
-                                                         write))
-                       return -EBUSY;
-       } else {
-               unsigned long remain = etnaviv_timeout_to_jiffies(timeout);
-
-               ret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv,
-                                                         write, true, remain);
-               if (ret <= 0)
-                       return ret == 0 ? -ETIMEDOUT : ret;
-       }
+       unsigned long remain =
+               op & ETNA_PREP_NOSYNC ? 0 : etnaviv_timeout_to_jiffies(timeout);
+       long lret;
+
+       lret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv,
+                                                  write, true, remain);
+       if (lret < 0)
+               return lret;
+       else if (lret == 0)
+               return remain == 0 ? -EBUSY : -ETIMEDOUT;
 
        if (etnaviv_obj->flags & ETNA_BO_CACHED) {
                if (!etnaviv_obj->sgt) {