mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
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>
This commit is contained in:
parent
c4229c6e37
commit
b4ae4fe6cd
@ -31,6 +31,7 @@
|
|||||||
#include <drm/amdgpu_drm.h>
|
#include <drm/amdgpu_drm.h>
|
||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "amdgpu_display.h"
|
#include "amdgpu_display.h"
|
||||||
|
#include "amdgpu_xgmi.h"
|
||||||
|
|
||||||
void amdgpu_gem_object_free(struct drm_gem_object *gobj)
|
void amdgpu_gem_object_free(struct drm_gem_object *gobj)
|
||||||
{
|
{
|
||||||
@ -668,6 +669,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
|
|||||||
struct amdgpu_device *adev = dev->dev_private;
|
struct amdgpu_device *adev = dev->dev_private;
|
||||||
struct drm_amdgpu_gem_op *args = data;
|
struct drm_amdgpu_gem_op *args = data;
|
||||||
struct drm_gem_object *gobj;
|
struct drm_gem_object *gobj;
|
||||||
|
struct amdgpu_vm_bo_base *base;
|
||||||
struct amdgpu_bo *robj;
|
struct amdgpu_bo *robj;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -706,6 +708,15 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
|
|||||||
amdgpu_bo_unreserve(robj);
|
amdgpu_bo_unreserve(robj);
|
||||||
break;
|
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 |
|
robj->preferred_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM |
|
||||||
AMDGPU_GEM_DOMAIN_GTT |
|
AMDGPU_GEM_DOMAIN_GTT |
|
||||||
AMDGPU_GEM_DOMAIN_CPU);
|
AMDGPU_GEM_DOMAIN_CPU);
|
||||||
|
@ -2037,7 +2037,8 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,
|
|||||||
INIT_LIST_HEAD(&bo_va->valids);
|
INIT_LIST_HEAD(&bo_va->valids);
|
||||||
INIT_LIST_HEAD(&bo_va->invalids);
|
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;
|
bo_va->is_xgmi = true;
|
||||||
mutex_lock(&adev->vm_manager.lock_pstate);
|
mutex_lock(&adev->vm_manager.lock_pstate);
|
||||||
/* Power up XGMI if it can be potentially used */
|
/* Power up XGMI if it can be potentially used */
|
||||||
|
Loading…
Reference in New Issue
Block a user