drm/i915/ttm: don't leak the ccs state
The kernel only manages the ccs state with lmem-only objects, however the kernel should still take care not to leak the CCS state from the previous user. Fixes: 48760ffe923a ("drm/i915/gt: Clear compress metadata for Flat-ccs objects") Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> Cc: Ramalingam C <ramalingam.c@intel.com> Reviewed-by: Ramalingam C <ramalingam.c@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220727164346.282407-1-matthew.auld@intel.com
This commit is contained in:
parent
f5dfbfc0ae
commit
353819d85f
@ -708,7 +708,7 @@ intel_context_migrate_copy(struct intel_context *ce,
|
||||
u8 src_access, dst_access;
|
||||
struct i915_request *rq;
|
||||
int src_sz, dst_sz;
|
||||
bool ccs_is_src;
|
||||
bool ccs_is_src, overwrite_ccs;
|
||||
int err;
|
||||
|
||||
GEM_BUG_ON(ce->vm != ce->engine->gt->migrate.context->vm);
|
||||
@ -749,6 +749,8 @@ intel_context_migrate_copy(struct intel_context *ce,
|
||||
get_ccs_sg_sgt(&it_ccs, bytes_to_cpy);
|
||||
}
|
||||
|
||||
overwrite_ccs = HAS_FLAT_CCS(i915) && !ccs_bytes_to_cpy && dst_is_lmem;
|
||||
|
||||
src_offset = 0;
|
||||
dst_offset = CHUNK_SZ;
|
||||
if (HAS_64K_PAGES(ce->engine->i915)) {
|
||||
@ -852,6 +854,25 @@ intel_context_migrate_copy(struct intel_context *ce,
|
||||
if (err)
|
||||
goto out_rq;
|
||||
ccs_bytes_to_cpy -= ccs_sz;
|
||||
} else if (overwrite_ccs) {
|
||||
err = rq->engine->emit_flush(rq, EMIT_INVALIDATE);
|
||||
if (err)
|
||||
goto out_rq;
|
||||
|
||||
/*
|
||||
* While we can't always restore/manage the CCS state,
|
||||
* we still need to ensure we don't leak the CCS state
|
||||
* from the previous user, so make sure we overwrite it
|
||||
* with something.
|
||||
*/
|
||||
err = emit_copy_ccs(rq, dst_offset, INDIRECT_ACCESS,
|
||||
dst_offset, DIRECT_ACCESS, len);
|
||||
if (err)
|
||||
goto out_rq;
|
||||
|
||||
err = rq->engine->emit_flush(rq, EMIT_INVALIDATE);
|
||||
if (err)
|
||||
goto out_rq;
|
||||
}
|
||||
|
||||
/* Arbitration is re-enabled between requests. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user