lkml.org 
[lkml]   [2023]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v18 11/26] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition
    On Mon, 20 Nov 2023 14:02:29 +0300
    Dmitry Osipenko <dmitry.osipenko@collabora.com> wrote:

    > On 11/10/23 13:16, Boris Brezillon wrote:
    > > On Mon, 30 Oct 2023 02:01:50 +0300
    > > Dmitry Osipenko <dmitry.osipenko@collabora.com> wrote:
    > >
    > >> Prepare drm_gem_shmem_free() to addition of memory shrinker support
    > >> to drm-shmem by adding and using variant of put_pages() that doesn't
    > >> touch reservation lock. Reservation shouldn't be touched because lockdep
    > >> will trigger a bogus warning about locking contention with fs_reclaim
    > >> code paths that can't happen during the time when GEM is freed and
    > >> lockdep doesn't know about that.
    > >>
    > >> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
    > >> ---
    > >> drivers/gpu/drm/drm_gem_shmem_helper.c | 35 +++++++++++++-------------
    > >> 1 file changed, 18 insertions(+), 17 deletions(-)
    > >>
    > >> diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c
    > >> index 08b5a57c59d8..24ff2b99e75b 100644
    > >> --- a/drivers/gpu/drm/drm_gem_shmem_helper.c
    > >> +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
    > >> @@ -128,6 +128,22 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t
    > >> }
    > >> EXPORT_SYMBOL_GPL(drm_gem_shmem_create);
    > >>
    > >> +static void
    > >> +drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem)
    > >> +{
    > >> + struct drm_gem_object *obj = &shmem->base;
    > >> +
    > >> +#ifdef CONFIG_X86
    > >> + if (shmem->map_wc)
    > >> + set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT);
    > >> +#endif
    > >> +
    > >> + drm_gem_put_pages(obj, shmem->pages,
    > >> + shmem->pages_mark_dirty_on_put,
    > >> + shmem->pages_mark_accessed_on_put);
    > >> + shmem->pages = NULL;
    > >> +}
    > >> +
    > >> /**
    > >> * drm_gem_shmem_free - Free resources associated with a shmem GEM object
    > >> * @shmem: shmem GEM object to free
    > >> @@ -142,8 +158,6 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem)
    > >> if (obj->import_attach) {
    > >> drm_prime_gem_destroy(obj, shmem->sgt);
    > >> } else {
    > >> - dma_resv_lock(shmem->base.resv, NULL);
    > >> -
    > >> drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count));
    > >>
    > >> if (shmem->sgt) {
    > >> @@ -157,8 +171,6 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem)
    > >>
    > > If you drop the dma_resv_lock/unlock(), you should also replace the
    > > drm_gem_shmem_put_pages_locked() by a drm_gem_shmem_free_pages() in this
    > > commit.
    >
    > drm_gem_shmem_put_pages_locked() is exported by a later patch of this
    > series, it's not worthwhile to remove this function

    I'm not talking about removing drm_gem_shmem_put_pages_locked(), but
    replacing the drm_gem_shmem_put_pages_locked() call you have in
    drm_gem_shmem_free() by a drm_gem_shmem_free_pages(), so you don't end
    up with a lockdep warning when you stop exactly here in the patch
    series, which is important if we want to keep things bisectable.

    \
     
     \ /
      Last update: 2023-11-20 14:05    [W:5.013 / U:0.468 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site