Am 27.08.19 um 01:07 schrieb Kuehling, Felix: > The same BO can be mapped with different PTE flags by different GPUs. > Therefore determine the PTE flags separately for each mapping instead > of storing them in the KFD buffer object. > > Add a helper function to determine the PTE flags to be extended with > ASIC and memory-type-specific logic in subsequent commits. > > v2: Split Arcturus-specific MTYPE changes into separate commit > > Signed-off-by: Felix Kuehling <Felix.Kuehling@xxxxxxx> Acked-by: Christian König <christian.koenig@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 +- > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 39 +++++++++++-------- > 2 files changed, 24 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > index e519df3fd2b6..1af8f83f7e02 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > @@ -57,7 +57,7 @@ struct kgd_mem { > unsigned int mapped_to_gpu_memory; > uint64_t va; > > - uint32_t mapping_flags; > + uint32_t alloc_flags; > > atomic_t invalid; > struct amdkfd_process_info *process_info; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c > index 44a52b09cc58..1b7340a18f67 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c > @@ -355,6 +355,23 @@ static int vm_update_pds(struct amdgpu_vm *vm, struct amdgpu_sync *sync) > return amdgpu_sync_fence(NULL, sync, vm->last_update, false); > } > > +static uint32_t get_pte_flags(struct amdgpu_device *adev, struct kgd_mem *mem) > +{ > + bool coherent = mem->alloc_flags & ALLOC_MEM_FLAGS_COHERENT; > + uint32_t mapping_flags; > + > + mapping_flags = AMDGPU_VM_PAGE_READABLE; > + if (mem->alloc_flags & ALLOC_MEM_FLAGS_WRITABLE) > + mapping_flags |= AMDGPU_VM_PAGE_WRITEABLE; > + if (mem->alloc_flags & ALLOC_MEM_FLAGS_EXECUTABLE) > + mapping_flags |= AMDGPU_VM_PAGE_EXECUTABLE; > + > + mapping_flags |= coherent ? > + AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC; > + > + return amdgpu_gmc_get_pte_flags(adev, mapping_flags); > +} > + > /* add_bo_to_vm - Add a BO to a VM > * > * Everything that needs to bo done only once when a BO is first added > @@ -403,8 +420,7 @@ static int add_bo_to_vm(struct amdgpu_device *adev, struct kgd_mem *mem, > } > > bo_va_entry->va = va; > - bo_va_entry->pte_flags = amdgpu_gmc_get_pte_flags(adev, > - mem->mapping_flags); > + bo_va_entry->pte_flags = get_pte_flags(adev, mem); > bo_va_entry->kgd_dev = (void *)adev; > list_add(&bo_va_entry->bo_list, list_bo_va); > > @@ -1081,7 +1097,6 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( > int byte_align; > u32 domain, alloc_domain; > u64 alloc_flags; > - uint32_t mapping_flags; > int ret; > > /* > @@ -1143,16 +1158,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( > adev->asic_type != CHIP_VEGAM) ? > VI_BO_SIZE_ALIGN : 1; > > - mapping_flags = AMDGPU_VM_PAGE_READABLE; > - if (flags & ALLOC_MEM_FLAGS_WRITABLE) > - mapping_flags |= AMDGPU_VM_PAGE_WRITEABLE; > - if (flags & ALLOC_MEM_FLAGS_EXECUTABLE) > - mapping_flags |= AMDGPU_VM_PAGE_EXECUTABLE; > - if (flags & ALLOC_MEM_FLAGS_COHERENT) > - mapping_flags |= AMDGPU_VM_MTYPE_UC; > - else > - mapping_flags |= AMDGPU_VM_MTYPE_NC; > - (*mem)->mapping_flags = mapping_flags; > + (*mem)->alloc_flags = flags; > > amdgpu_sync_create(&(*mem)->sync); > > @@ -1625,9 +1631,10 @@ int amdgpu_amdkfd_gpuvm_import_dmabuf(struct kgd_dev *kgd, > > INIT_LIST_HEAD(&(*mem)->bo_va_list); > mutex_init(&(*mem)->lock); > - (*mem)->mapping_flags = > - AMDGPU_VM_PAGE_READABLE | AMDGPU_VM_PAGE_WRITEABLE | > - AMDGPU_VM_PAGE_EXECUTABLE | AMDGPU_VM_MTYPE_NC; > + (*mem)->alloc_flags = > + ((bo->preferred_domains & AMDGPU_GEM_DOMAIN_VRAM) ? > + ALLOC_MEM_FLAGS_VRAM : ALLOC_MEM_FLAGS_GTT) | > + ALLOC_MEM_FLAGS_WRITABLE | ALLOC_MEM_FLAGS_EXECUTABLE; > > (*mem)->bo = amdgpu_bo_ref(bo); > (*mem)->va = va; _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx