drm/xe/bo: refactor try_add_vram

Get rid of some of the duplication here. In a future patch we need to
also consider [fpfn, lpfn], so better adjust in only one place.

Suggested-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
Matthew Auld 2023-03-23 11:59:22 +00:00 committed by Rodrigo Vivi
parent 8deba79f5d
commit e7dc1341f0

View File

@ -106,55 +106,42 @@ static void try_add_system(struct xe_bo *bo, struct ttm_place *places,
}
}
static void try_add_vram0(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 *c)
static void add_vram(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 mem_type, u32 *c)
{
struct xe_gt *gt;
struct xe_gt *gt = mem_type_to_gt(xe, mem_type);
if (bo_flags & XE_BO_CREATE_VRAM0_BIT) {
gt = mem_type_to_gt(xe, XE_PL_VRAM0);
XE_BUG_ON(!gt->mem.vram.size);
XE_BUG_ON(!gt->mem.vram.size);
places[*c] = (struct ttm_place) {
.mem_type = XE_PL_VRAM0,
/*
* For eviction / restore on suspend / resume objects
* pinned in VRAM must be contiguous
*/
.flags = bo_flags & (XE_BO_CREATE_PINNED_BIT |
XE_BO_CREATE_GGTT_BIT) ?
TTM_PL_FLAG_CONTIGUOUS : 0,
};
*c += 1;
places[*c] = (struct ttm_place) {
.mem_type = mem_type,
/*
* For eviction / restore on suspend / resume objects
* pinned in VRAM must be contiguous
*/
.flags = bo_flags & (XE_BO_CREATE_PINNED_BIT |
XE_BO_CREATE_GGTT_BIT) ?
TTM_PL_FLAG_CONTIGUOUS : 0,
};
*c += 1;
if (bo->props.preferred_mem_type == XE_BO_PROPS_INVALID)
bo->props.preferred_mem_type = XE_PL_VRAM0;
}
if (bo->props.preferred_mem_type == XE_BO_PROPS_INVALID)
bo->props.preferred_mem_type = mem_type;
}
static void try_add_vram1(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 *c)
static void try_add_vram(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 *c)
{
struct xe_gt *gt;
if (bo_flags & XE_BO_CREATE_VRAM1_BIT) {
gt = mem_type_to_gt(xe, XE_PL_VRAM1);
XE_BUG_ON(!gt->mem.vram.size);
places[*c] = (struct ttm_place) {
.mem_type = XE_PL_VRAM1,
/*
* For eviction / restore on suspend / resume objects
* pinned in VRAM must be contiguous
*/
.flags = bo_flags & (XE_BO_CREATE_PINNED_BIT |
XE_BO_CREATE_GGTT_BIT) ?
TTM_PL_FLAG_CONTIGUOUS : 0,
};
*c += 1;
if (bo->props.preferred_mem_type == XE_BO_PROPS_INVALID)
bo->props.preferred_mem_type = XE_PL_VRAM1;
if (bo->props.preferred_gt == XE_GT1) {
if (bo_flags & XE_BO_CREATE_VRAM1_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM1, c);
if (bo_flags & XE_BO_CREATE_VRAM0_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM0, c);
} else {
if (bo_flags & XE_BO_CREATE_VRAM0_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM0, c);
if (bo_flags & XE_BO_CREATE_VRAM1_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM1, c);
}
}
@ -184,20 +171,9 @@ static int __xe_bo_placement_for_flags(struct xe_device *xe, struct xe_bo *bo,
if (bo->props.preferred_mem_class == XE_MEM_REGION_CLASS_SYSMEM) {
try_add_system(bo, places, bo_flags, &c);
if (bo->props.preferred_gt == XE_GT1) {
try_add_vram1(xe, bo, places, bo_flags, &c);
try_add_vram0(xe, bo, places, bo_flags, &c);
} else {
try_add_vram0(xe, bo, places, bo_flags, &c);
try_add_vram1(xe, bo, places, bo_flags, &c);
}
} else if (bo->props.preferred_gt == XE_GT1) {
try_add_vram1(xe, bo, places, bo_flags, &c);
try_add_vram0(xe, bo, places, bo_flags, &c);
try_add_system(bo, places, bo_flags, &c);
try_add_vram(xe, bo, places, bo_flags, &c);
} else {
try_add_vram0(xe, bo, places, bo_flags, &c);
try_add_vram1(xe, bo, places, bo_flags, &c);
try_add_vram(xe, bo, places, bo_flags, &c);
try_add_system(bo, places, bo_flags, &c);
}
try_add_stolen(xe, bo, places, bo_flags, &c);