Re: [PATCH v4 1/5] genirq/irqdomain: Add devm_irq_domain_create_linear()

Frank Li <[email protected]>
Newsgroups dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel
Message-ID <aoW8V84mQ7UZhpaC@SMW015318>
On Wed, Aug 19, 2026 at 06:05:39PM +0900, [email protected] wrote:
> From: Zhipeng Wang <[email protected]>
>
> irq_domain_create_linear() has no devres-managed counterpart, so every
> driver that wants the domain torn down automatically on unbind has to
> either open-code an irq_domain_info and call
> devm_irq_domain_instantiate() directly, or register a manual devm action.
>
> Add devm_irq_domain_create_linear() as the devres sibling of
> irq_domain_create_linear(): it builds the same linear-revmap
> irq_domain_info and hands it to devm_irq_domain_instantiate(), so the
> domain is removed when the owning device is unbound. The return
> convention matches irq_domain_create_linear() (NULL on failure) so
> existing callers can switch over without changing their error checks.
>
> Suggested-by: Frank Li <[email protected]>
> Signed-off-by: Zhipeng Wang <[email protected]>
> ---

Reviewed-by: Frank Li <[email protected]>

>  include/linux/irqdomain.h | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>
> diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
> index 73c25d40846c..b6b360cb6525 100644
> --- a/include/linux/irqdomain.h
> +++ b/include/linux/irqdomain.h
> @@ -457,6 +457,36 @@ static inline struct irq_domain *irq_domain_create_linear(struct fwnode_handle *
>  	return IS_ERR(d) ? NULL : d;
>  }
>
> +/**
> + * devm_irq_domain_create_linear - Allocate and register a linear revmap
> + *				   irq_domain tied to the device lifetime.
> + * @dev:	Device that owns the domain. The domain is removed via devres
> + *		when the device is unbound.
> + * @fwnode:	pointer to interrupt controller's FW node.
> + * @size:	Number of interrupts in the domain.
> + * @ops:	map/unmap domain callbacks
> + * @host_data:	Controller private data pointer
> + *
> + * Returns: Newly created irq_domain, or NULL on failure.
> + */
> +static inline struct irq_domain *devm_irq_domain_create_linear(struct device *dev,
> +							       struct fwnode_handle *fwnode,
> +							       unsigned int size,
> +							       const struct irq_domain_ops *ops,
> +							       void *host_data)
> +{
> +	const struct irq_domain_info info = {
> +		.fwnode		= fwnode,
> +		.size		= size,
> +		.hwirq_max	= size,
> +		.ops		= ops,
> +		.host_data	= host_data,
> +	};
> +	struct irq_domain *d = devm_irq_domain_instantiate(dev, &info);
> +
> +	return IS_ERR(d) ? NULL : d;
> +}
> +
>  static inline struct irq_domain *irq_domain_create_tree(struct fwnode_handle *fwnode,
>  							const struct irq_domain_ops *ops,
>  							void *host_data)
> --
> 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.