All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Auld <matthew.auld@intel.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: maarten.lankhorst@linux.intel.com
Subject: Re: [PATCH v2 5/6] drm/i915: Don't back up pinned LMEM context images and rings during suspend
Date: Wed, 8 Sep 2021 12:01:13 +0100	[thread overview]
Message-ID: <3c841396-0720-8374-eea6-155cf85edbd4@intel.com> (raw)
In-Reply-To: <20210906165515.450541-6-thomas.hellstrom@linux.intel.com>

On 06/09/2021 17:55, Thomas Hellström wrote:
> Pinned context images are now reset during resume. Don't back them up,
> and assuming that rings can be assumed empty at suspend, don't back them
> up either.
> 
> Introduce a new object flag, I915_BO_ALLOC_PM_VOLATILE meaning that an
> object is allowed to lose its content on suspend.
> 
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
>   .../gpu/drm/i915/gem/i915_gem_object_types.h    | 17 ++++++++++-------
>   drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c      |  3 +++
>   drivers/gpu/drm/i915/gt/intel_lrc.c             |  3 ++-
>   drivers/gpu/drm/i915/gt/intel_ring.c            |  3 ++-
>   4 files changed, 17 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index 734cc8e16481..66123ba46247 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -288,16 +288,19 @@ struct drm_i915_gem_object {
>   	I915_SELFTEST_DECLARE(struct list_head st_link);
>   
>   	unsigned long flags;
> -#define I915_BO_ALLOC_CONTIGUOUS BIT(0)
> -#define I915_BO_ALLOC_VOLATILE   BIT(1)
> -#define I915_BO_ALLOC_CPU_CLEAR  BIT(2)
> -#define I915_BO_ALLOC_USER       BIT(3)
> +#define I915_BO_ALLOC_CONTIGUOUS  BIT(0)
> +#define I915_BO_ALLOC_VOLATILE    BIT(1)
> +#define I915_BO_ALLOC_CPU_CLEAR   BIT(2)
> +#define I915_BO_ALLOC_USER        BIT(3)
> +/* Object may lose its contents on suspend / resume */

+ if we can't evict it?

> +#define I915_BO_ALLOC_PM_VOLATILE BIT(4)
>   #define I915_BO_ALLOC_FLAGS (I915_BO_ALLOC_CONTIGUOUS | \
>   			     I915_BO_ALLOC_VOLATILE | \
>   			     I915_BO_ALLOC_CPU_CLEAR | \
> -			     I915_BO_ALLOC_USER)
> -#define I915_BO_READONLY         BIT(4)
> -#define I915_TILING_QUIRK_BIT    5 /* unknown swizzling; do not release! */
> +			     I915_BO_ALLOC_USER | \
> +			     I915_BO_ALLOC_PM_VOLATILE)
> +#define I915_BO_READONLY          BIT(5)
> +#define I915_TILING_QUIRK_BIT     6 /* unknown swizzling; do not release! */
>   
>   	/**
>   	 * @mem_flags - Mutable placement-related flags
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> index 3884bf45dab8..eaceecfc3f19 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> @@ -61,6 +61,9 @@ static int i915_ttm_backup(struct i915_gem_apply_to_region *apply,
>   	if (!pm_apply->backup_pinned)
>   		return 0;
>   
> +	if (obj->flags & I915_BO_ALLOC_PM_VOLATILE)
> +		return 0;
> +
>   	sys_region = i915->mm.regions[INTEL_REGION_SMEM];
>   	backup = i915_gem_object_create_region(sys_region,
>   					       obj->base.size,
> diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
> index 6ba8daea2f56..3ef9eaf8c50e 100644
> --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
> @@ -942,7 +942,8 @@ __lrc_alloc_state(struct intel_context *ce, struct intel_engine_cs *engine)
>   		context_size += PAGE_SIZE;
>   	}
>   
> -	obj = i915_gem_object_create_lmem(engine->i915, context_size, 0);
> +	obj = i915_gem_object_create_lmem(engine->i915, context_size,
> +					  I915_BO_ALLOC_PM_VOLATILE);
>   	if (IS_ERR(obj))
>   		obj = i915_gem_object_create_shmem(engine->i915, context_size);
>   	if (IS_ERR(obj))
> diff --git a/drivers/gpu/drm/i915/gt/intel_ring.c b/drivers/gpu/drm/i915/gt/intel_ring.c
> index 7c4d5158e03b..2fdd52b62092 100644
> --- a/drivers/gpu/drm/i915/gt/intel_ring.c
> +++ b/drivers/gpu/drm/i915/gt/intel_ring.c
> @@ -112,7 +112,8 @@ static struct i915_vma *create_ring_vma(struct i915_ggtt *ggtt, int size)
>   	struct drm_i915_gem_object *obj;
>   	struct i915_vma *vma;
>   
> -	obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_VOLATILE);
> +	obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_VOLATILE |
> +					  I915_BO_ALLOC_PM_VOLATILE);
>   	if (IS_ERR(obj) && i915_ggtt_has_aperture(ggtt))
>   		obj = i915_gem_object_create_stolen(i915, size);
>   	if (IS_ERR(obj))
> 

WARNING: multiple messages have this Message-ID (diff)
From: Matthew Auld <matthew.auld@intel.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: maarten.lankhorst@linux.intel.com
Subject: Re: [Intel-gfx] [PATCH v2 5/6] drm/i915: Don't back up pinned LMEM context images and rings during suspend
Date: Wed, 8 Sep 2021 12:01:13 +0100	[thread overview]
Message-ID: <3c841396-0720-8374-eea6-155cf85edbd4@intel.com> (raw)
In-Reply-To: <20210906165515.450541-6-thomas.hellstrom@linux.intel.com>

On 06/09/2021 17:55, Thomas Hellström wrote:
> Pinned context images are now reset during resume. Don't back them up,
> and assuming that rings can be assumed empty at suspend, don't back them
> up either.
> 
> Introduce a new object flag, I915_BO_ALLOC_PM_VOLATILE meaning that an
> object is allowed to lose its content on suspend.
> 
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
>   .../gpu/drm/i915/gem/i915_gem_object_types.h    | 17 ++++++++++-------
>   drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c      |  3 +++
>   drivers/gpu/drm/i915/gt/intel_lrc.c             |  3 ++-
>   drivers/gpu/drm/i915/gt/intel_ring.c            |  3 ++-
>   4 files changed, 17 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index 734cc8e16481..66123ba46247 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -288,16 +288,19 @@ struct drm_i915_gem_object {
>   	I915_SELFTEST_DECLARE(struct list_head st_link);
>   
>   	unsigned long flags;
> -#define I915_BO_ALLOC_CONTIGUOUS BIT(0)
> -#define I915_BO_ALLOC_VOLATILE   BIT(1)
> -#define I915_BO_ALLOC_CPU_CLEAR  BIT(2)
> -#define I915_BO_ALLOC_USER       BIT(3)
> +#define I915_BO_ALLOC_CONTIGUOUS  BIT(0)
> +#define I915_BO_ALLOC_VOLATILE    BIT(1)
> +#define I915_BO_ALLOC_CPU_CLEAR   BIT(2)
> +#define I915_BO_ALLOC_USER        BIT(3)
> +/* Object may lose its contents on suspend / resume */

+ if we can't evict it?

> +#define I915_BO_ALLOC_PM_VOLATILE BIT(4)
>   #define I915_BO_ALLOC_FLAGS (I915_BO_ALLOC_CONTIGUOUS | \
>   			     I915_BO_ALLOC_VOLATILE | \
>   			     I915_BO_ALLOC_CPU_CLEAR | \
> -			     I915_BO_ALLOC_USER)
> -#define I915_BO_READONLY         BIT(4)
> -#define I915_TILING_QUIRK_BIT    5 /* unknown swizzling; do not release! */
> +			     I915_BO_ALLOC_USER | \
> +			     I915_BO_ALLOC_PM_VOLATILE)
> +#define I915_BO_READONLY          BIT(5)
> +#define I915_TILING_QUIRK_BIT     6 /* unknown swizzling; do not release! */
>   
>   	/**
>   	 * @mem_flags - Mutable placement-related flags
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> index 3884bf45dab8..eaceecfc3f19 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> @@ -61,6 +61,9 @@ static int i915_ttm_backup(struct i915_gem_apply_to_region *apply,
>   	if (!pm_apply->backup_pinned)
>   		return 0;
>   
> +	if (obj->flags & I915_BO_ALLOC_PM_VOLATILE)
> +		return 0;
> +
>   	sys_region = i915->mm.regions[INTEL_REGION_SMEM];
>   	backup = i915_gem_object_create_region(sys_region,
>   					       obj->base.size,
> diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
> index 6ba8daea2f56..3ef9eaf8c50e 100644
> --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
> @@ -942,7 +942,8 @@ __lrc_alloc_state(struct intel_context *ce, struct intel_engine_cs *engine)
>   		context_size += PAGE_SIZE;
>   	}
>   
> -	obj = i915_gem_object_create_lmem(engine->i915, context_size, 0);
> +	obj = i915_gem_object_create_lmem(engine->i915, context_size,
> +					  I915_BO_ALLOC_PM_VOLATILE);
>   	if (IS_ERR(obj))
>   		obj = i915_gem_object_create_shmem(engine->i915, context_size);
>   	if (IS_ERR(obj))
> diff --git a/drivers/gpu/drm/i915/gt/intel_ring.c b/drivers/gpu/drm/i915/gt/intel_ring.c
> index 7c4d5158e03b..2fdd52b62092 100644
> --- a/drivers/gpu/drm/i915/gt/intel_ring.c
> +++ b/drivers/gpu/drm/i915/gt/intel_ring.c
> @@ -112,7 +112,8 @@ static struct i915_vma *create_ring_vma(struct i915_ggtt *ggtt, int size)
>   	struct drm_i915_gem_object *obj;
>   	struct i915_vma *vma;
>   
> -	obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_VOLATILE);
> +	obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_VOLATILE |
> +					  I915_BO_ALLOC_PM_VOLATILE);
>   	if (IS_ERR(obj) && i915_ggtt_has_aperture(ggtt))
>   		obj = i915_gem_object_create_stolen(i915, size);
>   	if (IS_ERR(obj))
> 

  reply	other threads:[~2021-09-08 11:01 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-06 16:55 [PATCH v2 0/6] drm/i915: Suspend / resume backup- and restore of LMEM Thomas Hellström
2021-09-06 16:55 ` [Intel-gfx] " Thomas Hellström
2021-09-06 16:55 ` [PATCH v2 1/6] drm/i915/ttm: Implement a function to copy the contents of two TTM-base objects Thomas Hellström
2021-09-06 16:55   ` [Intel-gfx] " Thomas Hellström
2021-09-07  8:54   ` Matthew Auld
2021-09-07  8:54     ` [Intel-gfx] " Matthew Auld
2021-09-06 16:55 ` [PATCH v2 2/6] drm/i915/gem: Implement a function to process all gem objects of a region Thomas Hellström
2021-09-06 16:55   ` [Intel-gfx] " Thomas Hellström
2021-09-07  9:12   ` Matthew Auld
2021-09-07  9:12     ` [Intel-gfx] " Matthew Auld
2021-09-06 16:55 ` [PATCH v2 3/6] drm/i915 Implement LMEM backup and restore for suspend / resume Thomas Hellström
2021-09-06 16:55   ` [Intel-gfx] " Thomas Hellström
2021-09-07 17:37   ` Matthew Auld
2021-09-07 17:37     ` [Intel-gfx] " Matthew Auld
2021-09-08  7:58     ` Thomas Hellström
2021-09-08  7:58       ` Thomas Hellström
2021-09-10 13:27   ` Thomas Hellström
2021-09-10 13:27     ` [Intel-gfx] " Thomas Hellström
2021-09-06 16:55 ` [PATCH v2 4/6] drm/i915/gt: Register the migrate contexts with their engines Thomas Hellström
2021-09-06 16:55   ` [Intel-gfx] " Thomas Hellström
2021-09-06 16:55 ` [PATCH v2 5/6] drm/i915: Don't back up pinned LMEM context images and rings during suspend Thomas Hellström
2021-09-06 16:55   ` [Intel-gfx] " Thomas Hellström
2021-09-08 11:01   ` Matthew Auld [this message]
2021-09-08 11:01     ` Matthew Auld
2021-09-08 11:07   ` Matthew Auld
2021-09-08 11:07     ` [Intel-gfx] " Matthew Auld
2021-09-08 12:26     ` Thomas Hellström
2021-09-08 12:26       ` [Intel-gfx] " Thomas Hellström
2021-09-08 13:18       ` Matthew Auld
2021-09-08 13:18         ` [Intel-gfx] " Matthew Auld
2021-09-06 16:55 ` [PATCH v2 6/6] drm/i915: Reduce the number of objects subject to memcpy recover Thomas Hellström
2021-09-06 16:55   ` [Intel-gfx] " Thomas Hellström
2021-09-06 17:10 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Suspend / resume backup- and restore of LMEM. (rev2) Patchwork
2021-09-06 17:41 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-09-06 19:16 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2021-09-08 15:24 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Suspend / resume backup- and restore of LMEM. (rev3) Patchwork
2021-09-08 15:53 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-09-08 19:41 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3c841396-0720-8374-eea6-155cf85edbd4@intel.com \
    --to=matthew.auld@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=thomas.hellstrom@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.