[PATCH 05/11] drm/amdgpu: add vm recover entity
Edward O'Callaghan
funfunctor at folklore1984.net
Sat Jul 30 03:51:57 UTC 2016
On 07/28/2016 08:13 PM, Chunming Zhou wrote:
> every vm uses itself recover entity to recovery page table from shadow.
>
> Change-Id: I93e37666cb3fb511311c96ff172b6e9ebd337547
> Signed-off-by: Chunming Zhou <David1.Zhou at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 ++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 21 ++++++++++++++-------
> 2 files changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 9f7fae0..98f631a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -911,7 +911,8 @@ struct amdgpu_vm {
>
> /* Scheduler entity for page table updates */
> struct amd_sched_entity entity;
> -
> + struct amd_sched_entity recover_entity;
> + struct amdgpu_ring *ring;
> /* client id */
> u64 client_id;
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 1d58577..6d2a28a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -714,13 +714,13 @@ error_free:
> }
>
> static int amdgpu_vm_recover_bo_from_shadow(struct amdgpu_device *adev,
> + struct amdgpu_vm *vm,
> struct amdgpu_bo *bo,
> struct amdgpu_bo *bo_shadow,
> struct reservation_object *resv,
> struct fence **fence)
>
> {
> - struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring;
> int r;
> uint64_t vram_addr, gtt_addr;
>
> @@ -739,8 +739,8 @@ static int amdgpu_vm_recover_bo_from_shadow(struct amdgpu_device *adev,
> if (r)
> goto err3;
>
> - r = amdgpu_copy_buffer(ring, &adev->mman.entity, gtt_addr, vram_addr,
> - amdgpu_bo_size(bo), resv, fence);
> + r = amdgpu_copy_buffer(vm->ring, &vm->recover_entity, gtt_addr,
> + vram_addr, amdgpu_bo_size(bo), resv, fence);
> if (!r)
> amdgpu_bo_fence(bo, *fence, true);
>
> @@ -767,7 +767,7 @@ int amdgpu_vm_recover_page_table_from_shadow(struct amdgpu_device *adev,
> if (unlikely(r != 0))
> return r;
>
> - r = amdgpu_vm_recover_bo_from_shadow(adev, vm->page_directory,
> + r = amdgpu_vm_recover_bo_from_shadow(adev, vm, vm->page_directory,
> vm->page_directory->shadow,
> NULL, &fence);
This is slightly out of scope from your patchsets intention however:
If we are passing 'vm' in now to 'amdgpu_vm_recover_bo_from_shadow()'
could we then perhaps do the dereferences to 'vm->page_directory' and
'vm->page_directory->shadow' in there?
> if (r) {
> @@ -784,7 +784,7 @@ int amdgpu_vm_recover_page_table_from_shadow(struct amdgpu_device *adev,
>
> if (!bo || !bo_shadow)
> continue;
> - r = amdgpu_vm_recover_bo_from_shadow(adev, bo, bo_shadow,
> + r = amdgpu_vm_recover_bo_from_shadow(adev, vm, bo, bo_shadow,
> NULL, &fence);
> if (r) {
> DRM_ERROR("recover page table failed!\n");
> @@ -1678,12 +1678,17 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
> ring_instance = atomic_inc_return(&adev->vm_manager.vm_pte_next_ring);
> ring_instance %= adev->vm_manager.vm_pte_num_rings;
> ring = adev->vm_manager.vm_pte_rings[ring_instance];
> + rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_RECOVER];
> + r = amd_sched_entity_init(&ring->sched, &vm->recover_entity,
> + rq, amdgpu_sched_jobs);
> + if (r)
> + goto err;
> rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_KERNEL];
> r = amd_sched_entity_init(&ring->sched, &vm->entity,
> rq, amdgpu_sched_jobs);
> if (r)
> - goto err;
> -
> + goto err1;
> + vm->ring = ring;
> vm->page_directory_fence = NULL;
>
> r = amdgpu_bo_create(adev, pd_size, align, true,
> @@ -1725,6 +1730,8 @@ error_free_page_directory:
> error_free_sched_entity:
> amd_sched_entity_fini(&ring->sched, &vm->entity);
>
> +err1:
> + amd_sched_entity_fini(&ring->sched, &vm->recover_entity);
> err:
> drm_free_large(vm->page_tables);
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20160730/39587e86/attachment.sig>
More information about the amd-gfx
mailing list