From: Zhipeng Wang <[email protected]>
Thomas, apologies for the scattered irqsteer patches over the past
weeks. As you asked, this version consolidates everything related to
fixing this into one coherent series: the three separate series/patches
(including Fabio's, which conflicted with mine) are now merged here, the
overlapping runtime-PM work is reconciled, and the patches are split by
concern. No more piecemeal postings.
This series makes the i.MX IRQSTEER driver buildable as a module, along
with the pre-existing bug fixes that become reachable once the driver
can be unbound and reloaded.
What was previously scattered across three series/patches is now one
series:
- The three patches carrying Fixes: 28528fca4908 ("irqchip/imx-irqsteer:
Add multi output interrupts support") are now collected here: the
parent-IRQ-domain leak fix (devm-managed domain), Fabio's IRQ-count
validation, and the standalone chained_irq_exit() fix that was
previously sent on its own.
- Fabio Estevam's IRQ-count validation patch is folded in with his
authorship preserved; it supersedes the ordering that previously
validated the count after the domain was created.
- The clock/runtime-PM rework, the module enablement, and the irqdomain
helper cleanup are split into separate patches per Thomas' request,
rather than bundled into one change.
Patch overview:
1. Call chained_irq_exit() on the handler error path - balances the
chained IRQ enter/exit on the error path.
2. Use devm to manage the IRQ domain - devm_irq_domain_instantiate()
fixes the domain leak on the probe() sanity-check error path.
3. Validate IRQ count before creating domain (Fabio) - validate before
allocating so no domain is leaked and no dangling host_data is left.
4. Dispose of parent IRQ mappings in remove() - only the parent output
mappings need explicit disposal now that the domain is devres-owned.
5. Mask all interrupts in probe() - avoid an interrupt storm on reload
from stale CHANMASK state, without touching registers in remove()
while runtime-suspended.
6. Let devres own the clock and runtime PM - devm_clk_get_enabled() +
devm_pm_runtime_set_active_enabled(). remove() calls
pm_runtime_resume_and_get() so the devres clock teardown stays
balanced when the device was runtime-suspended (Frank Li).
7. Allow building as module - tristate Kconfig + module_platform_driver().
8. genirq/irqdomain: Add devm_irq_domain_create_linear() - a reusable
devres helper.
9. Use devm_irq_domain_create_linear() - switch the driver to the new
helper.
Changes in v5:
- Consolidate the three previously-scattered series/patches into one
series (Thomas Gleixner): the standalone chained_irq_exit() fix and
Fabio's IRQ-count validation patch are now included here.
- Fold in Fabio's IRQ-count validation patch with authorship preserved;
validate the count before creating the domain.
- remove() calls pm_runtime_resume_and_get() so the devres clock
teardown does not underflow the clock enable count when the device is
runtime-suspended (Frank Li).
- Fabio's "Convert to devm_pm_runtime_enable()" patch
(https://lore.kernel.org/lkml/[email protected]/)
is superseded by patch 6, which uses
devm_pm_runtime_set_active_enabled() (as Frank suggested) and also
lets devres own the clock; it is credited with Suggested-by.
Changes in v4:
- New patch: add devm_irq_domain_create_linear() (Frank Li).
- Use the new devm helper to manage the domain instead of hand-rolling
an err_domain label; remove() drops irq_domain_remove() (Frank Li).
- Dispose of the parent mappings only; the child mapping disposal loop
is removed (Frank Li).
- Mask interrupts in probe() only; the remove() masking, which could
touch registers while runtime-suspended, is dropped (Frank Li).
Changes in v3:
- Split the single v2 patch into separate patches.
- Add the probe() error-path fix (Sashiko AI).
- Add CHANMASK masking in probe() (Sashiko AI).
- Let devres own the clock and runtime PM via devm_clk_get_enabled()
and devm_pm_runtime_set_active_enabled() (Frank Li).
v4: https://lore.kernel.org/r/[email protected]
v3: https://lore.kernel.org/r/[email protected]
v2: https://lore.kernel.org/r/[email protected]
v1: https://lore.kernel.org/r/[email protected]
chained_irq_exit() standalone patch:
https://lore.kernel.org/all/[email protected]/
Fabio Estevam (1):
irqchip/imx-irqsteer: Validate IRQ count before creating domain
Jindong Yue (1):
irqchip/imx-irqsteer: Allow building as module
Zhipeng Wang (7):
irqchip/imx-irqsteer: Call chained_irq_exit() on the handler error
path
irqchip/imx-irqsteer: Use devm to manage the IRQ domain
irqchip/imx-irqsteer: Dispose of parent IRQ mappings in remove()
irqchip/imx-irqsteer: Mask all interrupts in probe()
irqchip/imx-irqsteer: Let devres own the clock and runtime PM
genirq/irqdomain: Add devm_irq_domain_create_linear()
irqchip/imx-irqsteer: Use devm_irq_domain_create_linear()
drivers/irqchip/Kconfig | 2 +-
drivers/irqchip/irq-imx-irqsteer.c | 70 +++++++++++++++++++-----------
include/linux/irqdomain.h | 30 +++++++++++++
3 files changed, 76 insertions(+), 26 deletions(-)
base-commit: bd5f485f3f026225b86573e559af0b7254ef4184
--
2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.