dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Adrián Larumbe" <adrian.larumbe@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v6 07/16] drm/panfrost: Split subsystem init/reset from interrupt enablement
Date: Wed, 26 Aug 2026 21:34:33 +0000	[thread overview]
Message-ID: <20260826213434.2EDA61F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260826-claude-fixes-v6-7-78119af409e7@collabora.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

New issues:
- [High] Masking GPU interrupts during device teardown creates an interrupt storm deadlock if jobs are actively running.

Pre-existing issues:
- [High] Race condition during device teardown where a pending reset work item executes concurrently with or after scheduler destruction, causing a Use-After-Free and erroneously re-enabling interrupts.
--

commit a45fd41d29f7c5d2faeeffea961ca1caad97ff77
Author: Adrián Larumbe <adrian.larumbe@collabora.com>

drm/panfrost: Split subsystem init/reset from interrupt enablement

Because MMU interrupts are only enabled when the device is reset, it
happened that after DRM device registration, the very first job targeting
the tiler heap BO would always time out. The reason is the reset sequence
is only part of PM runtime resume, which is not called explicitly at driver
probe time, and an actual reset work item manually triggered after a HW
error.

> diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/panfrost/panfrost_device.c
> index 9549ddb7854a3..0cc277efb5850 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_device.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_device.c
[ ... ]
> @@ -341,6 +365,8 @@ void panfrost_device_fini(struct panfrost_device *pfdev)
>  	pm_runtime_get_sync(pfdev->base.dev);
>  	pm_runtime_disable(pfdev->base.dev);
>  
> +	panfrost_device_disable_hw(pfdev);
> +

[Severity: High]
Does calling panfrost_device_disable_hw() unconditionally on driver unload
create an interrupt storm risk?

Since jobs are not guaranteed to be stopped yet, the GPU may generate a fault
or completion interrupt in panfrost_gpu_suspend_irq() right after setting
the software flag but before masking the hardware interrupt:

drivers/gpu/drm/panfrost/panfrost_gpu.c:panfrost_gpu_suspend_irq() {
    set_bit(PANFROST_COMP_BIT_GPU, pfdev->is_suspended);
    <-- interrupt fires here
    gpu_write(pfdev, GPU_INT_MASK, 0);
}

The panfrost_gpu_irq_handler() sees is_suspended set and returns IRQ_NONE
without clearing the hardware interrupt. Because the IRQ is level-triggered,
it would re-fire immediately upon exit, leading to a soft lockup and forcing
the kernel to permanently disable the shared IRQ line.

>  	panfrost_gem_fini(pfdev);
>  	panfrost_perfcnt_fini(pfdev);
>  	panfrost_jm_fini(pfdev);
[ ... ]
> diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
> index 5016d2d53da26..087905cd347a5 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_job.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_job.c
[ ... ]
> @@ -753,8 +753,8 @@ panfrost_reset(struct panfrost_device *pfdev,
>  	for (i = 0; i < NUM_JOB_SLOTS; i++)
>  		drm_sched_start(&pfdev->js->queue[i].sched, 0);
>  
> -	/* Re-enable job interrupts now that everything has been restarted. */
> -	panfrost_jm_enable_interrupts(pfdev);
> +	/* Re-enable interrupts now that everything has been restarted. */
> +	panfrost_device_enable_int(pfdev);

[Severity: High]
This is a pre-existing issue, but does adding panfrost_device_enable_int()
here exacerbate a teardown race with the reset workqueue?

During teardown, panfrost_device_fini() disables hardware and then calls
panfrost_jm_fini(), which destroys the schedulers before synchronizing the
reset workqueue:

drivers/gpu/drm/panfrost/panfrost_job.c:panfrost_jm_fini() {
    for (j = 0; j < NUM_JOB_SLOTS; j++) {
        drm_sched_fini(&js->queue[j].sched);
    }
    cancel_work_sync(&pfdev->reset.work);
}

If a job timeout occurs before or during panfrost_device_fini(), the
concurrent reset work item can execute after scheduler destruction, causing
a use-after-free.

Furthermore, because this patch adds panfrost_device_enable_int() to the end
of the reset sequence, the racing reset work could erroneously clear the
is_suspended bits and re-enable hardware interrupts right before the clocks
are turned off in teardown.

>  
>  	dma_fence_end_signalling(cookie);
>  }

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260826-claude-fixes-v6-0-78119af409e7@collabora.com?part=7

  reply	other threads:[~2026-08-26 21:34 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-26 21:18 [PATCH v6 00/16] Collection of fixes for Panfrost: Perfcnt, RPM, refactorings Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 01/16] drm/panfrost: Move shrinker initialization and unplug one level down Adrián Larumbe
2026-08-26 21:34   ` sashiko-bot
2026-08-26 21:18 ` [PATCH v6 02/16] drm/panfrost: Move all DRM device initialisation into device_init() Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 03/16] drm/panfrost: Move lock and modparam initialisations into their subsystems Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 04/16] drm/panfrost: Move debugfs initialisation to relevant subsystems Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 05/16] drm/panfrost: Skip NULL checks for clock enable/disabling Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 06/16] drm/panfrost: Consolidate device clock management and reset Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 07/16] drm/panfrost: Split subsystem init/reset from interrupt enablement Adrián Larumbe
2026-08-26 21:34   ` sashiko-bot [this message]
2026-08-26 21:18 ` [PATCH v6 08/16] drm/panfrost: Fix PM refcnt and autosuspend issues at device probe/remove Adrián Larumbe
2026-08-26 21:31   ` sashiko-bot
2026-08-26 21:18 ` [PATCH v6 09/16] drm/panfrost: Add warning messages to fatal error conditions Adrián Larumbe
2026-08-26 21:27   ` sashiko-bot
2026-08-26 21:18 ` [PATCH v6 10/16] drm/panfrost: Add debugfs knob for manually triggering a GPU reset Adrián Larumbe
2026-08-26 21:34   ` sashiko-bot
2026-08-26 21:18 ` [PATCH v6 11/16] drm/panfrost: Move perfcnt GPU disable sequence into a helper Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 12/16] drm/panfrost: Skip cache flush/invalidate when enabling perfcnt Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 13/16] drm/panfrost: Avoid cache flush after perfcnt sample in fully coherent systems Adrián Larumbe
2026-08-26 21:36   ` sashiko-bot
2026-08-26 21:18 ` [PATCH v6 14/16] drm/panfrost: Introduce a reset lock Adrián Larumbe
2026-08-26 21:18 ` [PATCH v6 15/16] drm/panfrost: Fix races between perfcnt and reset sequence Adrián Larumbe
2026-08-26 21:35   ` sashiko-bot
2026-08-26 21:18 ` [PATCH v6 16/16] drm/panfrost: Bump driver minor to reflect new DUMP IOCTL req field Adrián Larumbe
2026-08-26 21:37   ` 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=20260826213434.2EDA61F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=adrian.larumbe@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --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