From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: "Christian König" <christian.koenig@amd.com>,
"Matthew Brost" <matthew.brost@intel.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 4/7] drm/ttm: move LRU walk defines into new internal header
Date: Tue, 06 Aug 2024 10:29:34 +0200 [thread overview]
Message-ID: <77995ffc6de401bc8ed2f4181848dffb18540666.camel@linux.intel.com> (raw)
In-Reply-To: <14b70a4d-dc65-4886-940c-ffc1a8197821@gmail.com>
Hi, Christian.
On Thu, 2024-07-11 at 14:01 +0200, Christian König wrote:
> Am 10.07.24 um 20:19 schrieb Matthew Brost:
> > On Wed, Jul 10, 2024 at 02:42:58PM +0200, Christian König wrote:
> > > That is something drivers really shouldn't mess with.
> > >
> > Thomas uses this in Xe to implement a shrinker [1]. Seems to need
> > to
> > remain available for drivers.
>
> No, that is exactly what I try to prevent with that.
>
> This is an internally thing of TTM and drivers should never use it
> directly.
That driver-facing LRU walker is a direct response/solution to this
comment that you made in the first shrinker series:
https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9
That is also mentioned in the cover letter of the recent shrinker
series, and this walker has been around in that shrinker series for
more than half a year now so if you think it's not the correct driver
facing API IMHO that should be addressed by a review comment in that
series rather than in posting a conflicting patch?
So assuming that we still want the driver to register the shrinker,
IMO that helper abstracts away all the nasty locking and pitfalls for a
driver-registered shrinker, and is similar in structure to for example
the pagewalk helper in mm/pagewalk.c.
An alternative that could be tried as a driver-facing API is to provide
a for_each_bo_in_lru_lock() macro where the driver open-codes
"process_bo()" inside the for loop but I tried this and found it quite
fragile since the driver might exit the loop without performing the
necessary cleanup.
However with using scoped_guard() in linux/cleanup.h that could
probably be mitigated to some exent, but I still think that a walker
helper like this is the safer choice and given the complexity of a for_
macro involving scoped_guard(), I think the walker helper is the
easiest-to-maintain solution moving forward.
But open to suggestions.
Thanks
Thomas
>
> Regards,
> Christian.
>
> >
> > Matt
> >
> > [1]
> > https://patchwork.freedesktop.org/patch/602165/?series=131815&rev=6
> >
> > > Signed-off-by: Christian König <christian.koenig@amd.com>
> > > ---
> > > drivers/gpu/drm/ttm/ttm_bo.c | 1 +
> > > drivers/gpu/drm/ttm/ttm_bo_util.c | 2 +
> > > drivers/gpu/drm/ttm/ttm_bo_util.h | 67
> > > +++++++++++++++++++++++++++++++
> > > include/drm/ttm/ttm_bo.h | 35 ----------------
> > > 4 files changed, 70 insertions(+), 35 deletions(-)
> > > create mode 100644 drivers/gpu/drm/ttm/ttm_bo_util.h
> > >
> > > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c
> > > b/drivers/gpu/drm/ttm/ttm_bo.c
> > > index 0131ec802066..41bee8696e69 100644
> > > --- a/drivers/gpu/drm/ttm/ttm_bo.c
> > > +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> > > @@ -45,6 +45,7 @@
> > > #include <linux/dma-resv.h>
> > >
> > > #include "ttm_module.h"
> > > +#include "ttm_bo_util.h"
> > >
> > > static void ttm_bo_mem_space_debug(struct ttm_buffer_object
> > > *bo,
> > > struct ttm_placement
> > > *placement)
> > > diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > b/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > index 3c07f4712d5c..03e28e3d0d03 100644
> > > --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > @@ -37,6 +37,8 @@
> > >
> > > #include <drm/drm_cache.h>
> > >
> > > +#include "ttm_bo_util.h"
> > > +
> > > struct ttm_transfer_obj {
> > > struct ttm_buffer_object base;
> > > struct ttm_buffer_object *bo;
> > > diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.h
> > > b/drivers/gpu/drm/ttm/ttm_bo_util.h
> > > new file mode 100644
> > > index 000000000000..c19b50809208
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/ttm/ttm_bo_util.h
> > > @@ -0,0 +1,67 @@
> > > +/* SPDX-License-Identifier: GPL-2.0 OR MIT */
> > > +/***************************************************************
> > > ***********
> > > + * Copyright 2024 Advanced Micro Devices, Inc.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> > > obtaining a
> > > + * copy of this software and associated documentation files (the
> > > "Software"),
> > > + * to deal in the Software without restriction, including
> > > without limitation
> > > + * the rights to use, copy, modify, merge, publish, distribute,
> > > sublicense,
> > > + * and/or sell copies of the Software, and to permit persons to
> > > whom the
> > > + * Software is furnished to do so, subject to the following
> > > conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall
> > > be included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
> > > KIND, EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> > > EVENT SHALL
> > > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM,
> > > DAMAGES OR
> > > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
> > > OTHERWISE,
> > > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
> > > THE USE OR
> > > + * OTHER DEALINGS IN THE SOFTWARE.
> > > + *
> > > +
> > > *****************************************************************
> > > *********/
> > > +#ifndef _TTM_BO_UTIL_H_
> > > +#define _TTM_BO_UTIL_H_
> > > +
> > > +struct ww_acquire_ctx;
> > > +
> > > +struct ttm_buffer_object;
> > > +struct ttm_operation_ctx;
> > > +struct ttm_lru_walk;
> > > +
> > > +/** struct ttm_lru_walk_ops - Operations for a LRU walk. */
> > > +struct ttm_lru_walk_ops {
> > > + /**
> > > + * process_bo - Process this bo.
> > > + * @walk: struct ttm_lru_walk describing the walk.
> > > + * @bo: A locked and referenced buffer object.
> > > + *
> > > + * Return: Negative error code on error, User-defined
> > > positive value
> > > + * (typically, but not always, size of the processed bo)
> > > on success.
> > > + * On success, the returned values are summed by the
> > > walk and the
> > > + * walk exits when its target is met.
> > > + * 0 also indicates success, -EBUSY means this bo was
> > > skipped.
> > > + */
> > > + s64 (*process_bo)(struct ttm_lru_walk *walk,
> > > + struct ttm_buffer_object *bo);
> > > +};
> > > +
> > > +/**
> > > + * struct ttm_lru_walk - Structure describing a LRU walk.
> > > + */
> > > +struct ttm_lru_walk {
> > > + /** @ops: Pointer to the ops structure. */
> > > + const struct ttm_lru_walk_ops *ops;
> > > + /** @ctx: Pointer to the struct ttm_operation_ctx. */
> > > + struct ttm_operation_ctx *ctx;
> > > + /** @ticket: The struct ww_acquire_ctx if any. */
> > > + struct ww_acquire_ctx *ticket;
> > > + /** @tryock_only: Only use trylock for locking. */
> > > + bool trylock_only;
> > > +};
> > > +
> > > +s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct
> > > ttm_device *bdev,
> > > + struct ttm_resource_manager *man, s64
> > > target);
> > > +
> > > +#endif
> > > diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
> > > index d1a732d56259..5f7c967222a2 100644
> > > --- a/include/drm/ttm/ttm_bo.h
> > > +++ b/include/drm/ttm/ttm_bo.h
> > > @@ -194,41 +194,6 @@ struct ttm_operation_ctx {
> > > uint64_t bytes_moved;
> > > };
> > >
> > > -struct ttm_lru_walk;
> > > -
> > > -/** struct ttm_lru_walk_ops - Operations for a LRU walk. */
> > > -struct ttm_lru_walk_ops {
> > > - /**
> > > - * process_bo - Process this bo.
> > > - * @walk: struct ttm_lru_walk describing the walk.
> > > - * @bo: A locked and referenced buffer object.
> > > - *
> > > - * Return: Negative error code on error, User-defined
> > > positive value
> > > - * (typically, but not always, size of the processed bo)
> > > on success.
> > > - * On success, the returned values are summed by the
> > > walk and the
> > > - * walk exits when its target is met.
> > > - * 0 also indicates success, -EBUSY means this bo was
> > > skipped.
> > > - */
> > > - s64 (*process_bo)(struct ttm_lru_walk *walk, struct
> > > ttm_buffer_object *bo);
> > > -};
> > > -
> > > -/**
> > > - * struct ttm_lru_walk - Structure describing a LRU walk.
> > > - */
> > > -struct ttm_lru_walk {
> > > - /** @ops: Pointer to the ops structure. */
> > > - const struct ttm_lru_walk_ops *ops;
> > > - /** @ctx: Pointer to the struct ttm_operation_ctx. */
> > > - struct ttm_operation_ctx *ctx;
> > > - /** @ticket: The struct ww_acquire_ctx if any. */
> > > - struct ww_acquire_ctx *ticket;
> > > - /** @tryock_only: Only use trylock for locking. */
> > > - bool trylock_only;
> > > -};
> > > -
> > > -s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct
> > > ttm_device *bdev,
> > > - struct ttm_resource_manager *man, s64
> > > target);
> > > -
> > > /**
> > > * ttm_bo_get - reference a struct ttm_buffer_object
> > > *
> > > --
> > > 2.34.1
> > >
>
next prev parent reply other threads:[~2024-08-06 8:29 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-10 12:42 Using drm_exec in TTM Christian König
2024-07-10 12:42 ` [PATCH 1/7] dma-buf/dma-resv: Introduce dma_resv_trylock_ctx() Christian König
2024-07-10 12:42 ` [PATCH 2/7] drm/exec: don't immediately add the prelocked obj Christian König
2024-07-10 12:42 ` [PATCH 3/7] drm/exec: provide trylock interface for eviction Christian König
2024-07-10 12:42 ` [PATCH 4/7] drm/ttm: move LRU walk defines into new internal header Christian König
2024-07-10 18:19 ` Matthew Brost
2024-07-11 12:01 ` Christian König
2024-07-11 16:00 ` Matthew Brost
2024-08-06 8:29 ` Thomas Hellström [this message]
2024-08-19 11:03 ` Christian König
2024-08-19 11:38 ` Thomas Hellström
2024-08-19 14:14 ` Daniel Vetter
2024-08-19 15:26 ` Christian König
2024-08-20 10:37 ` Thomas Hellström
2024-08-20 15:45 ` Christian König
2024-08-20 16:00 ` Thomas Hellström
2024-08-21 8:14 ` Christian König
2024-08-21 8:57 ` Thomas Hellström
2024-08-21 9:31 ` Thomas Hellström
2024-08-21 9:48 ` Christian König
2024-08-21 12:00 ` Thomas Hellström
2024-08-22 6:47 ` Thomas Hellström
2024-08-22 7:55 ` Christian König
2024-08-22 8:21 ` Thomas Hellström
2024-08-22 8:36 ` Thomas Hellström
2024-08-22 9:29 ` Christian König
2024-08-22 13:16 ` Thomas Hellström
2024-08-27 16:58 ` Daniel Vetter
2024-08-22 9:23 ` Daniel Vetter
2024-08-22 13:19 ` Christian König
2024-08-27 16:52 ` Daniel Vetter
2024-08-27 17:53 ` Daniel Vetter
2024-08-28 12:20 ` Christian König
2024-08-28 14:05 ` Thomas Hellström
2024-08-28 15:25 ` Christian König
2024-08-28 15:35 ` Alex Deucher
2024-08-28 15:45 ` Thomas Hellström
2024-09-02 11:07 ` Daniel Vetter
2024-09-18 12:57 ` Thomas Hellström
2024-10-02 11:30 ` Thomas Hellström
2024-10-02 11:32 ` Christian König
2024-10-02 11:36 ` Thomas Hellström
2024-10-07 9:08 ` Christian König
2024-10-09 13:39 ` Thomas Hellström
2024-10-09 14:17 ` Thomas Hellström
2024-10-10 8:00 ` Christian König
2024-10-11 16:52 ` Thomas Hellström
2024-08-27 18:24 ` Alex Deucher
2024-09-02 11:00 ` Daniel Vetter
2024-08-21 7:02 ` Thomas Hellström
2024-07-10 12:42 ` [PATCH 5/7] drm/ttm: move needs_unlock into the walk Christian König
2024-07-10 12:43 ` [PATCH 6/7] drm/ttm: support using drm_exec during eviction v2 Christian König
2024-07-10 12:43 ` [PATCH 7/7] drm/amdgpu: use drm_exec during BO validation Christian König
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=77995ffc6de401bc8ed2f4181848dffb18540666.camel@linux.intel.com \
--to=thomas.hellstrom@linux.intel.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=matthew.brost@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.