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

Reply via email to