From: sashiko-bot@kernel.org
To: "Karunika Choo" <karunika.choo@arm.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v1 26/27] drm/panthor: Prevent missed post-yield cleanup due to reset
Date: Tue, 22 Sep 2026 21:12:44 +0000 [thread overview]
Message-ID: <20260922211245.039B51F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260922204535.2850094-27-karunika.choo@arm.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] drm: scheduler deadlock on reset due to missed post-reset hooks
- [High] drm: failed reset bypasses device unplug due to AW state transition
- [High] drm: TOCTOU race in reset causes invalid MMIO access
--
commit c5cc732c23a490baff27bd3657a378e7ad65a4e4
Author: Karunika Choo <karunika.choo@arm.com>
drm/panthor: Prevent missed post-yield cleanup due to reset
With v15 GPUs, FW can yield GPU access at any point. This commit introduces
pre_reset and post_reset helpers for panthor_aw which marks a granted AW as
reset-active, aiming to prevent a race condition between reset and FW yield
from suppressing post-yield cleanup.
> diff --git a/drivers/gpu/drm/panthor/panthor_aw.c b/drivers/gpu/drm/panthor/panthor_aw.c
> index 9ebb23eadfec5..7ef13db4acf50 100644
> --- a/drivers/gpu/drm/panthor/panthor_aw.c
> +++ b/drivers/gpu/drm/panthor/panthor_aw.c
[ ... ]
> @@ -579,5 +588,36 @@ bool panthor_aw_has_gpu_access(struct panthor_device *ptdev)
[ ... ]
> +void panthor_aw_pre_reset(struct panthor_device *ptdev)
> +{
> + struct panthor_aw *aw = ptdev->aw;
> +
> + if (!aw)
> + return;
> +
> + panthor_aw_state_try_set(ptdev->aw, PANTHOR_AW_STATE_GPU_GRANTED,
> + PANTHOR_AW_STATE_RESET_ACTIVE);
> +}
> +
> +void panthor_aw_post_reset(struct panthor_device *ptdev)
> +{
> + struct panthor_aw *aw = ptdev->aw;
> +
> + if (!aw)
> + return;
> +
> + panthor_aw_state_try_set(aw, PANTHOR_AW_STATE_RESET_ACTIVE,
> + PANTHOR_AW_STATE_GPU_GRANTED);
> +
> + if (!panthor_aw_is_open(aw))
> + panthor_aw_schedule_post_yield_work(aw);
> }
> diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/panthor/panthor_device.c
> index ea35c5e1d87b4..86eb4e9a61789 100644
> --- a/drivers/gpu/drm/panthor/panthor_device.c
> +++ b/drivers/gpu/drm/panthor/panthor_device.c
> @@ -138,18 +138,27 @@ static void panthor_device_reset_work(struct work_struct *work)
> if (!drm_dev_enter(&ptdev->base, &cookie))
> return;
>
> + if (!panthor_aw_has_gpu_access(ptdev))
> + goto out_clear_pending;
[Severity: High]
If a GPU reset is scheduled (e.g., due to a job timeout), and just before
panthor_device_reset_work() runs, the firmware yields the GPU, this check
returns false and causes a jump to out_clear_pending.
Since out_clear_pending clears the reset.pending flag but skips calling
panthor_sched_post_reset(), does this leave the scheduler's tick work and
firmware watchdog permanently deadlocked, causing all jobs to hang forever
without recovery?
Additionally, does this introduce a Time-Of-Check to Time-Of-Use (TOCTOU)
race condition?
If an IRQ fires after panthor_aw_has_gpu_access(ptdev) is checked but before
panthor_aw_pre_reset(ptdev) is called, changing the state to STOPPED_IDLE,
panthor_aw_pre_reset() will silently fail to update the state since it
ignores the return value of panthor_aw_state_try_set().
Will this allow the reset sequence to continue against unpowered MMIO,
leading to bus faults because GPU access has been revoked?
> +
> panthor_sched_pre_reset(ptdev);
> + panthor_aw_pre_reset(ptdev);
> panthor_fw_pre_reset(ptdev, true);
> panthor_mmu_pre_reset(ptdev);
> +
> panthor_hw_soft_reset(ptdev);
> +
> panthor_hw_l2_power_on(ptdev);
> panthor_mmu_post_reset(ptdev);
> ret = panthor_fw_post_reset(ptdev);
> - atomic_set(&ptdev->reset.pending, 0);
> + panthor_aw_post_reset(ptdev);
> panthor_sched_post_reset(ptdev, ret != 0);
> +
> +out_clear_pending:
> + atomic_set(&ptdev->reset.pending, 0);
> drm_dev_exit(cookie);
>
> - if (ret) {
> + if (ret && panthor_aw_has_gpu_access(ptdev)) {
[Severity: High]
If the MCU fails to boot during reset, panthor_fw_post_reset() will return an
error. Then panthor_aw_post_reset() executes and, seeing the window is not
open, calls panthor_aw_schedule_post_yield_work() which transitions the AW
state to PANTHOR_AW_STATE_GPU_STOPPED.
Since the state is now GPU_STOPPED, panthor_aw_has_gpu_access() will evaluate
to false. Will this completely bypass the device unplug operation, leaving a
broken device registered and accessible?
> panthor_device_unplug(ptdev);
> drm_err(&ptdev->base, "Failed to boot MCU after reset, making device unusable.");
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922204535.2850094-1-karunika.choo@arm.com?part=26
next prev parent reply other threads:[~2026-09-22 21:12 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
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 [this message]
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=20260922211245.039B51F00893@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