OSDN Git Service

drm/amdgpu: cleanup amdgpu_cs_list_validate
authorChristian König <christian.koenig@amd.com>
Mon, 21 Dec 2015 19:31:35 +0000 (20:31 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 10 Feb 2016 19:16:45 +0000 (14:16 -0500)
No need to actually check the current placement. Just use the allowed domains
when the threshold is reached.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c

index 2f80da0..c63efd7 100644 (file)
@@ -342,48 +342,44 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
        struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
        struct amdgpu_vm *vm = &fpriv->vm;
        struct amdgpu_bo_list_entry *lobj;
-       struct amdgpu_bo *bo;
        u64 initial_bytes_moved;
        int r;
 
        list_for_each_entry(lobj, validated, tv.head) {
-               bo = lobj->robj;
-               if (!bo->pin_count) {
-                       u32 domain = lobj->prefered_domains;
-                       u32 current_domain =
-                               amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
-
-                       /* Check if this buffer will be moved and don't move it
-                        * if we have moved too many buffers for this IB already.
-                        *
-                        * Note that this allows moving at least one buffer of
-                        * any size, because it doesn't take the current "bo"
-                        * into account. We don't want to disallow buffer moves
-                        * completely.
-                        */
-                       if ((lobj->allowed_domains & current_domain) != 0 &&
-                           (domain & current_domain) == 0 && /* will be moved */
-                           p->bytes_moved > p->bytes_moved_threshold) {
-                               /* don't move it */
-                               domain = current_domain;
-                       }
+               struct amdgpu_bo *bo = lobj->robj;
+               uint32_t domain;
 
-               retry:
-                       amdgpu_ttm_placement_from_domain(bo, domain);
-                       initial_bytes_moved = atomic64_read(&bo->adev->num_bytes_moved);
-                       r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false);
-                       p->bytes_moved += atomic64_read(&bo->adev->num_bytes_moved) -
-                                      initial_bytes_moved;
-
-                       if (unlikely(r)) {
-                               if (r != -ERESTARTSYS && domain != lobj->allowed_domains) {
-                                       domain = lobj->allowed_domains;
-                                       goto retry;
-                               }
-                               return r;
+               lobj->bo_va = amdgpu_vm_bo_find(vm, bo);
+               if (bo->pin_count)
+                       continue;
+
+               /* Avoid moving this one if we have moved too many buffers
+                * for this IB already.
+                *
+                * Note that this allows moving at least one buffer of
+                * any size, because it doesn't take the current "bo"
+                * into account. We don't want to disallow buffer moves
+                * completely.
+                */
+               if (p->bytes_moved <= p->bytes_moved_threshold)
+                       domain = lobj->prefered_domains;
+               else
+                       domain = lobj->allowed_domains;
+
+       retry:
+               amdgpu_ttm_placement_from_domain(bo, domain);
+               initial_bytes_moved = atomic64_read(&bo->adev->num_bytes_moved);
+               r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false);
+               p->bytes_moved += atomic64_read(&bo->adev->num_bytes_moved) -
+                              initial_bytes_moved;
+
+               if (unlikely(r)) {
+                       if (r != -ERESTARTSYS && domain != lobj->allowed_domains) {
+                               domain = lobj->allowed_domains;
+                               goto retry;
                        }
+                       return r;
                }
-               lobj->bo_va = amdgpu_vm_bo_find(vm, bo);
        }
        return 0;
 }