From: "Christian König" <christian.koenig@amd.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
intel-xe@lists.freedesktop.org
Cc: Matthew Brost <matthew.brost@intel.com>,
Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>,
Paulo Zanoni <paulo.r.zanoni@intel.com>,
Simona Vetter <simona.vetter@ffwll.ch>,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v10 1/7] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini()
Date: Wed, 18 Sep 2024 13:42:25 +0200 [thread overview]
Message-ID: <d5770ded-cb46-4021-a3c3-851031c09f94@amd.com> (raw)
In-Reply-To: <20240916145112.3336-2-thomas.hellstrom@linux.intel.com>
Am 16.09.24 um 16:51 schrieb Thomas Hellström:
> Make the interface more symmetric by providing and using a
> ttm_resource_cursor_init().
>
> v10:
> - Fix a stray newline (Matthew Brost)
> - Update kerneldoc (Matthew Brost)
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/ttm/ttm_bo.c | 3 ++-
> drivers/gpu/drm/ttm/ttm_bo_util.c | 3 ++-
> drivers/gpu/drm/ttm/ttm_resource.c | 35 ++++++++++++++++++++----------
> include/drm/ttm/ttm_resource.h | 11 +++++-----
> 4 files changed, 34 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 320592435252..06a237d420dc 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -450,7 +450,8 @@ int ttm_bo_evict_first(struct ttm_device *bdev, struct ttm_resource_manager *man
> int ret = 0;
>
> spin_lock(&bdev->lru_lock);
> - res = ttm_resource_manager_first(man, &cursor);
> + ttm_resource_cursor_init(&cursor, man);
> + res = ttm_resource_manager_first(&cursor);
> ttm_resource_cursor_fini(&cursor);
> if (!res) {
> ret = -ENOENT;
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 3c07f4712d5c..454a51239614 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -865,7 +865,8 @@ s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
> s64 lret;
>
> spin_lock(&bdev->lru_lock);
> - ttm_resource_manager_for_each_res(man, &cursor, res) {
> + ttm_resource_cursor_init(&cursor, man);
> + ttm_resource_manager_for_each_res(&cursor, res) {
> struct ttm_buffer_object *bo = res->bo;
> bool bo_needs_unlock = false;
> bool bo_locked = false;
> diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c
> index 6d764ba88aab..2b69229f127c 100644
> --- a/drivers/gpu/drm/ttm/ttm_resource.c
> +++ b/drivers/gpu/drm/ttm/ttm_resource.c
> @@ -80,6 +80,23 @@ static void ttm_bulk_move_drop_cursors(struct ttm_lru_bulk_move *bulk)
> ttm_resource_cursor_clear_bulk(cursor);
> }
>
> +/**
> + * ttm_resource_cursor_init() - Initialize a struct ttm_resource_cursor
> + * @cursor: The cursor to initialize.
> + * @man: The resource manager.
> + *
> + * Initialize the cursor before using it for iteration.
> + */
> +void ttm_resource_cursor_init(struct ttm_resource_cursor *cursor,
> + struct ttm_resource_manager *man)
> +{
> + cursor->priority = 0;
> + cursor->man = man;
> + ttm_lru_item_init(&cursor->hitch, TTM_LRU_HITCH);
> + INIT_LIST_HEAD(&cursor->bulk_link);
> + INIT_LIST_HEAD(&cursor->hitch.link);
> +}
> +
> /**
> * ttm_resource_cursor_fini() - Finalize the LRU list cursor usage
> * @cursor: The struct ttm_resource_cursor to finalize.
> @@ -577,7 +594,6 @@ ttm_resource_cursor_check_bulk(struct ttm_resource_cursor *cursor,
> /**
> * ttm_resource_manager_first() - Start iterating over the resources
> * of a resource manager
> - * @man: resource manager to iterate over
> * @cursor: cursor to record the position
> *
> * Initializes the cursor and starts iterating. When done iterating,
> @@ -586,17 +602,16 @@ ttm_resource_cursor_check_bulk(struct ttm_resource_cursor *cursor,
> * Return: The first resource from the resource manager.
> */
> struct ttm_resource *
> -ttm_resource_manager_first(struct ttm_resource_manager *man,
> - struct ttm_resource_cursor *cursor)
> +ttm_resource_manager_first(struct ttm_resource_cursor *cursor)
> {
> - lockdep_assert_held(&man->bdev->lru_lock);
> + struct ttm_resource_manager *man = cursor->man;
>
> - cursor->priority = 0;
> - cursor->man = man;
> - ttm_lru_item_init(&cursor->hitch, TTM_LRU_HITCH);
> - INIT_LIST_HEAD(&cursor->bulk_link);
> - list_add(&cursor->hitch.link, &man->lru[cursor->priority]);
> + if (WARN_ON_ONCE(!man))
> + return NULL;
> +
> + lockdep_assert_held(&man->bdev->lru_lock);
>
> + list_move(&cursor->hitch.link, &man->lru[cursor->priority]);
> return ttm_resource_manager_next(cursor);
> }
>
> @@ -632,8 +647,6 @@ ttm_resource_manager_next(struct ttm_resource_cursor *cursor)
> ttm_resource_cursor_clear_bulk(cursor);
> }
>
> - ttm_resource_cursor_fini(cursor);
> -
> return NULL;
> }
>
> diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
> index be034be56ba1..e1f3b95d73b6 100644
> --- a/include/drm/ttm/ttm_resource.h
> +++ b/include/drm/ttm/ttm_resource.h
> @@ -325,6 +325,9 @@ struct ttm_resource_cursor {
> unsigned int priority;
> };
>
> +void ttm_resource_cursor_init(struct ttm_resource_cursor *cursor,
> + struct ttm_resource_manager *man);
> +
> void ttm_resource_cursor_fini(struct ttm_resource_cursor *cursor);
>
> /**
> @@ -456,8 +459,7 @@ void ttm_resource_manager_debug(struct ttm_resource_manager *man,
> struct drm_printer *p);
>
> struct ttm_resource *
> -ttm_resource_manager_first(struct ttm_resource_manager *man,
> - struct ttm_resource_cursor *cursor);
> +ttm_resource_manager_first(struct ttm_resource_cursor *cursor);
> struct ttm_resource *
> ttm_resource_manager_next(struct ttm_resource_cursor *cursor);
>
> @@ -466,14 +468,13 @@ ttm_lru_first_res_or_null(struct list_head *head);
>
> /**
> * ttm_resource_manager_for_each_res - iterate over all resources
> - * @man: the resource manager
> * @cursor: struct ttm_resource_cursor for the current position
> * @res: the current resource
> *
> * Iterate over all the evictable resources in a resource manager.
> */
> -#define ttm_resource_manager_for_each_res(man, cursor, res) \
> - for (res = ttm_resource_manager_first(man, cursor); res; \
> +#define ttm_resource_manager_for_each_res(cursor, res) \
> + for (res = ttm_resource_manager_first(cursor); res; \
> res = ttm_resource_manager_next(cursor))
>
> struct ttm_kmap_iter *
next prev parent reply other threads:[~2024-09-18 11:42 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-16 14:51 [PATCH v10 0/7] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
2024-09-16 14:51 ` [PATCH v10 1/7] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini() Thomas Hellström
2024-09-18 11:42 ` Christian König [this message]
2024-09-16 14:51 ` [PATCH v10 2/7] drm/ttm: Add a virtual base class for graphics memory backup Thomas Hellström
2024-09-16 14:51 ` [PATCH v10 3/7] drm/ttm/pool: Provide a helper to shrink pages Thomas Hellström
2024-09-16 14:51 ` [PATCH v10 4/7] drm/ttm: Use fault-injection to test error paths Thomas Hellström
2024-09-16 14:51 ` [PATCH v10 5/7] drm/ttm: Add a shrinker helper and a macro to perform LRU iteration Thomas Hellström
2024-09-16 14:51 ` [PATCH v10 6/7] drm/xe: Add a shrinker for xe bos Thomas Hellström
2024-09-16 14:51 ` [PATCH v10 7/7] drm/xe: Increase the XE_PL_TT watermark Thomas Hellström
2024-09-16 14:56 ` ✓ CI.Patch_applied: success for TTM shrinker helpers and xe buffer object shrinker (rev9) Patchwork
2024-09-16 14:57 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-16 14:58 ` ✓ CI.KUnit: success " Patchwork
2024-09-16 15:09 ` ✓ CI.Build: " Patchwork
2024-09-16 15:12 ` ✓ CI.Hooks: " Patchwork
2024-09-16 15:13 ` ✗ CI.checksparse: warning " Patchwork
2024-09-16 15:41 ` ✓ CI.BAT: success " Patchwork
2024-09-16 18:40 ` ✗ CI.FULL: 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=d5770ded-cb46-4021-a3c3-851031c09f94@amd.com \
--to=christian.koenig@amd.com \
--cc=Amaranath.Somalapuram@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
--cc=paulo.r.zanoni@intel.com \
--cc=simona.vetter@ffwll.ch \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox