[PATCH 4/7] drm/amdgpu: stop using a bo list entry for the VM PTs

Alex Deucher alexdeucher at gmail.com
Thu Sep 29 16:52:44 UTC 2016


On Thu, Sep 29, 2016 at 3:52 AM, Christian König
<deathsimple at vodafone.de> wrote:
> From: Christian König <christian.koenig at amd.com>
>
> Saves us a bit of memory.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h    |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 34 ++++++++++++++--------------------
>  2 files changed, 16 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 0c2d32b..f7016d1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -822,8 +822,8 @@ struct amdgpu_ring {
>  #define AMDGPU_VM_FAULT_STOP_ALWAYS    2
>
>  struct amdgpu_vm_pt {
> -       struct amdgpu_bo_list_entry     entry;
> -       uint64_t                        addr;
> +       struct amdgpu_bo        *bo;
> +       uint64_t                addr;
>  };
>
>  struct amdgpu_vm {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 4c5e79a..59f217b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -141,12 +141,12 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm,
>
>         /* add the vm page table to the list */
>         for (i = 0; i <= vm->max_pde_used; ++i) {
> -               struct amdgpu_bo_list_entry *entry = &vm->page_tables[i].entry;
> +               struct amdgpu_bo *bo = vm->page_tables[i].bo;
>
> -               if (!entry->robj)
> +               if (!bo)
>                         continue;
>
> -               r = callback(param, entry->robj);
> +               r = callback(param, bo);
>                 if (r)
>                         return r;
>         }
> @@ -170,12 +170,12 @@ void amdgpu_vm_move_pt_bos_in_lru(struct amdgpu_device *adev,
>
>         spin_lock(&glob->lru_lock);
>         for (i = 0; i <= vm->max_pde_used; ++i) {
> -               struct amdgpu_bo_list_entry *entry = &vm->page_tables[i].entry;
> +               struct amdgpu_bo *bo = vm->page_tables[i].bo;
>
> -               if (!entry->robj)
> +               if (!bo)
>                         continue;
>
> -               ttm_bo_move_to_lru_tail(&entry->robj->tbo);
> +               ttm_bo_move_to_lru_tail(&bo->tbo);
>         }
>         spin_unlock(&glob->lru_lock);
>  }
> @@ -673,7 +673,7 @@ int amdgpu_vm_update_page_directory(struct amdgpu_device *adev,
>
>         /* walk over the address space and update the page directory */
>         for (pt_idx = 0; pt_idx <= vm->max_pde_used; ++pt_idx) {
> -               struct amdgpu_bo *bo = vm->page_tables[pt_idx].entry.robj;
> +               struct amdgpu_bo *bo = vm->page_tables[pt_idx].bo;
>                 uint64_t pde, pt;
>
>                 if (bo == NULL)
> @@ -789,11 +789,11 @@ static void amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
>         /* initialize the variables */
>         addr = start;
>         pt_idx = addr >> amdgpu_vm_block_size;
> -       pt = vm->page_tables[pt_idx].entry.robj;
> +       pt = vm->page_tables[pt_idx].bo;
>         if (params->shadow) {
>                 if (!pt->shadow)
>                         return;
> -               pt = vm->page_tables[pt_idx].entry.robj->shadow;
> +               pt = pt->shadow;
>         }
>         if ((addr & ~mask) == (end & ~mask))
>                 nptes = end - addr;
> @@ -812,11 +812,11 @@ static void amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
>         /* walk over the address space and update the page tables */
>         while (addr < end) {
>                 pt_idx = addr >> amdgpu_vm_block_size;
> -               pt = vm->page_tables[pt_idx].entry.robj;
> +               pt = vm->page_tables[pt_idx].bo;
>                 if (params->shadow) {
>                         if (!pt->shadow)
>                                 return;
> -                       pt = vm->page_tables[pt_idx].entry.robj->shadow;
> +                       pt = pt->shadow;
>                 }
>
>                 if ((addr & ~mask) == (end & ~mask))
> @@ -1428,11 +1428,9 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
>         /* walk over the address space and allocate the page tables */
>         for (pt_idx = saddr; pt_idx <= eaddr; ++pt_idx) {
>                 struct reservation_object *resv = vm->page_directory->tbo.resv;
> -               struct amdgpu_bo_list_entry *entry;
>                 struct amdgpu_bo *pt;
>
> -               entry = &vm->page_tables[pt_idx].entry;
> -               if (entry->robj)
> +               if (vm->page_tables[pt_idx].bo)
>                         continue;
>
>                 r = amdgpu_bo_create(adev, AMDGPU_VM_PTE_COUNT * 8,
> @@ -1466,11 +1464,7 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
>                         }
>                 }
>
> -               entry->robj = pt;
> -               entry->priority = 0;
> -               entry->tv.bo = &entry->robj->tbo;
> -               entry->tv.shared = true;
> -               entry->user_pages = NULL;
> +               vm->page_tables[pt_idx].bo = pt;
>                 vm->page_tables[pt_idx].addr = 0;
>         }
>
> @@ -1722,7 +1716,7 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>         }
>
>         for (i = 0; i < amdgpu_vm_num_pdes(adev); i++) {
> -               struct amdgpu_bo *pt = vm->page_tables[i].entry.robj;
> +               struct amdgpu_bo *pt = vm->page_tables[i].bo;
>
>                 if (!pt)
>                         continue;
> --
> 2.5.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list