Am 07.02.19 um 20:53 schrieb Kuehling, Felix: > Creates a temporary sync object to wait for the reservation. This > generalizes amdgpu_vm_wait_pd. > > Signed-off-by: Felix Kuehling <felix.kuehl...@amd.com>
For this one it might be better to name this function amdgpu_bo_sync_wait and add it to amdgpu_object.c. Just because the object we work with is the BO/resv and not the sync container. Apart from that the series looks good to me and patches #2 and #3 are Reviewed-by: Christian König <christian.koe...@amd.com> and patch #4 is Acked-by: Christian König <christian.koe...@amd.com> Regards, Christian. > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 25 +++++++++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h | 3 +++ > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 31 > ++++--------------------------- > 3 files changed, 32 insertions(+), 27 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > index 2d6f5ec..f56d104 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c > @@ -377,6 +377,31 @@ int amdgpu_sync_wait(struct amdgpu_sync *sync, bool intr) > } > > /** > + * amdgpu_sync_wait_resv - Wait for reservation fences > + * > + * @vm: related vm > + * @owner: fence owner > + * @intr: Whether the wait is interruptible > + * > + * Returns: > + * 0 on success, errno otherwise. > + */ > +int amdgpu_sync_wait_resv(struct amdgpu_device *adev, > + struct reservation_object *resv, > + void *owner, bool intr) > +{ > + struct amdgpu_sync sync; > + int r; > + > + amdgpu_sync_create(&sync); > + amdgpu_sync_resv(adev, &sync, resv, owner, false); > + r = amdgpu_sync_wait(&sync, intr); > + amdgpu_sync_free(&sync); > + > + return r; > +} > + > +/** > * amdgpu_sync_free - free the sync object > * > * @sync: sync object to use > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > index 10cf23a..af6eea6 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h > @@ -52,6 +52,9 @@ struct dma_fence *amdgpu_sync_peek_fence(struct amdgpu_sync > *sync, > struct dma_fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync, bool > *explicit); > int amdgpu_sync_clone(struct amdgpu_sync *source, struct amdgpu_sync > *clone); > int amdgpu_sync_wait(struct amdgpu_sync *sync, bool intr); > +int amdgpu_sync_wait_resv(struct amdgpu_device *adev, > + struct reservation_object *resv, > + void *owner, bool intr); > void amdgpu_sync_free(struct amdgpu_sync *sync); > int amdgpu_sync_init(void); > void amdgpu_sync_fini(void); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index 5d7c191..ed1ca1d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -1330,31 +1330,6 @@ static void amdgpu_vm_cpu_set_ptes(struct > amdgpu_pte_update_params *params, > } > } > > - > -/** > - * amdgpu_vm_wait_pd - Wait for PT BOs to be free. > - * > - * @adev: amdgpu_device pointer > - * @vm: related vm > - * @owner: fence owner > - * > - * Returns: > - * 0 on success, errno otherwise. > - */ > -static int amdgpu_vm_wait_pd(struct amdgpu_device *adev, struct amdgpu_vm > *vm, > - void *owner) > -{ > - struct amdgpu_sync sync; > - int r; > - > - amdgpu_sync_create(&sync); > - amdgpu_sync_resv(adev, &sync, vm->root.base.bo->tbo.resv, owner, false); > - r = amdgpu_sync_wait(&sync, true); > - amdgpu_sync_free(&sync); > - > - return r; > -} > - > /** > * amdgpu_vm_update_func - helper to call update function > * > @@ -1449,7 +1424,8 @@ int amdgpu_vm_update_directories(struct amdgpu_device > *adev, > params.adev = adev; > > if (vm->use_cpu_for_update) { > - r = amdgpu_vm_wait_pd(adev, vm, AMDGPU_FENCE_OWNER_VM); > + r = amdgpu_sync_wait_resv(adev, vm->root.base.bo->tbo.resv, > + AMDGPU_FENCE_OWNER_VM, true); > if (unlikely(r)) > return r; > > @@ -1782,7 +1758,8 @@ static int amdgpu_vm_bo_update_mapping(struct > amdgpu_device *adev, > /* Wait for PT BOs to be idle. PTs share the same resv. object > * as the root PD BO > */ > - r = amdgpu_vm_wait_pd(adev, vm, owner); > + r = amdgpu_sync_wait_resv(adev, vm->root.base.bo->tbo.resv, > + owner, true); > if (unlikely(r)) > return r; > _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx