From: sashiko-bot@kernel.org
To: "Karunika Choo" <karunika.choo@arm.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v1 22/27] drm/panthor: Add access-window support
Date: Tue, 22 Sep 2026 21:05:42 +0000 [thread overview]
Message-ID: <20260922210542.CB5D01F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260922204535.2850094-23-karunika.choo@arm.com>
Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [High] drm/panthor: missing AW IRQ cleanup in panthor_device_init() error path
- [High] drm/panthor: background msg_retry_work runs concurrently with suspend
- [Medium] workqueue: 100% CPU busy loop in panthor_aw_msg_retry_work
- [Medium] drm/panthor: 5-second stall during device unplug due to disabled AW IRQs
- [Medium] drm/panthor: dropped AM messages cause 5-second timeout stalls
- [Low] drm/panthor: ignored -EOPNOTSUPP in AW handshake leads to unsupported protocol usage
--
commit 3a133f64881fd3095e93885e724b739d725e86af
Author: Karunika Choo <karunika.choo@arm.com>
drm/panthor: Add access-window support
Add the VM-side access-window component for v15 GPUs. The new code
handles AM message handshakes, requests GPU access from the arbiter,
waits for the window-open interrupt, and yields access on suspend.
Split panthor_hw_init into bind device and initialize gpu_info after
panthor_aw has ensured GPU access.
> diff --git a/drivers/gpu/drm/panthor/panthor_aw.c b/drivers/gpu/drm/panthor/panthor_aw.c
> index 0000000000000..848fd64eb51b5
> --- /dev/null
> +++ b/drivers/gpu/drm/panthor/panthor_aw.c
[ ... ]
> @@ -118,17 +118,16 @@ static void panthor_aw_msg_retry_work(struct work_struct *work)
> struct panthor_aw *aw =
> container_of(work, struct panthor_aw, msg_retry_work);
> struct panthor_am_msg *msg = &aw->msg;
> int ret;
>
> ret = panthor_am_msg_retry(msg);
> if (ret == -EINVAL)
> drm_warn(&aw->ptdev->base, "Send FIFO unexpectedly empty");
>
> if (ret == -EBUSY || ret == -EAGAIN)
> queue_work(aw->wq, &aw->msg_retry_work);
[Severity: Medium]
Will this cause a busy loop pegging a CPU core? If panthor_am_msg_retry()
returns -EBUSY (because the hardware AM_OUTGOING_MESSAGE FIFO is not empty),
the workqueue immediately re-queues itself without any delay. Should this use
queue_delayed_work() or an interrupt-driven mechanism to back off while
hardware processes the request?
> }
>
> static void panthor_aw_send_msg(struct panthor_aw *aw, u64 message)
> {
> struct panthor_device *ptdev = aw->ptdev;
> int ret;
>
> ret = panthor_am_msg_send(&aw->msg, message);
> if (ret == -ENOSPC)
> drm_err(&ptdev->base, "Send FIFO is full");
[Severity: Medium]
Should we handle this error instead of silently swallowing it? If the FIFO is
full, the request is never buffered or dispatched, meaning callers will
unnecessarily stall for 5 seconds waiting for a state transition response that
will never arrive.
>
> if (ret == -EBUSY) {
> drm_dbg(&ptdev->base, "Pending messages, scheduling retry work");
> queue_work(aw->wq, &aw->msg_retry_work);
> }
> }
>
> static void panthor_aw_handshake_handle(struct panthor_aw *aw, u64 message)
> {
> struct panthor_device *ptdev = aw->ptdev;
> bool acked = AM_MSG_ACK_GET(message);
> u8 version = AM_MSG_VERSION_GET(message);
> int ret;
>
> ret = panthor_am_msg_version_validate(&aw->msg, version);
> if (ret == -EOPNOTSUPP)
> drm_warn(&ptdev->base,
> "Msg protocol version less than minimum supported (%u < %u)",
> version, AM_MSG_MIN_SUPPORTED_VERSION);
[Severity: Low]
Is it safe to ignore the -EOPNOTSUPP error and continue? Operating with an
unsupported firmware protocol version may cause undefined behavior or firmware
crashes. Should the code explicitly fail the initialization rather than
assuming it is safe to interact with an incompatible Arbiter version?
>
> if (!acked) {
> u64 reply = VM_ARB_INIT_MAKE(1, aw->msg.version);
>
> panthor_aw_send_msg(aw, reply);
[ ... ]
> @@ -303,17 +302,15 @@ int panthor_aw_init(struct panthor_device *ptdev)
>
> ret = panthor_request_aw_irq(ptdev, &aw->irq, irq, WINDOW_IRQ_MASK,
> aw->iomem + WINDOW_INT_BASE);
> if (ret)
> return ret;
>
> ret = panthor_aw_request(aw);
> if (ret)
> return ret;
[Severity: High]
Does this error path leak the active AW IRQ state? If panthor_aw_request()
fails, we return without unwinding the active IRQ or pending work queue.
In panthor_device_init(), if this function returns an error, we jump directly
to err_rpm_put, bypassing panthor_aw_unplug():
drivers/gpu/drm/panthor/panthor_device.c:panthor_device_init() {
...
ret = panthor_aw_init(ptdev);
if (ret)
goto err_rpm_put;
...
}
Leaving a shared hardware IRQ unmasked while the device may be partially
initialized or powered off could cause kernel panics, such as bus errors on
MMIO access in the handler.
>
> return 0;
> }
>
> void panthor_aw_unplug(struct panthor_device *ptdev)
> {
> struct panthor_aw *aw = ptdev->aw;
>
> if (!aw)
> return;
>
> disable_work_sync(&aw->msg_retry_work);
>
> panthor_aw_irq_suspend(&aw->irq);
[Severity: Medium]
Will this sequence cause a 5-second stall during device unplug?
In panthor_device_unplug(), panthor_aw_unplug() is called before
pm_runtime_put_sync_suspend():
drivers/gpu/drm/panthor/panthor_device.c:panthor_device_unplug() {
...
panthor_aw_unplug(ptdev);
pm_runtime_dont_use_autosuspend(ptdev->base.dev);
pm_runtime_put_sync_suspend(ptdev->base.dev);
...
}
panthor_aw_unplug() disables and masks the AW IRQ. Then, the PM suspend path
calls panthor_aw_suspend() which uses panthor_aw_state_wait() to wait for an
interrupt-driven state transition to READY. Since the IRQ is masked before
the suspend yield happens, the completion interrupt is never handled,
guaranteeing a full 5-second timeout stall.
> }
>
> int panthor_aw_resume(struct panthor_device *ptdev)
[ ... ]
> @@ -333,16 +332,15 @@ int panthor_aw_suspend(struct panthor_device *ptdev)
>
> if (atomic_read(&aw->state) == PANTHOR_AW_STATE_READY)
> goto out_irq_suspend;
>
> if (panthor_aw_state_try_set(aw, PANTHOR_AW_STATE_GPU_GRANTED,
> PANTHOR_AW_STATE_GPU_STOPPED))
> ret = panthor_aw_yield(aw);
> else
> ret = panthor_aw_state_wait(
> aw, PANTHOR_AW_STATE_READY,
> PANTHOR_AW_STATE_TRANSITION_TIMEOUT_MS);
>
> out_irq_suspend:
> panthor_aw_irq_suspend(&aw->irq);
> return ret;
[Severity: High]
Does this exit path omit flushing or canceling the background work? If a
message is sent just before or during device suspend, msg_retry_work could be
queued.
Unlike in panthor_aw_unplug(), panthor_aw_suspend() does not call
disable_work_sync(&aw->msg_retry_work) before the device transitions to a
suspended state. Since aw->wq is not allocated with WQ_FREEZABLE, the work
can run after the device's clocks and power domains are disabled, and
accessing powered-off MMIO registers would cause a bus error (kernel panic).
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922204535.2850094-1-karunika.choo@arm.com?part=22
next prev parent reply other threads:[~2026-09-22 21:05 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
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 [this message]
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=20260922210542.CB5D01F000FF@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