diff options
| author | Radiy Zhambakiev <r.zhambakiev@prosoftsystems.ru> | 2026-10-02 11:36:54 +0000 |
|---|---|---|
| committer | Lee Jones <lee@kernel.org> | 2026-10-15 16:30:07 +0100 |
| commit | cffd44d2d89524e2dda6adc7b0dd59363be1c8e6 (patch) | |
| tree | bdb2e961b499c0da202712a230a8a0c5c704b21a /scripts | |
| parent | 66ed12c1e5a986bee1dc63f9bd9c7f068138a69a (diff) | |
mfd: tps65217: Use devres for IRQ domain and wake teardown
Removing the parent device used to tear the IRQ domain down in
tps65217_remove() before the MFD children are unbound: the i2c core
only releases the parent's devres after the remove callback returns,
whereas devm_mfd_add_devices() registered its own devres action which
unbinds the children. Children that requested interrupts from the
domain (e.g. tps65217-charger) therefore call free_irq() on virtual
IRQs whose descriptors have already been disposed. With
CONFIG_SPARSE_IRQ free_irq() then returns early without stopping the
threaded handler, leaking the irqaction, the IRQ kthread and a module
reference.
Register the domain teardown as a devres action right after the domain
is created instead. Devres actions are released in reverse order of
registration, so the MFD children release their IRQs first, then the
parent interrupt is freed and its thread stopped, and only then is the
domain torn down. The same ordering covers probe failure, which no
longer needs manual cleanup, and the remove callback can be dropped
entirely.
Balance the enable_irq_wake() in tps65217_irq_init() by registering
disable_irq_wake() as a devres action as well. Only do so when
enabling actually succeeded, since the parent chip may not support
setting wake-up.
Fixes: 6556bdacf646fcaa ("mfd: tps65217: Add support for IRQs")
Cc: stable@vger.kernel.org
Signed-off-by: Radiy Zhambakiev <r.zhambakiev@prosoftsystems.ru>
Link: https://patch.msgid.link/20261002113624.178588-4-r.zhambakiev@prosoftsystems.ru
Signed-off-by: Lee Jones <lee@kernel.org>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions
