mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-08-28 09:11:11 +00:00
drm/xe: Add XE_BO_FLAG_PINNED_NORESTORE
Not all BOs need to be restored on resume / d3cold exit, add XE_BO_FLAG_PINNED_NO_RESTORE which skips restoring of BOs rather just allocates VRAM for the BO. This should slightly speedup resume / d3cold exit flows. Marking GuC ADS, GuC CT, GuC log, GuC PC, and SA as NORESTORE. v2: - s/WONTNEED/NORESTORE (Vivi) - Rebase on newly added g2g and backup object flow Signed-off-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://lore.kernel.org/r/20250403102440.266113-11-matthew.auld@intel.com
This commit is contained in:
parent
86f69c2611
commit
045448da87
@ -1110,6 +1110,9 @@ int xe_bo_evict_pinned(struct xe_bo *bo)
|
||||
if (!xe_bo_is_vram(bo))
|
||||
goto out_unlock_bo;
|
||||
|
||||
if (bo->flags & XE_BO_FLAG_PINNED_NORESTORE)
|
||||
goto out_unlock_bo;
|
||||
|
||||
backup = xe_bo_create_locked(xe, NULL, NULL, bo->size, ttm_bo_type_kernel,
|
||||
XE_BO_FLAG_SYSTEM | XE_BO_FLAG_NEEDS_CPU_ACCESS |
|
||||
XE_BO_FLAG_PINNED);
|
||||
@ -2123,7 +2126,8 @@ int xe_managed_bo_reinit_in_vram(struct xe_device *xe, struct xe_tile *tile, str
|
||||
struct xe_bo *bo;
|
||||
u32 dst_flags = XE_BO_FLAG_VRAM_IF_DGFX(tile) | XE_BO_FLAG_GGTT;
|
||||
|
||||
dst_flags |= (*src)->flags & XE_BO_FLAG_GGTT_INVALIDATE;
|
||||
dst_flags |= (*src)->flags & (XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
|
||||
xe_assert(xe, IS_DGFX(xe));
|
||||
xe_assert(xe, !(*src)->vmap.is_iomem);
|
||||
|
@ -39,10 +39,11 @@
|
||||
#define XE_BO_FLAG_NEEDS_64K BIT(15)
|
||||
#define XE_BO_FLAG_NEEDS_2M BIT(16)
|
||||
#define XE_BO_FLAG_GGTT_INVALIDATE BIT(17)
|
||||
#define XE_BO_FLAG_GGTT0 BIT(18)
|
||||
#define XE_BO_FLAG_GGTT1 BIT(19)
|
||||
#define XE_BO_FLAG_GGTT2 BIT(20)
|
||||
#define XE_BO_FLAG_GGTT3 BIT(21)
|
||||
#define XE_BO_FLAG_PINNED_NORESTORE BIT(18)
|
||||
#define XE_BO_FLAG_GGTT0 BIT(19)
|
||||
#define XE_BO_FLAG_GGTT1 BIT(20)
|
||||
#define XE_BO_FLAG_GGTT2 BIT(21)
|
||||
#define XE_BO_FLAG_GGTT3 BIT(22)
|
||||
#define XE_BO_FLAG_GGTT_ALL (XE_BO_FLAG_GGTT0 | \
|
||||
XE_BO_FLAG_GGTT1 | \
|
||||
XE_BO_FLAG_GGTT2 | \
|
||||
|
@ -483,7 +483,8 @@ static int guc_g2g_alloc(struct xe_guc *guc)
|
||||
XE_BO_FLAG_VRAM_IF_DGFX(tile) |
|
||||
XE_BO_FLAG_GGTT |
|
||||
XE_BO_FLAG_GGTT_ALL |
|
||||
XE_BO_FLAG_GGTT_INVALIDATE);
|
||||
XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
if (IS_ERR(bo))
|
||||
return PTR_ERR(bo);
|
||||
|
||||
|
@ -414,7 +414,8 @@ int xe_guc_ads_init(struct xe_guc_ads *ads)
|
||||
bo = xe_managed_bo_create_pin_map(xe, tile, guc_ads_size(ads) + MAX_GOLDEN_LRC_SIZE,
|
||||
XE_BO_FLAG_SYSTEM |
|
||||
XE_BO_FLAG_GGTT |
|
||||
XE_BO_FLAG_GGTT_INVALIDATE);
|
||||
XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
if (IS_ERR(bo))
|
||||
return PTR_ERR(bo);
|
||||
|
||||
|
@ -238,7 +238,8 @@ int xe_guc_ct_init(struct xe_guc_ct *ct)
|
||||
bo = xe_managed_bo_create_pin_map(xe, tile, guc_ct_size(),
|
||||
XE_BO_FLAG_SYSTEM |
|
||||
XE_BO_FLAG_GGTT |
|
||||
XE_BO_FLAG_GGTT_INVALIDATE);
|
||||
XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
if (IS_ERR(bo))
|
||||
return PTR_ERR(bo);
|
||||
|
||||
|
@ -260,7 +260,8 @@ int xe_guc_log_init(struct xe_guc_log *log)
|
||||
bo = xe_managed_bo_create_pin_map(xe, tile, guc_log_size(),
|
||||
XE_BO_FLAG_SYSTEM |
|
||||
XE_BO_FLAG_GGTT |
|
||||
XE_BO_FLAG_GGTT_INVALIDATE);
|
||||
XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
if (IS_ERR(bo))
|
||||
return PTR_ERR(bo);
|
||||
|
||||
|
@ -1185,7 +1185,8 @@ int xe_guc_pc_init(struct xe_guc_pc *pc)
|
||||
bo = xe_managed_bo_create_pin_map(xe, tile, size,
|
||||
XE_BO_FLAG_VRAM_IF_DGFX(tile) |
|
||||
XE_BO_FLAG_GGTT |
|
||||
XE_BO_FLAG_GGTT_INVALIDATE);
|
||||
XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
if (IS_ERR(bo))
|
||||
return PTR_ERR(bo);
|
||||
|
||||
|
@ -60,7 +60,8 @@ struct xe_sa_manager *__xe_sa_bo_manager_init(struct xe_tile *tile, u32 size, u3
|
||||
bo = xe_managed_bo_create_pin_map(xe, tile, size,
|
||||
XE_BO_FLAG_VRAM_IF_DGFX(tile) |
|
||||
XE_BO_FLAG_GGTT |
|
||||
XE_BO_FLAG_GGTT_INVALIDATE);
|
||||
XE_BO_FLAG_GGTT_INVALIDATE |
|
||||
XE_BO_FLAG_PINNED_NORESTORE);
|
||||
if (IS_ERR(bo)) {
|
||||
drm_err(&xe->drm, "Failed to prepare %uKiB BO for SA manager (%pe)\n",
|
||||
size / SZ_1K, bo);
|
||||
|
Loading…
Reference in New Issue
Block a user