lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 244/365] drm/i915/ttm: dont leak the ccs state
    Date
    From: Matthew Auld <matthew.auld@intel.com>

    [ Upstream commit 232d150fa15606e96c0e01e5c7a2d4e03f621787 ]

    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
    (cherry picked from commit 353819d85f87be46aeb9c1dd929d445a006fc6ec)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/i915/gt/intel_migrate.c | 23 ++++++++++++++++++++++-
    1 file changed, 22 insertions(+), 1 deletion(-)

    diff --git a/drivers/gpu/drm/i915/gt/intel_migrate.c b/drivers/gpu/drm/i915/gt/intel_migrate.c
    index 2c35324b5f68..2b10b96b17b5 100644
    --- a/drivers/gpu/drm/i915/gt/intel_migrate.c
    +++ b/drivers/gpu/drm/i915/gt/intel_migrate.c
    @@ -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. */
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-23 11:51    [W:4.099 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site