From: Boris Brezillon <boris.brezillon@collabora.com>
To: Steven Price <steven.price@arm.com>
Cc: Liviu Dudau <liviu.dudau@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>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 08/11] drm/panthor: Automatically enable interrupts in panthor_fw_wait_acks()
Date: Tue, 19 May 2026 16:19:44 +0200 [thread overview]
Message-ID: <20260519161944.285178c6@fedora> (raw)
In-Reply-To: <20260518101656.6426fb18@fedora>
On Mon, 18 May 2026 10:16:56 +0200
Boris Brezillon <boris.brezillon@collabora.com> wrote:
> On Thu, 14 May 2026 15:25:07 +0100
> Steven Price <steven.price@arm.com> wrote:
>
> > On 12/05/2026 12:37, Boris Brezillon wrote:
> > > Rather than assuming an interrupt is always expected for request
> > > acks, temporarily enable the relevant interrupts when the polling-wait
> > > failed. This should hopefully reduce the number of interrupts the CPU
> > > has to process.
> > >
> > > Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> >
> > As mentioned in the other thread[1] it turns out this won't work with
> > the current firmware.
> >
> > The firmware checks the interrupt mask before signalling the ACK - so
> > enabling the bit in the mask just before waiting for it is problematic -
> > the firmware may not see the addition in the mask and will not trigger
> > the interrupt.
>
> Is it a problem though? wait_event_timeout() will evaluate the
> condition before going to sleep, so, if the FW raced with the
> input->ack_irq_mask update, I assume the condition will evaluate to
> true and wait_event_timeout() would return immediately. The only issue
> is if the FW updates the output->ack register after reading
> input->ack_irq_mask, but that would be weird, since the output->ack
> update doesn't depend on input->ack_irq_mask, and raising an interrupt
> before updating output->ack would be racy anyway.
>
> Am I missing something?
>
Quoting your reply to v1, for the context, because I missed it when
replying here:
> So I've looked at the firmware implementation and I can say that there's
> a race condition on the firmware side if we change the mask after
> sending the START/RESUME request. The firmware currently samples the
> mask before triggering the update to CSG_ACK and then uses the sampled
> value to decide whether to trigger an interrupt.
So, the race is:
CPU MCU
CSG_REQ.STATE = START
atomic_poll(CSG_ACK & STATE_MASK)
process_state_change()
...
mask = CSG_ACK_IRQ_MASK
...
// done
CSG_ACK_IRQ_MASK |= STATE_MASK
wait(CSG_ACK & STATE_MASK)
CSG_ACK = (CSG_ACK & STATE_MASK) | CSG_REQ.STATE
if (mask & STATE_MASK) // evaluates to false
raise_int()
It's a bit unfortunate, because conditionally enabling IRQs
only after the polling period expires reduces the number of
interrupts directly caused by requests initiated by the CPU
since it's assumed those requests will complete relatively
quickly and avoid a sleep+interrupt+wake-up round-trip. We
could of course update CSG_ACK_IRQ_MASK at the time we update
CSG_REQ, but that means we'll still get an interrupt, so I
guess we should stick to what exists now if there's no other
option. Oh well.
>
> This is all fine if the mask is set before the request (so nothing
> broken with the current code), but we'd need a firmware change before we
> can safely do what this patch was proposing. And of course we'd have to
> get our heads round the barriers needed! ;)
:-(
next prev parent reply other threads:[~2026-05-19 14:19 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 11:37 [PATCH v2 00/11] drm/panthor: Reduce dma_fence signalling latency Boris Brezillon
2026-05-12 11:37 ` [PATCH v2 01/11] drm/panthor: Make panthor_irq::state a non-atomic field Boris Brezillon
2026-05-12 18:40 ` Chia-I Wu
2026-05-12 11:37 ` [PATCH v2 02/11] drm/panthor: Move the register accessors before the IRQ helpers Boris Brezillon
2026-05-12 18:41 ` Chia-I Wu
2026-05-12 11:37 ` [PATCH v2 03/11] drm/panthor: Replace the panthor_irq macro machinery by inline helpers Boris Brezillon
2026-05-12 18:58 ` Chia-I Wu
2026-05-13 8:03 ` Boris Brezillon
2026-05-13 16:46 ` Chia-I Wu
2026-05-12 11:37 ` [PATCH v2 04/11] drm/panthor: Extend the IRQ logic to allow fast/hard IRQ handlers Boris Brezillon
2026-05-12 19:11 ` Chia-I Wu
2026-05-13 8:09 ` Boris Brezillon
2026-05-13 17:06 ` Chia-I Wu
2026-05-13 17:30 ` Boris Brezillon
2026-05-13 18:17 ` Chia-I Wu
2026-05-18 11:54 ` Boris Brezillon
2026-05-12 11:37 ` [PATCH v2 05/11] drm/panthor: Make panthor_fw_{update,toggle}_reqs() callable from IRQ context Boris Brezillon
2026-05-12 19:29 ` Chia-I Wu
2026-05-12 11:37 ` [PATCH v2 06/11] drm/panthor: Prepare the scheduler logic for FW events in " Boris Brezillon
2026-05-12 21:04 ` Chia-I Wu
2026-05-13 8:29 ` Boris Brezillon
2026-05-13 17:47 ` Chia-I Wu
2026-05-18 13:45 ` Boris Brezillon
2026-05-18 23:33 ` Chia-I Wu
2026-05-19 7:53 ` Boris Brezillon
2026-05-19 17:16 ` Chia-I Wu
2026-05-19 18:26 ` Boris Brezillon
2026-05-19 20:45 ` Chia-I Wu
2026-05-19 21:04 ` Chia-I Wu
2026-05-20 8:09 ` Boris Brezillon
2026-05-20 22:15 ` Chia-I Wu
2026-05-12 11:37 ` [PATCH v2 07/11] drm/panthor: Automate CSG IRQ processing at group unbind time Boris Brezillon
2026-05-12 21:16 ` Chia-I Wu
2026-05-14 14:17 ` Steven Price
2026-05-12 11:37 ` [PATCH v2 08/11] drm/panthor: Automatically enable interrupts in panthor_fw_wait_acks() Boris Brezillon
2026-05-12 21:55 ` Chia-I Wu
2026-05-13 8:42 ` Boris Brezillon
2026-05-13 17:14 ` Chia-I Wu
2026-05-14 14:25 ` Steven Price
2026-05-18 8:16 ` Boris Brezillon
2026-05-19 14:19 ` Boris Brezillon [this message]
2026-05-12 11:37 ` [PATCH v2 09/11] drm/panthor: Process FW events in IRQ context Boris Brezillon
2026-05-12 22:05 ` Chia-I Wu
2026-05-12 22:09 ` Chia-I Wu
2026-05-13 8:44 ` Boris Brezillon
2026-05-14 15:23 ` Steven Price
2026-05-12 11:37 ` [PATCH v2 10/11] drm/panthor: Use the irqsave variant of spin_lock in panthor_gpu_irq_handler() Boris Brezillon
2026-05-14 15:26 ` Steven Price
2026-05-18 8:04 ` Boris Brezillon
2026-05-12 11:37 ` [PATCH v2 11/11] drm/panthor: Process GPU events in IRQ context Boris Brezillon
2026-05-12 11:50 ` Boris Brezillon
2026-05-12 22:40 ` Chia-I Wu
2026-05-13 8:54 ` Boris Brezillon
2026-05-13 18:07 ` Chia-I Wu
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=20260519161944.285178c6@fedora \
--to=boris.brezillon@collabora.com \
--cc=airlied@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox