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: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210922062527.865433-5-thomas.hellstrom@linux.intel.com
27 lines
622 B
C
27 lines
622 B
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2021 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _I915_GEM_TTM_PM_H_
|
|
#define _I915_GEM_TTM_PM_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct intel_memory_region;
|
|
struct drm_i915_gem_object;
|
|
|
|
#define I915_TTM_BACKUP_ALLOW_GPU BIT(0)
|
|
#define I915_TTM_BACKUP_PINNED BIT(1)
|
|
|
|
int i915_ttm_backup_region(struct intel_memory_region *mr, u32 flags);
|
|
|
|
void i915_ttm_recover_region(struct intel_memory_region *mr);
|
|
|
|
int i915_ttm_restore_region(struct intel_memory_region *mr, u32 flags);
|
|
|
|
/* Internal I915 TTM functions below. */
|
|
void i915_ttm_backup_free(struct drm_i915_gem_object *obj);
|
|
|
|
#endif
|