drm/xe/bo: Evict VRAM to TT rather than to system
The main difference is that we don't bounce and sync on eviction, allowing for pipelined eviction. Moving forward we also need to be careful with dma mappings which can be released in SYSTEM but may remain in TT. v2: - Remove a stale comment (Matthew Brost) Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230626181741.32820-5-thomas.hellstrom@linux.intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
70ff6a999d
commit
a201c6ee37
@ -72,7 +72,7 @@ static void check_residency(struct kunit *test, struct xe_bo *exported,
|
||||
}
|
||||
|
||||
/* Verify that also importer has been evicted to SYSTEM */
|
||||
if (!xe_bo_is_mem_type(imported, XE_PL_SYSTEM)) {
|
||||
if (exported != imported && !xe_bo_is_mem_type(imported, XE_PL_SYSTEM)) {
|
||||
KUNIT_FAIL(test, "Importer wasn't properly evicted.\n");
|
||||
return;
|
||||
}
|
||||
@ -91,8 +91,7 @@ static void check_residency(struct kunit *test, struct xe_bo *exported,
|
||||
* possible, saving a migration step as the transfer is just
|
||||
* likely as fast from system memory.
|
||||
*/
|
||||
if (params->force_different_devices &&
|
||||
params->mem_mask & XE_BO_CREATE_SYSTEM_BIT)
|
||||
if (params->mem_mask & XE_BO_CREATE_SYSTEM_BIT)
|
||||
KUNIT_EXPECT_TRUE(test, xe_bo_is_mem_type(exported, XE_PL_TT));
|
||||
else
|
||||
KUNIT_EXPECT_TRUE(test, xe_bo_is_mem_type(exported, mem_type));
|
||||
|
@ -40,6 +40,20 @@ static struct ttm_placement sys_placement = {
|
||||
.busy_placement = &sys_placement_flags,
|
||||
};
|
||||
|
||||
static const struct ttm_place tt_placement_flags = {
|
||||
.fpfn = 0,
|
||||
.lpfn = 0,
|
||||
.mem_type = XE_PL_TT,
|
||||
.flags = 0,
|
||||
};
|
||||
|
||||
static struct ttm_placement tt_placement = {
|
||||
.num_placement = 1,
|
||||
.placement = &tt_placement_flags,
|
||||
.num_busy_placement = 1,
|
||||
.busy_placement = &sys_placement_flags,
|
||||
};
|
||||
|
||||
bool mem_type_is_vram(u32 mem_type)
|
||||
{
|
||||
return mem_type >= XE_PL_VRAM0 && mem_type != XE_PL_STOLEN;
|
||||
@ -225,9 +239,10 @@ static void xe_evict_flags(struct ttm_buffer_object *tbo,
|
||||
case XE_PL_VRAM0:
|
||||
case XE_PL_VRAM1:
|
||||
case XE_PL_STOLEN:
|
||||
*placement = tt_placement;
|
||||
break;
|
||||
case XE_PL_TT:
|
||||
default:
|
||||
/* for now kick out to system */
|
||||
*placement = sys_placement;
|
||||
break;
|
||||
}
|
||||
|
@ -81,13 +81,10 @@ static struct sg_table *xe_dma_buf_map(struct dma_buf_attachment *attach,
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
|
||||
if (!xe_bo_is_pinned(bo)) {
|
||||
if (!attach->peer2peer ||
|
||||
bo->ttm.resource->mem_type == XE_PL_SYSTEM) {
|
||||
if (xe_bo_can_migrate(bo, XE_PL_TT))
|
||||
r = xe_bo_migrate(bo, XE_PL_TT);
|
||||
else
|
||||
r = xe_bo_validate(bo, NULL, false);
|
||||
}
|
||||
if (!attach->peer2peer)
|
||||
r = xe_bo_migrate(bo, XE_PL_TT);
|
||||
else
|
||||
r = xe_bo_validate(bo, NULL, false);
|
||||
if (r)
|
||||
return ERR_PTR(r);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user