[PATCH v3 4/8] drm/xe/migrate: ignore CCS for kernel objects
K V P, Satyanarayana
satyanarayana.k.v.p at intel.com
Wed Mar 26 06:09:14 UTC 2025
Hi.
> From: Auld, Matthew <matthew.auld at intel.com>
> Sent: Friday, March 7, 2025 11:59 PM
> To: intel-xe at lists.freedesktop.org
> Cc: K V P, Satyanarayana <satyanarayana.k.v.p at intel.com>; Thomas Hellström
> <thomas.hellstrom at linux.intel.com>; Brost, Matthew
> <matthew.brost at intel.com>
> Subject: [PATCH v3 4/8] drm/xe/migrate: ignore CCS for kernel objects
>
> For kernel BOs we don't clear the CCS state on creation, therefore we
> should be careful to ignore it when copying pages. In a future patch we
> opt for using the copy path here for kernel BOs, so this now needs to be
> considered.
>
> Signed-off-by: Matthew Auld <matthew.auld at intel.com>
> Cc: Satyanarayana K V P <satyanarayana.k.v.p at intel.com>
> Cc: Thomas Hellström <thomas.hellstrom at linux.intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_migrate.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c
> b/drivers/gpu/drm/xe/xe_migrate.c
> index df4282c71bf0..dbd4bff75783 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -779,10 +779,12 @@ struct dma_fence *xe_migrate_copy(struct
> xe_migrate *m,
> bool dst_is_pltt = dst->mem_type == XE_PL_TT;
> bool src_is_vram = mem_type_is_vram(src->mem_type);
> bool dst_is_vram = mem_type_is_vram(dst->mem_type);
> + bool type_device = src_bo->ttm.type == ttm_bo_type_device;
> + bool needs_ccs_emit = type_device &&
> xe_migrate_needs_ccs_emit(xe);
> bool copy_ccs = xe_device_has_flat_ccs(xe) &&
> xe_bo_needs_ccs_pages(src_bo) &&
> xe_bo_needs_ccs_pages(dst_bo);
> bool copy_system_ccs = copy_ccs && (!src_is_vram || !dst_is_vram);
> - bool use_comp_pat = xe_device_has_flat_ccs(xe) &&
> + bool use_comp_pat = type_device && xe_device_has_flat_ccs(xe) &&
> GRAPHICS_VER(xe) >= 20 && src_is_vram && !dst_is_vram;
>
> /* Copying CCS between two different BOs is not supported yet. */
> @@ -792,6 +794,12 @@ struct dma_fence *xe_migrate_copy(struct
> xe_migrate *m,
> if (src_bo != dst_bo && XE_WARN_ON(src_bo->size != dst_bo->size))
> return ERR_PTR(-EINVAL);
>
> + if (src_bo != dst_bo && XE_WARN_ON(src_bo->ttm.type != dst_bo-
> >ttm.type))
> + return ERR_PTR(-EINVAL);
> +
> + if (XE_WARN_ON(type_device && copy_only_ccs))
> + return ERR_PTR(-EINVAL);
> +
> if (!src_is_vram)
> xe_res_first_sg(xe_bo_sg(src_bo), 0, size, &src_it);
> else
> @@ -839,6 +847,7 @@ struct dma_fence *xe_migrate_copy(struct
> xe_migrate *m,
> avail_pts, avail_pts);
>
> if (copy_system_ccs) {
> + xe_assert(xe, type_device);
> ccs_size = xe_device_ccs_bytes(xe, src_L0);
> batch_size += pte_update_size(m, 0, NULL, &ccs_it,
> &ccs_size,
> &ccs_ofs, &ccs_pt, 0,
> @@ -849,7 +858,7 @@ struct dma_fence *xe_migrate_copy(struct
> xe_migrate *m,
>
> /* Add copy commands size here */
> batch_size += ((copy_only_ccs) ? 0 : EMIT_COPY_DW) +
> - ((xe_migrate_needs_ccs_emit(xe) ?
> EMIT_COPY_CCS_DW : 0));
> + ((needs_ccs_emit ? EMIT_COPY_CCS_DW : 0));
>
> bb = xe_bb_new(gt, batch_size, usm);
> if (IS_ERR(bb)) {
> @@ -878,7 +887,7 @@ struct dma_fence *xe_migrate_copy(struct
> xe_migrate *m,
> if (!copy_only_ccs)
> emit_copy(gt, bb, src_L0_ofs, dst_L0_ofs, src_L0,
> XE_PAGE_SIZE);
>
> - if (xe_migrate_needs_ccs_emit(xe))
> + if (needs_ccs_emit)
> flush_flags = xe_migrate_ccs_copy(m, bb, src_L0_ofs,
> IS_DGFX(xe) ?
> src_is_vram : src_is_pltt,
> dst_L0_ofs,
> --
LGTM.
Reviewed-by: Satyanarayana K V P <satyanarayana.k.v.p at intel.com>
> 2.48.1
More information about the Intel-xe
mailing list