diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1718-drm-amdgpu-Add-preferred_domain-check-when-determine.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1718-drm-amdgpu-Add-preferred_domain-check-when-determine.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1718-drm-amdgpu-Add-preferred_domain-check-when-determine.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1718-drm-amdgpu-Add-preferred_domain-check-when-determine.patch new file mode 100644 index 00000000..88272cfd --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1718-drm-amdgpu-Add-preferred_domain-check-when-determine.patch @@ -0,0 +1,73 @@ +From d0e2ecede93e74bc3acba3e9e9052d2bfdc3aee2 Mon Sep 17 00:00:00 2001 +From: shaoyunl <shaoyun.liu@amd.com> +Date: Tue, 26 Mar 2019 14:47:57 -0400 +Subject: [PATCH 1718/2940] drm/amdgpu: Add preferred_domain check when + determine XGMI state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Avoid unnecessary XGMI hight pstate trigger when mapping none-vram memory for peer device + +Change-Id: I1881deff3da19f1f4b58d5765db03a590092a5b2 +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> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 11 +++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 ++- + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +index edf27fcebcc2..2f3e06be48f5 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +@@ -31,6 +31,7 @@ + #include <drm/amdgpu_drm.h> + #include "amdgpu.h" + #include "amdgpu_display.h" ++#include "amdgpu_xgmi.h" + + void amdgpu_gem_object_free(struct drm_gem_object *gobj) + { +@@ -754,6 +755,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data, + struct amdgpu_device *adev = dev->dev_private; + struct drm_amdgpu_gem_op *args = data; + struct drm_gem_object *gobj; ++ struct amdgpu_vm_bo_base *base; + struct amdgpu_bo *robj; + int r; + +@@ -792,6 +794,15 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data, + amdgpu_bo_unreserve(robj); + break; + } ++ for (base = robj->vm_bo; base; base = base->next) ++ if (amdgpu_xgmi_same_hive(amdgpu_ttm_adev(robj->tbo.bdev), ++ amdgpu_ttm_adev(base->vm->root.base.bo->tbo.bdev))) { ++ r = -EINVAL; ++ amdgpu_bo_unreserve(robj); ++ goto out; ++ } ++ ++ + robj->preferred_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM | + AMDGPU_GEM_DOMAIN_GTT | + AMDGPU_GEM_DOMAIN_CPU); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index a68d17cbf714..776ba87ac779 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -2006,7 +2006,8 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev, + INIT_LIST_HEAD(&bo_va->valids); + INIT_LIST_HEAD(&bo_va->invalids); + +- if (bo && amdgpu_xgmi_same_hive(adev, amdgpu_ttm_adev(bo->tbo.bdev))) { ++ if (bo && amdgpu_xgmi_same_hive(adev, amdgpu_ttm_adev(bo->tbo.bdev)) && ++ (bo->preferred_domains & AMDGPU_GEM_DOMAIN_VRAM)) { + bo_va->is_xgmi = true; + mutex_lock(&adev->vm_manager.lock_pstate); + /* Power up XGMI if it can be potentially used */ +-- +2.17.1 + |