Re: [PATCH] drm/msm: split DPU core IRQ handler under CONFIG_PREEMPT_RT

From: Sebastian Andrzej Siewior

Date: Thu Sep 10 2026 - 02:52:44 EST


On 2026-09-09 14:22:16 [+0530], vishnu.saini@xxxxxxxxxxxxxxxx wrote:
> From: Naman S Thaker <namathak@xxxxxxxxxxxxxxxx>
>
> On a PREEMPT_RT kernel, dpu_core_irq() runs as a true hardirq handler,

*why* is this the case. The code you replaces adds some ifdefs around
request_irq() with 0 as flags. This does not make it run has hardirq.

> but it dispatches per-encoder callbacks that take sleepable locks
> (spinlock_t becomes an rt_mutex on RT, and some DRM-core locks reached
> through vblank/CRC/writeback handling are sleepable as well). Sleeping
> inside a hardirq handler is not allowed and eventually crashes the
> display, which is what happens after running GLMark2 for a while.

That is correct. That is the irq handler are threaded by default and
only non-threaded if explicitly requested.

I suggest to stick with non-threaded by default.
There is only one request_threaded_irq() as far as I can tell and this
msm_dp_display_request_irq():

| rc = devm_request_threaded_irq(&pdev->dev, dp->irq,
| msm_dp_display_irq_handler,
| msm_dp_display_irq_thread,
| IRQ_TYPE_LEVEL_HIGH,
| "dp_display_isr", dp);

and its primary handler will be threaded on PREEMPT_RT, too. So you end
up with two threads here.

Sebastian