From: "Adrián Larumbe" <adrian.larumbe@collabora.com>
To: Boris Brezillon <boris.brezillon@collabora.com>
Cc: Rob Herring <robh@kernel.org>,
Steven Price <steven.price@arm.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>,
Simona Vetter <simona@ffwll.ch>,
Faith Ekstrand <faith.ekstrand@collabora.com>,
"Marty E. Plummer" <hanetzer@startmail.com>,
Tomeu Vizoso <tomeu@tomeuvizoso.net>,
Eric Anholt <eric@anholt.net>,
Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>,
Robin Murphy <robin.murphy@arm.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Collabora Kernel Team <kernel@collabora.com>,
Neil Armstrong <neil.armstrong@linaro.org>
Subject: Re: [PATCH v5 09/11] drm/panfrost: Introduce a reset lock
Date: Thu, 13 Aug 2026 13:50:45 +0100 [thread overview]
Message-ID: <an29irJv7zbcNx6N@sobremesa> (raw)
In-Reply-To: <20260812114543.17e5c10d@fedora-21.home>
On 12.08.2026 11:45, Boris Brezillon wrote:
> On Tue, 11 Aug 2026 22:42:18 +0100
> Adrián Larumbe <adrian.larumbe@collabora.com> wrote:
>
> > So as to avoid accessing HW register while a reset is ongoing, a read/write
> > semaphore that envelopes the reset sequence will help driver entry points
> > avoid racing with it. For now, the only such racy entry point is the ioctl
> > that returns the current GPU timestmap.
> >
> > Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
> > ---
> > drivers/gpu/drm/panfrost/panfrost_device.c | 2 ++
> > drivers/gpu/drm/panfrost/panfrost_device.h | 1 +
> > drivers/gpu/drm/panfrost/panfrost_drv.c | 9 ++++++---
> > drivers/gpu/drm/panfrost/panfrost_job.c | 1 +
> > 4 files changed, 10 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/panfrost/panfrost_device.c
> > index 5b66173c75b9..e0390b6c0d22 100644
> > --- a/drivers/gpu/drm/panfrost/panfrost_device.c
> > +++ b/drivers/gpu/drm/panfrost/panfrost_device.c
> > @@ -602,6 +602,8 @@ bool panfrost_exception_needs_reset(const struct panfrost_device *pfdev,
> >
> > void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_int)
> > {
> > + guard(rwsem_read)(&pfdev->reset.lock);
>
> Oops, s/rwsem_read/rwsem_write/. This is actually fixed in the next
> patch.
Sorry about this, I seemed to have botched the final interactive rebase.
> > +
> > panfrost_gpu_soft_reset(pfdev);
> > panfrost_gpu_power_on(pfdev);
> > panfrost_mmu_reset(pfdev);
> > diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h
> > index 4bbaaaf827a5..a2a68e042225 100644
> > --- a/drivers/gpu/drm/panfrost/panfrost_device.h
> > +++ b/drivers/gpu/drm/panfrost/panfrost_device.h
> > @@ -166,6 +166,7 @@ struct panfrost_device {
> > struct {
> > struct workqueue_struct *wq;
> > struct work_struct work;
> > + struct rw_semaphore lock;
> > atomic_t pending;
> > } reset;
> >
> > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> > index 958f1d36ab10..ff23b1a979bb 100644
> > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> > @@ -41,9 +41,12 @@ static int panfrost_ioctl_query_timestamp(struct panfrost_device *pfdev,
> > if (ret)
> > return ret;
> >
> > - panfrost_cycle_counter_get(pfdev);
> > - *arg = panfrost_timestamp_read(pfdev);
> > - panfrost_cycle_counter_put(pfdev);
> > + /* We should not read timestamp register while the GPU is being reset */
> > + scoped_guard(rwsem_read, &pfdev->reset.lock) {
> > + panfrost_cycle_counter_get(pfdev);
> > + *arg = panfrost_timestamp_read(pfdev);
> > + panfrost_cycle_counter_put(pfdev);
> > + }
> >
> > pm_runtime_put(pfdev->base.dev);
> > return 0;
> > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
> > index c761379851da..9d7dafa29f19 100644
> > --- a/drivers/gpu/drm/panfrost/panfrost_job.c
> > +++ b/drivers/gpu/drm/panfrost/panfrost_job.c
> > @@ -874,6 +874,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev)
> >
> > INIT_WORK(&pfdev->reset.work, panfrost_reset_work);
> > spin_lock_init(&js->job_lock);
> > + init_rwsem(&pfdev->reset.lock);
> >
> > js->irq = platform_get_irq_byname(to_platform_device(pfdev->base.dev), "job");
> > if (js->irq < 0)
> >
Adrian Larumbe
next prev parent reply other threads:[~2026-08-13 12:51 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 21:42 [PATCH v5 00/11] RPM, perfcnt and other minor fixes for Panfrost Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 01/11] drm/panfrost: Check another bo field for cache option query Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 02/11] drm/panfrost: Prevent division by 0 Adrián Larumbe
2026-08-11 21:57 ` sashiko-bot
2026-08-12 7:59 ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 03/11] drm/panfrost: Remove unnecessary header file include Adrián Larumbe
2026-08-12 8:00 ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 04/11] drm/panfrost: Move shrinker initialization and unplug one level down Adrián Larumbe
2026-08-11 21:55 ` sashiko-bot
2026-08-12 8:07 ` Boris Brezillon
2026-08-13 12:13 ` Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 05/11] drm/panfrost: Move all device power up and down into RPM callbacks Adrián Larumbe
2026-08-11 21:54 ` sashiko-bot
2026-08-12 9:07 ` Boris Brezillon
2026-08-13 13:22 ` Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 06/11] drm/panfrost: Explicitly enable MMU interrupts at device init Adrián Larumbe
2026-08-11 21:54 ` sashiko-bot
2026-08-12 9:14 ` Boris Brezillon
2026-08-13 12:41 ` Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 07/11] drm/panfrost: Add debugfs knob for manually triggering a GPU reset Adrián Larumbe
2026-08-11 21:54 ` sashiko-bot
2026-08-12 9:17 ` Boris Brezillon
2026-08-13 12:20 ` Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 08/11] drm/panfrost: Move perfcnt GPU disable sequence into a helper Adrián Larumbe
2026-08-12 9:48 ` Boris Brezillon
2026-08-13 12:28 ` Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 09/11] drm/panfrost: Introduce a reset lock Adrián Larumbe
2026-08-11 21:55 ` sashiko-bot
2026-08-12 9:44 ` Boris Brezillon
2026-08-12 9:45 ` Boris Brezillon
2026-08-13 12:50 ` Adrián Larumbe [this message]
2026-08-11 21:42 ` [PATCH v5 10/11] drm/panfrost: Fix races between perfcnt and reset sequence Adrián Larumbe
2026-08-11 21:58 ` sashiko-bot
2026-08-12 10:06 ` Boris Brezillon
2026-08-13 12:50 ` Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 11/11] drm/panfrost: Bump driver minor to reflect new DUMP IOCTL req field Adrián Larumbe
2026-08-11 21:55 ` sashiko-bot
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=an29irJv7zbcNx6N@sobremesa \
--to=adrian.larumbe@collabora.com \
--cc=airlied@gmail.com \
--cc=alyssa.rosenzweig@collabora.com \
--cc=boris.brezillon@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=eric@anholt.net \
--cc=faith.ekstrand@collabora.com \
--cc=hanetzer@startmail.com \
--cc=kernel@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=robin.murphy@arm.com \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--cc=tomeu@tomeuvizoso.net \
--cc=tzimmermann@suse.de \
/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.