diff options
author | shaoyunl <shaoyun.liu@amd.com> | 2019-03-26 14:47:57 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2019-04-03 11:00:30 -0400 |
commit | b4ae4fe6cdbbfedb9e71294a4d9aa2b4a37edf16 (patch) | |
tree | 711f5febf508766215f5e5aa855b3458e6519871 /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |
parent | c4229c6e37c203fd99397c1bcfe83a2bc1d30d96 (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.c | 11 |
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 | ||
35 | void amdgpu_gem_object_free(struct drm_gem_object *gobj) | 36 | void 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); |