drm/amdgpu: Add amdgpu_sync_wait
authorHarish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Mon, 15 May 2017 19:09:15 +0000 (15:09 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2017 15:29:46 +0000 (11:29 -0400)
v2: Add intr option

Helper function useful for CPU update of VM page tables. Also useful if
kernel have to synchronously wait till VM page tables are updated.

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

index ed814e6..a689918 100644 (file)
@@ -298,6 +298,25 @@ struct dma_fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync)
        return NULL;
 }
 
+int amdgpu_sync_wait(struct amdgpu_sync *sync, bool intr)
+{
+       struct amdgpu_sync_entry *e;
+       struct hlist_node *tmp;
+       int i, r;
+
+       hash_for_each_safe(sync->fences, i, tmp, e, node) {
+               r = dma_fence_wait(e->fence, intr);
+               if (r)
+                       return r;
+
+               hash_del(&e->node);
+               dma_fence_put(e->fence);
+               kmem_cache_free(amdgpu_sync_slab, e);
+       }
+
+       return 0;
+}
+
 /**
  * amdgpu_sync_free - free the sync object
  *
index 605be26..dc76879 100644 (file)
@@ -49,6 +49,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
 struct dma_fence *amdgpu_sync_peek_fence(struct amdgpu_sync *sync,
                                     struct amdgpu_ring *ring);
 struct dma_fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync);
+int amdgpu_sync_wait(struct amdgpu_sync *sync, bool intr);
 void amdgpu_sync_free(struct amdgpu_sync *sync);
 int amdgpu_sync_init(void);
 void amdgpu_sync_fini(void);