aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
diff options
context:
space:
mode:
authorshaoyunl <shaoyun.liu@amd.com>2019-03-26 14:47:57 -0400
committerAlex Deucher <alexander.deucher@amd.com>2019-04-03 11:00:30 -0400
commitb4ae4fe6cdbbfedb9e71294a4d9aa2b4a37edf16 (patch)
tree711f5febf508766215f5e5aa855b3458e6519871 /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
parentc4229c6e37c203fd99397c1bcfe83a2bc1d30d96 (diff)
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>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 61107cfc9af6..d4fcf5475464 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -31,6 +31,7 @@
31#include <drm/amdgpu_drm.h> 31#include <drm/amdgpu_drm.h>
32#include "amdgpu.h" 32#include "amdgpu.h"
33#include "amdgpu_display.h" 33#include "amdgpu_display.h"
34#include "amdgpu_xgmi.h"
34 35
35void amdgpu_gem_object_free(struct drm_gem_object *gobj) 36void amdgpu_gem_object_free(struct drm_gem_object *gobj)
36{ 37{
@@ -668,6 +669,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
668 struct amdgpu_device *adev = dev->dev_private; 669 struct amdgpu_device *adev = dev->dev_private;
669 struct drm_amdgpu_gem_op *args = data; 670 struct drm_amdgpu_gem_op *args = data;
670 struct drm_gem_object *gobj; 671 struct drm_gem_object *gobj;
672 struct amdgpu_vm_bo_base *base;
671 struct amdgpu_bo *robj; 673 struct amdgpu_bo *robj;
672 int r; 674 int r;
673 675
@@ -706,6 +708,15 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
706 amdgpu_bo_unreserve(robj); 708 amdgpu_bo_unreserve(robj);
707 break; 709 break;
708 } 710 }
711 for (base = robj->vm_bo; base; base = base->next)
712 if (amdgpu_xgmi_same_hive(amdgpu_ttm_adev(robj->tbo.bdev),
713 amdgpu_ttm_adev(base->vm->root.base.bo->tbo.bdev))) {
714 r = -EINVAL;
715 amdgpu_bo_unreserve(robj);
716 goto out;
717 }
718
719
709 robj->preferred_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM | 720 robj->preferred_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM |
710 AMDGPU_GEM_DOMAIN_GTT | 721 AMDGPU_GEM_DOMAIN_GTT |
711 AMDGPU_GEM_DOMAIN_CPU); 722 AMDGPU_GEM_DOMAIN_CPU);