mirror of https://gitee.com/openkylin/linux.git
drm/amdgpu: set preferred_domain independent of fallback handling
When GEM needs to fallback to GTT for VRAM BOs we still want the preferred domain to be untouched so that the BO has a cance to move back to VRAM in the future. Signed-off-by: Chunming Zhou <david1.zhou@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
58cd8fbc64
commit
aa2b2e2822
|
@ -62,6 +62,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
|
|||
bp.byte_align = alignment;
|
||||
bp.type = type;
|
||||
bp.resv = resv;
|
||||
bp.preferred_domain = initial_domain;
|
||||
retry:
|
||||
bp.flags = flags;
|
||||
bp.domain = initial_domain;
|
||||
|
|
|
@ -360,6 +360,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
|
|||
};
|
||||
struct amdgpu_bo *bo;
|
||||
unsigned long page_align, size = bp->size;
|
||||
u32 preferred_domains;
|
||||
size_t acc_size;
|
||||
int r;
|
||||
|
||||
|
@ -380,12 +381,14 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
|
|||
drm_gem_private_object_init(adev->ddev, &bo->gem_base, size);
|
||||
INIT_LIST_HEAD(&bo->shadow_list);
|
||||
INIT_LIST_HEAD(&bo->va);
|
||||
bo->preferred_domains = bp->domain & (AMDGPU_GEM_DOMAIN_VRAM |
|
||||
AMDGPU_GEM_DOMAIN_GTT |
|
||||
AMDGPU_GEM_DOMAIN_CPU |
|
||||
AMDGPU_GEM_DOMAIN_GDS |
|
||||
AMDGPU_GEM_DOMAIN_GWS |
|
||||
AMDGPU_GEM_DOMAIN_OA);
|
||||
preferred_domains = bp->preferred_domain ? bp->preferred_domain :
|
||||
bp->domain;
|
||||
bo->preferred_domains = preferred_domains & (AMDGPU_GEM_DOMAIN_VRAM |
|
||||
AMDGPU_GEM_DOMAIN_GTT |
|
||||
AMDGPU_GEM_DOMAIN_CPU |
|
||||
AMDGPU_GEM_DOMAIN_GDS |
|
||||
AMDGPU_GEM_DOMAIN_GWS |
|
||||
AMDGPU_GEM_DOMAIN_OA);
|
||||
bo->allowed_domains = bo->preferred_domains;
|
||||
if (bp->type != ttm_bo_type_kernel &&
|
||||
bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
|
||||
|
|
|
@ -37,6 +37,7 @@ struct amdgpu_bo_param {
|
|||
unsigned long size;
|
||||
int byte_align;
|
||||
u32 domain;
|
||||
u32 preferred_domain;
|
||||
u64 flags;
|
||||
enum ttm_bo_type type;
|
||||
struct reservation_object *resv;
|
||||
|
|
Loading…
Reference in New Issue