From: "Das, Nirmoy" <nirmoy.das@linux.intel.com>
To: Matthew Auld <matthew.auld@intel.com>, intel-gfx@lists.freedesktop.org
Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>,
dri-devel@lists.freedesktop.org,
"Andrzej Hajda" <andrzej.hajda@intel.com>,
"Nirmoy Das" <nirmoy.das@intel.com>
Subject: Re: [Intel-gfx] [PATCH v2 2/6] drm/i915/ttm: audit remaining bo->resource
Date: Mon, 30 Jan 2023 13:12:14 +0100 [thread overview]
Message-ID: <5693c957-5abd-8bec-cc53-961048eaeb27@linux.intel.com> (raw)
In-Reply-To: <20230130120636.63765-2-matthew.auld@intel.com>
On 1/30/2023 1:06 PM, Matthew Auld wrote:
> In the near future TTM will have NULL bo->resource when the object is
> initially created, plus after calling into pipeline-gutting. Try to
> handle the remaining cases. In practice NULL bo->resource should be
> taken to mean swapped-out or purged object.
>
> v2 (Andrzej):
> - Rather make i915_ttm_cpu_maps_iomem() return false with NULL
> resource.
>
> References: 516198d317d8 ("drm/i915: audit bo->resource usage v3")
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: Christian König <ckoenig.leichtzumerken@gmail.com>
> Cc: Nirmoy Das <nirmoy.das@intel.com>
> Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
> ---
> drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 10 ++++++++--
> drivers/gpu/drm/i915/gem/i915_gem_ttm.h | 2 +-
> drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c | 4 ++++
> drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c | 7 +++++--
> 4 files changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> index 4758f21c91e1..341b94672abc 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> @@ -472,7 +472,7 @@ static int i915_ttm_shrink(struct drm_i915_gem_object *obj, unsigned int flags)
> struct ttm_placement place = {};
> int ret;
>
> - if (!bo->ttm || bo->resource->mem_type != TTM_PL_SYSTEM)
> + if (!bo->ttm || i915_ttm_cpu_maps_iomem(bo->resource))
> return 0;
>
> GEM_BUG_ON(!i915_tt->is_shmem);
> @@ -511,7 +511,13 @@ static void i915_ttm_delete_mem_notify(struct ttm_buffer_object *bo)
> {
> struct drm_i915_gem_object *obj = i915_ttm_to_gem(bo);
>
> - if (bo->resource && !i915_ttm_is_ghost_object(bo)) {
> + /*
> + * This gets called twice by ttm, so long as we have a ttm resource or
> + * ttm_tt then we can still safely call this. Due to pipeline-gutting,
> + * we maybe have NULL bo->resource, but in that case we should always
> + * have a ttm alive (like if the pages are swapped out).
> + */
> + if ((bo->resource || bo->ttm) && !i915_ttm_is_ghost_object(bo)) {
> __i915_gem_object_pages_fini(obj);
> i915_ttm_free_cached_io_rsgt(obj);
> }
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.h b/drivers/gpu/drm/i915/gem/i915_gem_ttm.h
> index 2a94a99ef76b..f8f6bed1b297 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.h
> @@ -98,7 +98,7 @@ static inline bool i915_ttm_gtt_binds_lmem(struct ttm_resource *mem)
> static inline bool i915_ttm_cpu_maps_iomem(struct ttm_resource *mem)
> {
> /* Once / if we support GGTT, this is also false for cached ttm_tts */
> - return mem->mem_type != I915_PL_SYSTEM;
> + return mem && mem->mem_type != I915_PL_SYSTEM;
> }
>
> bool i915_ttm_resource_mappable(struct ttm_resource *res);
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
> index 76dd9e5e1a8b..d030182ca176 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
> @@ -711,6 +711,10 @@ int i915_gem_obj_copy_ttm(struct drm_i915_gem_object *dst,
>
> assert_object_held(dst);
> assert_object_held(src);
> +
> + if (GEM_WARN_ON(!src_bo->resource || !dst_bo->resource))
> + return -EINVAL;
> +
> i915_deps_init(&deps, GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN);
>
> ret = dma_resv_reserve_fences(src_bo->base.resv, 1);
> 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 7e67742bc65e..dfe39c8e74d8 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
> @@ -53,7 +53,7 @@ static int i915_ttm_backup(struct i915_gem_apply_to_region *apply,
> unsigned int flags;
> int err = 0;
>
> - if (bo->resource->mem_type == I915_PL_SYSTEM || obj->ttm.backup)
> + if (!i915_ttm_cpu_maps_iomem(bo->resource) || obj->ttm.backup)
> return 0;
>
> if (pm_apply->allow_gpu && i915_gem_object_evictable(obj))
> @@ -187,7 +187,10 @@ static int i915_ttm_restore(struct i915_gem_apply_to_region *apply,
> return err;
>
> /* Content may have been swapped. */
> - err = ttm_tt_populate(backup_bo->bdev, backup_bo->ttm, &ctx);
> + if (!backup_bo->resource)
> + err = ttm_bo_validate(backup_bo, i915_ttm_sys_placement(), &ctx);
> + if (!err)
> + err = ttm_tt_populate(backup_bo->bdev, backup_bo->ttm, &ctx);
> if (!err) {
> err = i915_gem_obj_copy_ttm(obj, backup, pm_apply->allow_gpu,
> false);
next prev parent reply other threads:[~2023-01-30 12:12 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-30 12:06 [Intel-gfx] [PATCH v2 1/6] drm/i915/ttm: fix sparse warning Matthew Auld
2023-01-30 12:06 ` Matthew Auld
2023-01-30 12:06 ` [Intel-gfx] [PATCH v2 2/6] drm/i915/ttm: audit remaining bo->resource Matthew Auld
2023-01-30 12:06 ` Matthew Auld
2023-01-30 12:12 ` Das, Nirmoy [this message]
2023-01-30 12:06 ` [Intel-gfx] [PATCH v2 3/6] drm/ttm: clear the ttm_tt when bo->resource is NULL Matthew Auld
2023-01-30 12:06 ` Matthew Auld
2023-01-30 12:12 ` [Intel-gfx] " Das, Nirmoy
2023-01-30 12:12 ` Das, Nirmoy
2023-01-30 12:06 ` [Intel-gfx] [PATCH v2 4/6] drm/ttm: stop allocating dummy resources during BO creation Matthew Auld
2023-01-30 12:06 ` Matthew Auld
2023-01-30 12:13 ` [Intel-gfx] " Das, Nirmoy
2023-01-30 12:13 ` Das, Nirmoy
2023-01-30 12:06 ` [Intel-gfx] [PATCH v2 5/6] drm/ttm: stop allocating a dummy resource for pipelined gutting Matthew Auld
2023-01-30 12:06 ` Matthew Auld
2023-01-30 12:13 ` [Intel-gfx] " Das, Nirmoy
2023-01-30 12:13 ` Das, Nirmoy
2023-01-30 12:06 ` [Intel-gfx] [PATCH v2 6/6] drm/ttm: prevent moving of pinned BOs Matthew Auld
2023-01-30 12:06 ` Matthew Auld
2023-01-30 12:09 ` [Intel-gfx] [PATCH v2 1/6] drm/i915/ttm: fix sparse warning Das, Nirmoy
2023-01-30 12:09 ` Das, Nirmoy
2023-01-30 16:35 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [v2,1/6] " Patchwork
2023-01-30 16:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-01-30 22:17 ` [Intel-gfx] ✓ Fi.CI.IGT: " 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=5693c957-5abd-8bec-cc53-961048eaeb27@linux.intel.com \
--to=nirmoy.das@linux.intel.com \
--cc=andrzej.hajda@intel.com \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=matthew.auld@intel.com \
--cc=nirmoy.das@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.