aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1718-drm-amdgpu-Add-preferred_domain-check-when-determine.patch
diff options
context:
space:
mode:
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.patch73
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
+