All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hansg@kernel.org>
To: Andy Shevchenko <andriy.shevchenko@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>
Cc: Andy Shevchenko <andy@kernel.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-gpio@vger.kernel.org
Subject: Re: [RFC] pinctrl: intel: Stop setting IRQF_NO_THREAD ?
Date: Tue, 5 May 2026 11:39:51 +0200	[thread overview]
Message-ID: <3df439b7-2c28-44f5-81ed-5d4747e7096f@kernel.org> (raw)
In-Reply-To: <afm0GTghqnG6JuC0@ashevche-desk.local>

Hi Andy,

On 5-May-26 11:10, Andy Shevchenko wrote:
> On Mon, Jun 23, 2025 at 09:15:17AM +0300, Mika Westerberg wrote:
>> On Sat, Jun 21, 2025 at 10:49:33AM +0200, Hans de Goede wrote:
> 
>>> While debugging the following lockdep report:
>>>
>>> =============================
>>>  [ BUG: Invalid wait context ]
>>>  ...
>>>  swapper/10/0 is trying to lock:
>>>  ffff88819c271888 (&tp->xfer_wait){....}-{3:3},
>>>   at: __wake_up (kernel/sched/wait.c:106 kernel/sched/wait.c:127)
>>>  ...
>>>  Call Trace:
>>>  <IRQ>
>>>  ...
>>>  __raw_spin_lock_irqsave (./include/linux/spinlock_api_smp.h:111)
>>>  __wake_up (kernel/sched/wait.c:106 kernel/sched/wait.c:127)
>>>  vsc_tp_isr (drivers/misc/mei/vsc-tp.c:110) mei_vsc_hw
>>>  __handle_irq_event_percpu (kernel/irq/handle.c:158)
>>>  handle_irq_event (kernel/irq/handle.c:195 kernel/irq/handle.c:210)
>>>  handle_edge_irq (kernel/irq/chip.c:833)
>>>  ...
>>>  </IRQ>
>>>
>>> I realized after a while that the root-cause here is the IRQF_NO_THREAD
>>> usage in pinctrl-intel.c. This was introduced in 1a7d1cb81eb2 ("pinctrl:
>>> intel: Prevent force threading of the interrupt handler") to avoid problems
>>> caused by using request_irq() for what should be a chained irq handler
>>> (which itself is a workaround because of a shared IRQ on some platforms).
>>>
>>> Generally speaking using IRQF_NO_THREAD is undesirable for 2 reasons:
>>>
>>> 1. It introduces extra latency on PREEMPT-RT kernels
>>> 2. Setting IRQF_NO_THREAD requires all interrupt handlers for GPIO
>>>    interrupts to use raw-spinlocks only since normal spinlocks can
>>>    sleep in PREEMPT-RT kernels and with IRQF_NO_THREAD the interrupt
>>>    handlers will run in an atomic context
>>>
>>> 2. is what is causing the lockdep report above, by simply using a
>>> wake_up(&wq_head) call in an interrupt handler, since wait-queues
>>> use normal spinlocks not raw spinlocks.
>>>
>>> I've tried just removing the IRQF_NO_THREAD flag and that fixes
>>> the lockdep report. I've also tried reproducing the problem for
>>> which the flag was added in commit 1a7d1cb81eb2 by using a kernel
>>> with CONFIG_IRQ_FORCED_THREADING and "threadirqs" on the kernel
>>> commandline. And the problem not reproduce. I'm not sure this is
>>> 100% proof that the flag is no longer necessary though ...
>>
>> Can you try also with CONFIG_PREEMPT_RT and see if that triggers the issue?
>> If not then:
>>
>>> So 2 questions:
>>>
>>> 1. Should we maybe just drop the flag ?
>>> 2. Or should we have 2 different code-paths for GPIO controllers
>>> with/without shared IRQs and use a chained-irq approach for the
>>> not shared case, to at least reduce the usage of the flag ?
>>
>> I would just drop the flag then.
> 
> Hans, any conclusion on this?

I worked around this issue in the affected driver. I have not looked
further into actually dropping IRQF_NO_THREAD from the Intel pinctrl/
GPIO drivers.

I do think that dropping IRQF_NO_THREAD from the Intel pinctrl/GPIO
drivers is probably a good idea, but this will need someone to drive
this forward including dealing with any regressions this may lead to.

Regards,

Hans




  reply	other threads:[~2026-05-05  9:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-21  8:49 [RFC] pinctrl: intel: Stop setting IRQF_NO_THREAD ? Hans de Goede
2025-06-23  6:15 ` Mika Westerberg
2026-05-05  9:10   ` Andy Shevchenko
2026-05-05  9:39     ` Hans de Goede [this message]
2026-05-05  9:43       ` Andy Shevchenko
2026-05-05  9:47         ` Hans de Goede

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=3df439b7-2c28-44f5-81ed-5d4747e7096f@kernel.org \
    --to=hansg@kernel.org \
    --cc=andriy.shevchenko@intel.com \
    --cc=andy@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.