[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230912090710.72e998e6@collabora.com>
Date: Tue, 12 Sep 2023 09:07:10 +0200
From: Boris Brezillon <boris.brezillon@...labora.com>
To: Dmitry Osipenko <dmitry.osipenko@...labora.com>
Cc: David Airlie <airlied@...il.com>,
Gerd Hoffmann <kraxel@...hat.com>,
Gurchetan Singh <gurchetansingh@...omium.org>,
Chia-I Wu <olvaffe@...il.com>, Daniel Vetter <daniel@...ll.ch>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>,
Thomas Zimmermann <tzimmermann@...e.de>,
Christian König <christian.koenig@....com>,
Qiang Yu <yuq825@...il.com>,
Steven Price <steven.price@....com>,
Emma Anholt <emma@...olt.net>, Melissa Wen <mwen@...lia.com>,
dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
kernel@...labora.com, virtualization@...ts.linux-foundation.org
Subject: Re: [PATCH v16 02/20] drm/shmem-helper: Use flag for tracking page
count bumped by get_pages_sgt()
On Tue, 12 Sep 2023 02:41:58 +0300
Dmitry Osipenko <dmitry.osipenko@...labora.com> wrote:
> On 9/5/23 10:40, Boris Brezillon wrote:
> > On Sun, 3 Sep 2023 20:07:18 +0300
> > Dmitry Osipenko <dmitry.osipenko@...labora.com> wrote:
> >
> >> Use separate flag for tracking page count bumped by shmem->sgt to avoid
> >> imbalanced page counter during of drm_gem_shmem_free() time. It's fragile
> >> to assume that populated shmem->pages at a freeing time means that the
> >> count was bumped by drm_gem_shmem_get_pages_sgt(), using a flag removes
> >> the ambiguity.
> >>
> >> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@...labora.com>
> >> ---
> >> drivers/gpu/drm/drm_gem_shmem_helper.c | 11 ++++++++++-
> >> drivers/gpu/drm/lima/lima_gem.c | 1 +
> >> include/drm/drm_gem_shmem_helper.h | 7 +++++++
> >> 3 files changed, 18 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c
> >> index 6693d4061ca1..848435e08eb2 100644
> >> --- a/drivers/gpu/drm/drm_gem_shmem_helper.c
> >> +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
> >> @@ -152,8 +152,10 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem)
> >> sg_free_table(shmem->sgt);
> >> kfree(shmem->sgt);
> >> }
> >> - if (shmem->pages)
> >> + if (shmem->pages) {
> >> drm_gem_shmem_put_pages(shmem);
> >> + drm_WARN_ON(obj->dev, !shmem->got_pages_sgt);
> >> + }
> >
> > Already mentioned in v15, but I keep thinking the following:
> >
> > if (shmem->sgt) {
> > // existing code in the preceding
> > // if (shmem->sgt) branch
> > ...
> >
> > /*
> > * Release the implicit pages ref taken in
> > * drm_gem_shmem_get_pages_sgt_locked().
> > */
> > drm_gem_shmem_put_pages(shmem);
> > }
> >
> > does exactly the same without requiring the addition of a new field.
>
> I'll factor out these "flag" patches into separate patchset since they
> cause too many questions.
So patch 1 and 2 in this series right?
> This is a fix for a minor bug that existed for
> many years
I'm not denying the fact there's a bug, but I'm convinced this can be
fixed without adding new flags. If there's something wrong with the
suggested solution, I'd be interested to hear more about it.
> and is difficult to trigger in practice, it can wait.
Triggering it with a real fault is hard, but you can manually fake
errors at any point in the initialization process and check what
happens.
>
> For now will be better to focus on finishing and landing the refcnt and
> shrinker patches, the rest of drm-shmem core improvements can be done
> afterwards.
>
Sounds good to me.
Powered by blists - more mailing lists