• Thomas Hellström's avatar
    drm/i915 Implement LMEM backup and restore for suspend / resume · c56ce956
    Thomas Hellström authored
    Just evict unpinned objects to system. For pinned LMEM objects,
    make a backup system object and blit the contents to that.
    
    Backup is performed in three steps,
    1: Opportunistically evict evictable objects using the gpu blitter.
    2: After gt idle, evict evictable objects using the gpu blitter. This will
    be modified in an upcoming patch to backup pinned objects that are not used
    by the blitter itself.
    3: Backup remaining pinned objects using memcpy.
    
    Also move uC suspend to after 2) to make sure we have a functional GuC
    during 2) if using GuC submission.
    
    v2:
    - Major refactor to make sure gem_exec_suspend@hang-SX subtests work, and
      suspend / resume works with a slightly modified GuC submission enabling
      patch series.
    
    v3:
    - Fix a potential use-after-free (Matthew Auld)
    - Use i915_gem_object_create_shmem() instead of
      i915_gem_object_create_region (Matthew Auld)
    - Minor simplifications (Matthew Auld)
    - Fix up kerneldoc for i195_ttm_restore_region().
    - Final lmem_suspend() call moved to i915_gem_backup_suspend from
      i915_gem_suspend_late, since the latter gets called at driver unload
      and we don't unnecessarily want to run it at that time.
    
    v4:
    - Interface change of ttm- & lmem suspend / resume functions to use
      flags rather than bools. (Matthew Auld)
    - Completely drop the i915_gem_backup_suspend change (Matthew Auld)
    Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210922062527.865433-5-thomas.hellstrom@linux.intel.com
    c56ce956
i915_gem_pm.h 636 Bytes