[PATCH v4 0/5] irqchip/imx-irqsteer: Allow building as module

[email protected]
Newsgroups dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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.