[PATCH 3/6] drm/amdgpu: allocate VM PDs/PTs on demand
Russell, Kent
Kent.Russell at amd.com
Tue Mar 12 15:01:28 UTC 2019
Oh right, I remember that issue. I had that happen to me once, where my installed libhsakmt didn't match up with the latest source code, so I ended up having to remove the libhsakmt package and pointing it to the folders instead.
Kent
> -----Original Message-----
> From: Koenig, Christian
> Sent: Tuesday, March 12, 2019 10:49 AM
> To: Russell, Kent <Kent.Russell at amd.com>; Kuehling, Felix
> <Felix.Kuehling at amd.com>; amd-gfx at lists.freedesktop.org
> Subject: Re: [PATCH 3/6] drm/amdgpu: allocate VM PDs/PTs on demand
>
> Yeah, the problem is I do have the libhsakmt installed.
>
> Going to give it a try to specify the directory directly.
>
> Christian.
>
> Am 12.03.19 um 15:47 schrieb Russell, Kent:
> > The README.txt file inside the tests/kfdtest folder has instructions on how
> to do it if you don't have the libhsakmt package installed on your system:
> >
> > export LIBHSAKMT_PATH=/*your local libhsakmt folder*/ With that, the
> > headers and libraries are searched under LIBHSAKMT_PATH/include and
> > LIBHSAKMT_PATH/lib respectively.
> >
> > So if you try export LIBHSAKMT_PATH as the root ROCT folder (the one
> containing include, src, tests, etc), then that should cover it.
> >
> > Kent
> >
> >
> >> -----Original Message-----
> >> From: Christian König <ckoenig.leichtzumerken at gmail.com>
> >> Sent: Tuesday, March 12, 2019 9:13 AM
> >> To: Russell, Kent <Kent.Russell at amd.com>; Kuehling, Felix
> >> <Felix.Kuehling at amd.com>; Koenig, Christian
> >> <Christian.Koenig at amd.com>; amd-gfx at lists.freedesktop.org
> >> Subject: Re: [PATCH 3/6] drm/amdgpu: allocate VM PDs/PTs on demand
> >>
> >> Hi guys,
> >>
> >> so found a few minutes today to compile kfdtest.
> >>
> >> Problem is that during the compile I get a lots of this:
> >>> CMakeFiles/kfdtest.dir/src/BaseQueue.cpp.o: In Funktion
> >>> »BaseQueue::Create(unsigned int, unsigned int, unsigned long*)«:
> >>> /usr/src/ROCT-Thunk-Interface/tests/kfdtest/src/BaseQueue.cpp:57:
> >>> Warnung: undefinierter Verweis auf »hsaKmtCreateQueue«
> >> Any idea?
> >>
> >> Christian.
> >>
> >> Am 11.03.19 um 17:55 schrieb Christian König:
> >>> Hi guys,
> >>>
> >>> well it's most likely some missing handling in the KFD, so I'm
> >>> rather reluctant to revert the change immediately.
> >>>
> >>> Problem is that I don't have time right now to look into it
> >>> immediately. So Kent can you continue to take a look?
> >>>
> >>> Sounds like its crashing immediately, so it should be something obvious.
> >>>
> >>> Christian.
> >>>
> >>> Am 11.03.19 um 10:49 schrieb Russell, Kent:
> >>>> From what I've been able to dig through, the VM Fault seems to
> >>>> occur right after a doorbell mmap, but that's as far as I got. I
> >>>> can try to revert it in today's merge and see how things go.
> >>>>
> >>>> Kent
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: Kuehling, Felix
> >>>>> Sent: Friday, March 08, 2019 11:16 PM
> >>>>> To: Koenig, Christian <Christian.Koenig at amd.com>; Russell, Kent
> >>>>> <Kent.Russell at amd.com>; amd-gfx at lists.freedesktop.org
> >>>>> Subject: RE: [PATCH 3/6] drm/amdgpu: allocate VM PDs/PTs on
> demand
> >>>>>
> >>>>> My concerns were related to eviction fence handing. It would
> >>>>> manifest by unnecessary eviction callbacks into KFD that aren't
> >>>>> cause by real evictions. I addressed that with a previous patch
> >>>>> series that removed the need to remove eviction fences and add
> >>>>> them back around page table updates in amdgpu_amdkfd_gpuvm.c.
> >>>>>
> >>>>> I don't know what's going on here. I can probably take a look on
> >>>>> Monday. I haven't considered what changed with respect to PD
> >>>>> updates.
> >>>>>
> >>>>> Kent, can we temporarily revert the offending change in
> >>>>> amd-kfd-staging just to unblock the merge?
> >>>>>
> >>>>> Christian, I think KFD is currently broken on amd-staging-drm-next.
> >>>>> If we're
> >>>>> serious about supporting KFD upstream, you may also want to
> >>>>> consider reverting your change there for now. Also consider
> >>>>> building the Thunk and kfdtest so you can do quick smoke tests
> >>>>> locally whenever you make amdgpu_vm changes that can affect KFD.
> >>>>> https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface
> >>>>>
> >>>>> Regards,
> >>>>> Felix
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf
> Of
> >>>>> Christian König
> >>>>> Sent: Friday, March 08, 2019 9:14 AM
> >>>>> To: Russell, Kent <Kent.Russell at amd.com>;
> >>>>> amd-gfx at lists.freedesktop.org
> >>>>> Subject: Re: [PATCH 3/6] drm/amdgpu: allocate VM PDs/PTs on
> demand
> >>>>>
> >>>>> My best guess is that we forget somewhere to update the PDs. What
> >>>>> hardware is that on?
> >>>>>
> >>>>> Felix already mentioned that this could be problematic for the KFD.
> >>>>>
> >>>>> Maybe he has an idea,
> >>>>> Christian.
> >>>>>
> >>>>> Am 08.03.19 um 15:04 schrieb Russell, Kent:
> >>>>>> Hi Christian,
> >>>>>>
> >>>>>> This patch ended up causing a VM Fault in KFDTest. Reverting just
> >>>>>> this
> >>>>> patch addressed the issue:
> >>>>>> [ 82.703503] amdgpu 0000:0c:00.0: GPU fault detected: 146
> >>>>>> 0x0000480c for
> >>>>> process pid 0 thread pid 0
> >>>>>> [ 82.703512] amdgpu 0000:0c:00.0:
> >>>>> VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00001000
> >>>>>> [ 82.703516] amdgpu 0000:0c:00.0:
> >>>>> VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x1004800C
> >>>>>> [ 82.703522] amdgpu 0000:0c:00.0: VM fault (0x0c, vmid 8, pasid
> >>>>>> 32769) at
> >>>>> page 4096, read from 'TC0' (0x54433000) (72)
> >>>>>> [ 82.703585] Evicting PASID 32769 queues
> >>>>>>
> >>>>>> I am looking into it, but if you have any insight that would be
> >>>>>> great in
> >>>>> helping to resolve it quickly.
> >>>>>> Kent
> >>>>>>> -----Original Message-----
> >>>>>>> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On
> Behalf
> >> Of
> >>>>>>> Christian König
> >>>>>>> Sent: Tuesday, February 26, 2019 7:47 AM
> >>>>>>> To: amd-gfx at lists.freedesktop.org
> >>>>>>> Subject: [PATCH 3/6] drm/amdgpu: allocate VM PDs/PTs on
> demand
> >>>>>>>
> >>>>>>> Let's start to allocate VM PDs/PTs on demand instead of
> >>>>>>> pre-allocating them during mapping.
> >>>>>>>
> >>>>>>> Signed-off-by: Christian König <christian.koenig at amd.com>
> >>>>>>> Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> >>>>>>> ---
> >>>>>>> .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 10 +-
> >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | 9 --
> >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 10 --
> >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 136
> >>>>>>> +++++------------
> >>>>> -
> >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 3 -
> >>>>>>> 5 files changed, 39 insertions(+), 129 deletions(-)
> >>>>>>>
> >>>>>>> diff --git
> a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >>>>>>> index 31e3953dcb6e..088e9b6b765b 100644
> >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >>>>>>> @@ -410,15 +410,7 @@ static int add_bo_to_vm(struct
> >> amdgpu_device
> >>>>>>> *adev, struct kgd_mem *mem,
> >>>>>>> if (p_bo_va_entry)
> >>>>>>> *p_bo_va_entry = bo_va_entry;
> >>>>>>>
> >>>>>>> - /* Allocate new page tables if needed and validate
> >>>>>>> - * them.
> >>>>>>> - */
> >>>>>>> - ret = amdgpu_vm_alloc_pts(adev, vm, va,
> >>>>>>> amdgpu_bo_size(bo));
> >>>>>>> - if (ret) {
> >>>>>>> - pr_err("Failed to allocate pts, err=%d\n", ret);
> >>>>>>> - goto err_alloc_pts;
> >>>>>>> - }
> >>>>>>> -
> >>>>>>> + /* Allocate validate page tables if needed */
> >>>>>>> ret = vm_validate_pt_pd_bos(vm);
> >>>>>>> if (ret) {
> >>>>>>> pr_err("validate_pt_pd_bos() failed\n"); diff --git
> >>>>>>> a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c
> >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c
> >>>>>>> index 7e22be7ca68a..54dd02a898b9 100644
> >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c
> >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c
> >>>>>>> @@ -92,15 +92,6 @@ int amdgpu_map_static_csa(struct
> >> amdgpu_device
> >>>>>>> *adev, struct amdgpu_vm *vm,
> >>>>>>> return -ENOMEM;
> >>>>>>> }
> >>>>>>>
> >>>>>>> - r = amdgpu_vm_alloc_pts(adev, (*bo_va)->base.vm, csa_addr,
> >>>>>>> - size);
> >>>>>>> - if (r) {
> >>>>>>> - DRM_ERROR("failed to allocate pts for static CSA,
> >>>>>>> err=%d\n", r);
> >>>>>>> - amdgpu_vm_bo_rmv(adev, *bo_va);
> >>>>>>> - ttm_eu_backoff_reservation(&ticket, &list);
> >>>>>>> - return r;
> >>>>>>> - }
> >>>>>>> -
> >>>>>>> r = amdgpu_vm_bo_map(adev, *bo_va, csa_addr, 0, size,
> >>>>>>> AMDGPU_PTE_READABLE | AMDGPU_PTE_WRITEABLE
> >>>>>>> |
> >>>>>>> AMDGPU_PTE_EXECUTABLE); diff --git
> >>>>>>> a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >>>>>>> index 555285e329ed..fcaaac30e84b 100644
> >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >>>>>>> @@ -625,11 +625,6 @@ int amdgpu_gem_va_ioctl(struct
> drm_device
> >>>>> *dev,
> >>>>>>> void *data,
> >>>>>>>
> >>>>>>> switch (args->operation) {
> >>>>>>> case AMDGPU_VA_OP_MAP:
> >>>>>>> - r = amdgpu_vm_alloc_pts(adev, bo_va->base.vm, args-
> >>>>>>>> va_address,
> >>>>>>> - args->map_size);
> >>>>>>> - if (r)
> >>>>>>> - goto error_backoff;
> >>>>>>> -
> >>>>>>> va_flags = amdgpu_gmc_get_pte_flags(adev,
> >>>>>>> args->flags);
> >>>>>>> r = amdgpu_vm_bo_map(adev, bo_va, args->va_address,
> >>>>>>> args->offset_in_bo, args->map_size, @@
> >>>>>>> -
> >>>>>>> 645,11 +640,6 @@ int amdgpu_gem_va_ioctl(struct drm_device
> *dev,
> >>>>> void
> >>>>>>> *data,
> >>>>>>> args->map_size);
> >>>>>>> break;
> >>>>>>> case AMDGPU_VA_OP_REPLACE:
> >>>>>>> - r = amdgpu_vm_alloc_pts(adev, bo_va->base.vm, args-
> >>>>>>>> va_address,
> >>>>>>> - args->map_size);
> >>>>>>> - if (r)
> >>>>>>> - goto error_backoff;
> >>>>>>> -
> >>>>>>> va_flags = amdgpu_gmc_get_pte_flags(adev,
> >>>>>>> args->flags);
> >>>>>>> r = amdgpu_vm_bo_replace_map(adev, bo_va, args-
> >>>>>>>> va_address,
> >>>>>>> args->offset_in_bo, args-
> >>>>>>>> map_size, diff --git
> a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> >>>>>>> index 362436f4e856..dfad543fc000 100644
> >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> >>>>>>> @@ -504,47 +504,6 @@ static void amdgpu_vm_pt_next(struct
> >>>>>>> amdgpu_device *adev,
> >>>>>>> }
> >>>>>>> }
> >>>>>>>
> >>>>>>> -/**
> >>>>>>> - * amdgpu_vm_pt_first_leaf - get first leaf PD/PT
> >>>>>>> - *
> >>>>>>> - * @adev: amdgpu_device pointer
> >>>>>>> - * @vm: amdgpu_vm structure
> >>>>>>> - * @start: start addr of the walk
> >>>>>>> - * @cursor: state to initialize
> >>>>>>> - *
> >>>>>>> - * Start a walk and go directly to the leaf node.
> >>>>>>> - */
> >>>>>>> -static void amdgpu_vm_pt_first_leaf(struct amdgpu_device
> *adev,
> >>>>>>> - struct amdgpu_vm *vm, uint64_t start,
> >>>>>>> - struct amdgpu_vm_pt_cursor *cursor) -{
> >>>>>>> - amdgpu_vm_pt_start(adev, vm, start, cursor);
> >>>>>>> - while (amdgpu_vm_pt_descendant(adev, cursor)); -}
> >>>>>>> -
> >>>>>>> -/**
> >>>>>>> - * amdgpu_vm_pt_next_leaf - get next leaf PD/PT
> >>>>>>> - *
> >>>>>>> - * @adev: amdgpu_device pointer
> >>>>>>> - * @cursor: current state
> >>>>>>> - *
> >>>>>>> - * Walk the PD/PT tree to the next leaf node.
> >>>>>>> - */
> >>>>>>> -static void amdgpu_vm_pt_next_leaf(struct amdgpu_device
> *adev,
> >>>>>>> - struct amdgpu_vm_pt_cursor *cursor) -{
> >>>>>>> - amdgpu_vm_pt_next(adev, cursor);
> >>>>>>> - if (cursor->pfn != ~0ll)
> >>>>>>> - while (amdgpu_vm_pt_descendant(adev, cursor)); -}
> >>>>>>> -
> >>>>>>> -/**
> >>>>>>> - * for_each_amdgpu_vm_pt_leaf - walk over all leaf PDs/PTs in
> >>>>>>> the hierarchy
> >>>>>>> - */
> >>>>>>> -#define for_each_amdgpu_vm_pt_leaf(adev, vm, start, end,
> >>>>>>> cursor)
> >>>>>>> \
> >>>>>>> - for (amdgpu_vm_pt_first_leaf((adev), (vm), (start),
> >>>>>>> &(cursor));
> >>>>>>> \
> >>>>>>> - (cursor).pfn <= end; amdgpu_vm_pt_next_leaf((adev),
> >>>>>>> &(cursor)))
> >>>>>>> -
> >>>>>>> /**
> >>>>>>> * amdgpu_vm_pt_first_dfs - start a deep first search
> >>>>>>> *
> >>>>>>> @@ -915,74 +874,51 @@ static void amdgpu_vm_bo_param(struct
> >>>>>>> amdgpu_device *adev, struct amdgpu_vm *vm,
> >>>>>>> * Returns:
> >>>>>>> * 0 on success, errno otherwise.
> >>>>>>> */
> >>>>>>> -int amdgpu_vm_alloc_pts(struct amdgpu_device *adev,
> >>>>>>> - struct amdgpu_vm *vm,
> >>>>>>> - uint64_t saddr, uint64_t size)
> >>>>>>> +static int amdgpu_vm_alloc_pts(struct amdgpu_device *adev,
> >>>>>>> + struct amdgpu_vm *vm,
> >>>>>>> + struct amdgpu_vm_pt_cursor *cursor)
> >>>>>>> {
> >>>>>>> - struct amdgpu_vm_pt_cursor cursor;
> >>>>>>> + struct amdgpu_vm_pt *entry = cursor->entry;
> >>>>>>> + struct amdgpu_bo_param bp;
> >>>>>>> struct amdgpu_bo *pt;
> >>>>>>> - uint64_t eaddr;
> >>>>>>> int r;
> >>>>>>>
> >>>>>>> - /* validate the parameters */
> >>>>>>> - if (saddr & AMDGPU_GPU_PAGE_MASK || size &
> >>>>>>> AMDGPU_GPU_PAGE_MASK)
> >>>>>>> - return -EINVAL;
> >>>>>>> + if (cursor->level < AMDGPU_VM_PTB && !entry->entries) {
> >>>>>>> + unsigned num_entries;
> >>>>>>>
> >>>>>>> - eaddr = saddr + size - 1;
> >>>>>>> -
> >>>>>>> - saddr /= AMDGPU_GPU_PAGE_SIZE;
> >>>>>>> - eaddr /= AMDGPU_GPU_PAGE_SIZE;
> >>>>>>> -
> >>>>>>> - if (eaddr >= adev->vm_manager.max_pfn) {
> >>>>>>> - dev_err(adev->dev, "va above limit (0x%08llX >=
> >>>>>>> 0x%08llX)\n",
> >>>>>>> - eaddr, adev->vm_manager.max_pfn);
> >>>>>>> - return -EINVAL;
> >>>>>>> + num_entries = amdgpu_vm_num_entries(adev, cursor-
> >>>>>>>> level);
> >>>>>>> + entry->entries = kvmalloc_array(num_entries,
> >>>>>>> + sizeof(*entry->entries),
> >>>>>>> + GFP_KERNEL | __GFP_ZERO);
> >>>>>>> + if (!entry->entries)
> >>>>>>> + return -ENOMEM;
> >>>>>>> }
> >>>>>>>
> >>>>>>> - for_each_amdgpu_vm_pt_leaf(adev, vm, saddr, eaddr, cursor)
> >>>>>>> {
> >>>>>>> - struct amdgpu_vm_pt *entry = cursor.entry;
> >>>>>>> - struct amdgpu_bo_param bp;
> >>>>>>> -
> >>>>>>> - if (cursor.level < AMDGPU_VM_PTB) {
> >>>>>>> - unsigned num_entries;
> >>>>>>> -
> >>>>>>> - num_entries = amdgpu_vm_num_entries(adev,
> >>>>>>> cursor.level);
> >>>>>>> - entry->entries = kvmalloc_array(num_entries,
> >>>>>>> - sizeof(*entry-
> >>>>>>>> entries),
> >>>>>>> - GFP_KERNEL |
> >>>>>>> - __GFP_ZERO);
> >>>>>>> - if (!entry->entries)
> >>>>>>> - return -ENOMEM;
> >>>>>>> - }
> >>>>>>> -
> >>>>>>> -
> >>>>>>> - if (entry->base.bo)
> >>>>>>> - continue;
> >>>>>>> -
> >>>>>>> - amdgpu_vm_bo_param(adev, vm, cursor.level, &bp);
> >>>>>>> -
> >>>>>>> - r = amdgpu_bo_create(adev, &bp, &pt);
> >>>>>>> - if (r)
> >>>>>>> - return r;
> >>>>>>> -
> >>>>>>> - if (vm->use_cpu_for_update) {
> >>>>>>> - r = amdgpu_bo_kmap(pt, NULL);
> >>>>>>> - if (r)
> >>>>>>> - goto error_free_pt;
> >>>>>>> - }
> >>>>>>> + if (entry->base.bo)
> >>>>>>> + return 0;
> >>>>>>>
> >>>>>>> - /* Keep a reference to the root directory to avoid
> >>>>>>> - * freeing them up in the wrong order.
> >>>>>>> - */
> >>>>>>> - pt->parent = amdgpu_bo_ref(cursor.parent->base.bo);
> >>>>>>> + amdgpu_vm_bo_param(adev, vm, cursor->level, &bp);
> >>>>>>>
> >>>>>>> - amdgpu_vm_bo_base_init(&entry->base, vm, pt);
> >>>>>>> + r = amdgpu_bo_create(adev, &bp, &pt);
> >>>>>>> + if (r)
> >>>>>>> + return r;
> >>>>>>>
> >>>>>>> - r = amdgpu_vm_clear_bo(adev, vm, pt);
> >>>>>>> + if (vm->use_cpu_for_update) {
> >>>>>>> + r = amdgpu_bo_kmap(pt, NULL);
> >>>>>>> if (r)
> >>>>>>> goto error_free_pt;
> >>>>>>> }
> >>>>>>>
> >>>>>>> + /* Keep a reference to the root directory to avoid
> >>>>>>> + * freeing them up in the wrong order.
> >>>>>>> + */
> >>>>>>> + pt->parent = amdgpu_bo_ref(cursor->parent->base.bo);
> >>>>>>> + amdgpu_vm_bo_base_init(&entry->base, vm, pt);
> >>>>>>> +
> >>>>>>> + r = amdgpu_vm_clear_bo(adev, vm, pt);
> >>>>>>> + if (r)
> >>>>>>> + goto error_free_pt;
> >>>>>>> +
> >>>>>>> return 0;
> >>>>>>>
> >>>>>>> error_free_pt:
> >>>>>>> @@ -1627,6 +1563,7 @@ static int
> amdgpu_vm_update_ptes(struct
> >>>>>>> amdgpu_pte_update_params *params,
> >>>>>>> struct amdgpu_vm_pt_cursor cursor;
> >>>>>>> uint64_t frag_start = start, frag_end;
> >>>>>>> unsigned int frag;
> >>>>>>> + int r;
> >>>>>>>
> >>>>>>> /* figure out the initial fragment */
> >>>>>>> amdgpu_vm_fragment(params, frag_start, end, flags,
> >>>>>>> &frag, &frag_end); @@ -1634,12 +1571,15 @@ static int
> >>>>>>> amdgpu_vm_update_ptes(struct amdgpu_pte_update_params
> >> *params,
> >>>>>>> /* walk over the address space and update the PTs */
> >>>>>>> amdgpu_vm_pt_start(adev, params->vm, start, &cursor);
> >>>>>>> while (cursor.pfn < end) {
> >>>>>>> - struct amdgpu_bo *pt = cursor.entry->base.bo;
> >>>>>>> unsigned shift, parent_shift, mask;
> >>>>>>> uint64_t incr, entry_end, pe_start;
> >>>>>>> + struct amdgpu_bo *pt;
> >>>>>>>
> >>>>>>> - if (!pt)
> >>>>>>> - return -ENOENT;
> >>>>>>> + r = amdgpu_vm_alloc_pts(params->adev, params->vm,
> >>>>>>> &cursor);
> >>>>>>> + if (r)
> >>>>>>> + return r;
> >>>>>>> +
> >>>>>>> + pt = cursor.entry->base.bo;
> >>>>>>>
> >>>>>>> /* The root level can't be a huge page */
> >>>>>>> if (cursor.level == adev->vm_manager.root_level) {
> >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> >>>>>>> index 81ff8177f092..116605c038d2 100644
> >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> >>>>>>> @@ -303,9 +303,6 @@ bool amdgpu_vm_ready(struct amdgpu_vm
> >> *vm);
> >>>>> int
> >>>>>>> amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct
> >>>>>>> amdgpu_vm *vm,
> >>>>>>> int (*callback)(void *p, struct amdgpu_bo
> >>>>>>> *bo),
> >>>>>>> void *param); -int
> >>>>>>> amdgpu_vm_alloc_pts(struct amdgpu_device *adev,
> >>>>>>> - struct amdgpu_vm *vm,
> >>>>>>> - uint64_t saddr, uint64_t size);
> >>>>>>> int amdgpu_vm_flush(struct amdgpu_ring *ring, struct
> >>>>>>> amdgpu_job *job, bool need_pipe_sync); int
> >>>>>>> amdgpu_vm_update_directories(struct
> >>>>>>> amdgpu_device *adev,
> >>>>>>> struct amdgpu_vm *vm);
> >>>>>>> --
> >>>>>>> 2.17.1
> >>>>>>>
> >>>>>>> _______________________________________________
> >>>>>>> amd-gfx mailing list
> >>>>>>> amd-gfx at lists.freedesktop.org
> >>>>>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> >>>>> _______________________________________________
> >>>>> amd-gfx mailing list
> >>>>> amd-gfx at lists.freedesktop.org
> >>>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> >>>> _______________________________________________
> >>>> 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