From: Zhipeng Wang <[email protected]>
This series makes the i.MX IRQSTEER driver buildable as a module.
v3 was a four-patch series: three fixes for pre-existing bugs that only
become reachable once the driver can be unbound/reloaded, followed by
the module conversion. On v3, Frank Li reviewed the unload-path fixes
and asked for three changes, all addressed here:
- The probe() error-path irq_domain leak was fixed by hand-rolling an
err_domain label. Frank suggested a devres-managed domain instead,
and to add a reusable devm_irq_domain_create_linear() helper so other
drivers benefit. Patch 1/5 adds that helper (the devres sibling of
irq_domain_create_linear()); patch 2/5 switches imx-irqsteer to it,
which fixes the leak structurally and lets remove() drop its explicit
irq_domain_remove().
- Frank questioned why remove() disposed of the mappings "twice". The
two loops disposed of two different sets: the parent output mappings
the driver created with irq_of_parse_and_map(), and the child input
mappings the domain handed out. The child mappings are freed by their
consumers and, with the domain now owned by devres, are torn down
automatically; only the parent mappings need explicit disposal. Patch
3/5 disposes of the parent mappings only, dropping the child loop.
- Frank pointed out that masking in remove() touches CHANMASK while the
device may be runtime-suspended with the clock gated. The remove()
masking is unnecessary: the next probe() quiesces the hardware before
it re-maps and unmasks the parent interrupts, which is the only window
in which a stale line could storm. Patch 4/5 therefore masks only in
probe().
Patch 5/5 then converts the driver to a module. As in v3, it lets devres
own the clock and runtime PM (devm_clk_get_enabled() +
devm_pm_runtime_set_active_enabled()).
Changes in v4:
- New patch 1/5: add devm_irq_domain_create_linear() (Frank Li).
- Patch 2/5 (was "Fix error handling path in probe()"): use the new
devm helper to manage the domain instead of hand-rolling an
err_domain label; remove() drops irq_domain_remove() (Frank Li).
- Patch 3/5 (was 2/4): dispose of the parent mappings only; the child
mapping disposal loop is removed (Frank Li).
- Patch 4/5 (was 3/4): mask interrupts in probe() only; the remove()
masking, which could touch registers while runtime-suspended, is
dropped (Frank Li).
- Patch 5/5 (was 4/4): no functional change; remove() and the probe()
error path now only dispose of the parent mappings.
v3: https://lore.kernel.org/r/[email protected]
v2: https://lore.kernel.org/r/[email protected]
v1: https://lore.kernel.org/r/[email protected]
Jindong Yue (1):
irqchip/imx-irqsteer: Allow building as module
Zhipeng Wang (4):
genirq/irqdomain: Add devm_irq_domain_create_linear()
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()
drivers/irqchip/Kconfig | 2 +-
drivers/irqchip/irq-imx-irqsteer.c | 52 +++++++++++++++++++-----------
include/linux/irqdomain.h | 30 +++++++++++++++++
3 files changed, 64 insertions(+), 20 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.