Am 15.05.2017 um 23:32 schrieb Harish Kasiviswanathan: > 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 at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 19 +++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h | 1 + > 2 files changed, 20 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > index 5c8d302..e5b202e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > @@ -296,6 +296,25 @@ struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync) > return NULL; > } > > +int amdgpu_sync_wait(struct amdgpu_sync *sync) > +{ > + struct amdgpu_sync_entry *e; > + struct hlist_node *tmp; > + int i, r; > + > + hash_for_each_safe(sync->fences, i, tmp, e, node) { > + r = fence_wait(e->fence, false); Depending on how you gonna use this you might want to wait interruptible here. Apart from that the patch is Reviewed-by: Christian König <christian.koenig at amd.com>. Regards, Christian. > + if (r) > + return r; > + > + hash_del(&e->node); > + fence_put(e->fence); > + kmem_cache_free(amdgpu_sync_slab, e); > + } > + > + return 0; > +} > + > /** > * amdgpu_sync_free - free the sync object > * > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > index 405f379..6c9c489 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > @@ -49,6 +49,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, > struct fence *amdgpu_sync_peek_fence(struct amdgpu_sync *sync, > struct amdgpu_ring *ring); > struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync); > +int amdgpu_sync_wait(struct amdgpu_sync *sync); > void amdgpu_sync_free(struct amdgpu_sync *sync); > int amdgpu_sync_init(void); > void amdgpu_sync_fini(void);