From: sashiko-bot@kernel.org
To: "Karunika Choo" <karunika.choo@arm.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v1 14/27] drm/panthor: Add AM message helpers
Date: Tue, 22 Sep 2026 20:58:01 +0000 [thread overview]
Message-ID: <20260922205802.1AC3E1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260922204535.2850094-15-karunika.choo@arm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Hardware race condition in panthor_am_msg_send() allows mailbox overwrite
- [Medium] gpu_read64() unspecified evaluation order in panthor_am_msg_read()
--
commit f795794def90956d30543ae04795a4ad4e76dd7e
Author: Karunika Choo <karunika.choo@arm.com>
drm/panthor: Add AM message helpers
This commit adds a shared helper layer for the AM_MESSAGE registers used by
v15 GPUs. It defines message IDs, register accessors, and a FIFO-backed
sending mechanism with spinlock serialization.
> diff --git a/drivers/gpu/drm/panthor/panthor_am_msg.h b/drivers/gpu/drm/panthor/panthor_am_msg.h
> new file mode 100644
> index 0000000000000..fc1e3f1051fe5
> --- /dev/null
> +++ b/drivers/gpu/drm/panthor/panthor_am_msg.h
[ ... ]
> +static inline u64 panthor_am_msg_read(struct panthor_am_msg *msg)
> +{
> + return gpu_read64(msg->iomem, AM_INCOMING_MESSAGE0);
> +}
[Severity: Medium]
Could the unspecified evaluation order of the bitwise OR in gpu_read64()
cause hardware side-effect issues here?
Looking at gpu_read64() in panthor_device_io.h:
static inline u64 gpu_read64(void __iomem *iomem, u32 reg)
{
return (gpu_read(iomem, reg) | ((u64)gpu_read(iomem, reg + 4) << 32));
}
The C standard leaves the evaluation order of bitwise OR operands unspecified.
If reading AM_INCOMING_MESSAGE0 has side effects (like clearing an interrupt
or popping a message queue), could the compiler evaluating the upper word
read before the lower word read lead to corrupted data or desynchronized
hardware state?
[ ... ]
> +static inline int panthor_am_msg_retry(struct panthor_am_msg *msg)
> +{
> + u64 message;
> +
> + guard(spinlock_irqsave)(&msg->lock);
> +
> + if (kfifo_is_empty(&msg->send_fifo))
> + return 0;
> +
> + if (panthor_am_msg_pending(msg))
> + return -EBUSY;
[Severity: High]
Is it possible for a race condition to occur with the hardware status update
here?
If the workqueue executes rapidly after a previous write,
panthor_am_msg_pending() might read as not busy due to hardware or internal
firmware propagation delays.
If the hardware status hasn't updated yet, could this cause the software to
overwrite the previous message in the mailbox?
> +
> + /* FIFO should never be empty at this point */
> + if (!kfifo_get(&msg->send_fifo, &message))
> + return -EINVAL;
> +
> + panthor_am_msg_write(msg, message);
> +
> + /* There are still messages in the FIFO, notify caller to retry again */
> + if (!kfifo_is_empty(&msg->send_fifo))
> + return -EAGAIN;
> +
> + return 0;
> +}
> +
> +static inline int panthor_am_msg_send(struct panthor_am_msg *msg, u64 message)
> +{
> + guard(spinlock_irqsave)(&msg->lock);
> +
> + /*
> + * If there already is a pending message in the FIFO or the outgoing
> + * message is still not read by the receipient, add to the FIFO.
> + */
> + if (!kfifo_is_empty(&msg->send_fifo) || panthor_am_msg_pending(msg)) {
[Severity: High]
Similar to panthor_am_msg_retry(), could back-to-back calls to
panthor_am_msg_send() fail to observe the busy state from a preceding write?
If a CPU sends a message and another CPU (or the same CPU) immediately
acquires the lock to send a second message, the hardware status might
falsely read as 0.
Could this cause the second message to overwrite the first message in the
hardware mailbox before the firmware has processed it, leading to lost
messages?
> + if (!kfifo_put(&msg->send_fifo, message))
> + return -ENOSPC;
> +
> + /*
> + * return -EBUSY to indicate to the caller to schedule work to
> + * retry sending messages in the FIFO.
> + */
> + return -EBUSY;
> + }
> +
> + /* We are free to write to AM_OUTGOING_MESSAGE */
> + panthor_am_msg_write(msg, message);
> +
> + return 0;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922204535.2850094-1-karunika.choo@arm.com?part=14
next prev parent reply other threads:[~2026-09-22 20:58 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 20:44 [PATCH v1 00/27] drm/panthor: Add Mali v15 virtualization support Karunika Choo
2026-09-22 20:44 ` [PATCH v1 01/27] drm/panthor: Ignore -EOPNOTSUPP for shader-present nvmem lookup Karunika Choo
2026-09-22 20:44 ` [PATCH v1 02/27] drm/panthor: Move register access helpers out of panthor_device.h Karunika Choo
2026-09-22 20:54 ` sashiko-bot
2026-09-22 20:44 ` [PATCH v1 03/27] drm/panthor: Parse and store GPU_ID fields Karunika Choo
2026-09-22 20:56 ` sashiko-bot
2026-09-22 20:44 ` [PATCH v1 04/27] drm/panthor: Add 64-bit GPU_ID decoding for v15 GPUs Karunika Choo
2026-09-22 21:01 ` sashiko-bot
2026-09-22 23:23 ` Deborah Brouwer
2026-09-22 20:44 ` [PATCH v1 05/27] drm/panthor: Move register base offsets to the HW description Karunika Choo
2026-09-22 20:45 ` [PATCH v1 06/27] drm/panthor: Derive MMU AS register addresses from base and stride Karunika Choo
2026-09-22 21:00 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 07/27] dt-bindings: gpu: mali-valhall-csf: Add Mali Gen5 AM compatible Karunika Choo
2026-09-28 10:02 ` Krzysztof Kozlowski
2026-09-22 20:45 ` [PATCH v1 08/27] drm/panthor: Add Mali v15 hardware support Karunika Choo
2026-09-22 20:58 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 09/27] drm/panthor: Skip devfreq when no OPP table is present Karunika Choo
2026-09-22 20:45 ` [PATCH v1 10/27] dt-bindings: gpu: panthor: Document panthor-system bindings Karunika Choo
2026-09-22 20:56 ` sashiko-bot
2026-09-28 10:05 ` Krzysztof Kozlowski
2026-09-22 20:45 ` [PATCH v1 11/27] drm/panthor: Add AM_SYSTEM platform driver Karunika Choo
2026-09-22 20:59 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 12/27] dt-bindings: gpu: panthor: Document panthor-arbitration bindings Karunika Choo
2026-09-22 20:59 ` sashiko-bot
2026-09-28 10:06 ` Krzysztof Kozlowski
2026-09-22 20:45 ` [PATCH v1 13/27] drm/panthor: Add AM_PARTITION_CONTROL support Karunika Choo
2026-09-22 20:57 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 14/27] drm/panthor: Add AM message helpers Karunika Choo
2026-09-22 20:58 ` sashiko-bot [this message]
2026-09-22 20:45 ` [PATCH v1 15/27] drm/panthor: Add AM_RESOURCE_GROUP support Karunika Choo
2026-09-22 20:56 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 16/27] drm/panthor: Add arbitration scheduler Karunika Choo
2026-09-22 21:00 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 17/27] drm/panthor: Route arbitration events Karunika Choo
2026-09-22 21:04 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 18/27] dt-bindings: gpu: panthor: Document AW assignment DT property Karunika Choo
2026-09-22 20:57 ` sashiko-bot
2026-09-28 10:06 ` Krzysztof Kozlowski
2026-09-22 20:45 ` [PATCH v1 19/27] drm/panthor: Add AW assignment tracking Karunika Choo
2026-09-22 20:45 ` [PATCH v1 20/27] drm/panthor: Handle partition control INVALID_COMMAND interrupt Karunika Choo
2026-09-22 21:04 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 21/27] drm/panthor: Request AW to yield GPU access on idle Karunika Choo
2026-09-22 21:07 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 22/27] drm/panthor: Add access-window support Karunika Choo
2026-09-22 21:05 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 23/27] drm/panthor: Synchronize HW component PM transitions Karunika Choo
2026-09-22 20:45 ` [PATCH v1 24/27] drm/panthor: Route HW component PM through access windows Karunika Choo
2026-09-22 21:06 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 25/27] drm/panthor: Tolerate access-window loss during HW waits Karunika Choo
2026-09-22 21:14 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 26/27] drm/panthor: Prevent missed post-yield cleanup due to reset Karunika Choo
2026-09-22 21:12 ` sashiko-bot
2026-09-22 20:45 ` [PATCH v1 27/27] drm/panthor: Release GPU access immediately for out-of-band grants Karunika Choo
2026-09-22 21:06 ` 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=20260922205802.1AC3E1F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=karunika.choo@arm.com \
--cc=sashiko-reviews@lists.linux.dev \
/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