[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