Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: Add preferred_domain check when determine XGMI state

Avoid unnecessary XGMI hight pstate trigger when mapping none-vram memory for peer device

Signed-off-by: shaoyunl <shaoyun.liu@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

shaoyunl and committed by
Alex Deucher
b4ae4fe6 c4229c6e

+13 -1
+11
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
··· 31 31 #include <drm/amdgpu_drm.h> 32 32 #include "amdgpu.h" 33 33 #include "amdgpu_display.h" 34 + #include "amdgpu_xgmi.h" 34 35 35 36 void amdgpu_gem_object_free(struct drm_gem_object *gobj) 36 37 { ··· 669 668 struct amdgpu_device *adev = dev->dev_private; 670 669 struct drm_amdgpu_gem_op *args = data; 671 670 struct drm_gem_object *gobj; 671 + struct amdgpu_vm_bo_base *base; 672 672 struct amdgpu_bo *robj; 673 673 int r; 674 674 ··· 708 706 amdgpu_bo_unreserve(robj); 709 707 break; 710 708 } 709 + for (base = robj->vm_bo; base; base = base->next) 710 + if (amdgpu_xgmi_same_hive(amdgpu_ttm_adev(robj->tbo.bdev), 711 + amdgpu_ttm_adev(base->vm->root.base.bo->tbo.bdev))) { 712 + r = -EINVAL; 713 + amdgpu_bo_unreserve(robj); 714 + goto out; 715 + } 716 + 717 + 711 718 robj->preferred_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM | 712 719 AMDGPU_GEM_DOMAIN_GTT | 713 720 AMDGPU_GEM_DOMAIN_CPU);
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
··· 2037 2037 INIT_LIST_HEAD(&bo_va->valids); 2038 2038 INIT_LIST_HEAD(&bo_va->invalids); 2039 2039 2040 - if (bo && amdgpu_xgmi_same_hive(adev, amdgpu_ttm_adev(bo->tbo.bdev))) { 2040 + if (bo && amdgpu_xgmi_same_hive(adev, amdgpu_ttm_adev(bo->tbo.bdev)) && 2041 + (bo->preferred_domains & AMDGPU_GEM_DOMAIN_VRAM)) { 2041 2042 bo_va->is_xgmi = true; 2042 2043 mutex_lock(&adev->vm_manager.lock_pstate); 2043 2044 /* Power up XGMI if it can be potentially used */