[PATCH v3 03/26] of/irq: Add IRQ affinity reporting interface

Marc Zyngier posted 26 patches 4 months, 2 weeks ago
There is a newer version of this series
[PATCH v3 03/26] of/irq: Add IRQ affinity reporting interface
Posted by Marc Zyngier 4 months, 2 weeks ago
Plug the irq_populate_fwspec_info() helper into the OF layer
to offer an IRQ affinity reporting function.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 drivers/of/irq.c       | 20 ++++++++++++++++++++
 include/linux/of_irq.h |  7 +++++++
 2 files changed, 27 insertions(+)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index 74aaea61de13c..9a205cb033bda 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -479,6 +479,26 @@ int of_irq_get(struct device_node *dev, int index)
 }
 EXPORT_SYMBOL_GPL(of_irq_get);
 
+const struct cpumask *of_irq_get_affinity(struct device_node *dev, int index)
+{
+	struct of_phandle_args oirq;
+	struct irq_fwspec_info info;
+	struct irq_fwspec fwspec;
+	int rc;
+
+	rc = of_irq_parse_one(dev, index, &oirq);
+	if (rc)
+		return NULL;
+
+	of_phandle_args_to_fwspec(oirq.np, oirq.args, oirq.args_count,
+				  &fwspec);
+
+	if (!irq_populate_fwspec_info(&fwspec, &info))
+		return info.affinity;
+
+	return NULL;
+}
+
 /**
  * of_irq_get_byname - Decode a node's IRQ and return it as a Linux IRQ number
  * @dev: pointer to device tree node
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h
index a480063c9cb19..721cbdbc292df 100644
--- a/include/linux/of_irq.h
+++ b/include/linux/of_irq.h
@@ -43,6 +43,8 @@ extern int of_irq_parse_one(struct device_node *device, int index,
 			  struct of_phandle_args *out_irq);
 extern int of_irq_count(struct device_node *dev);
 extern int of_irq_get(struct device_node *dev, int index);
+extern const struct cpumask *of_irq_get_affinity(struct device_node *dev,
+						      int index);
 extern int of_irq_get_byname(struct device_node *dev, const char *name);
 extern int of_irq_to_resource_table(struct device_node *dev,
 		struct resource *res, int nr_irqs);
@@ -77,6 +79,11 @@ static inline int of_irq_get_byname(struct device_node *dev, const char *name)
 {
 	return 0;
 }
+static inline const struct cpumask *of_irq_get_affinity(struct device_node *dev,
+							int index)
+{
+	return NULL;
+}
 static inline int of_irq_to_resource_table(struct device_node *dev,
 					   struct resource *res, int nr_irqs)
 {
-- 
2.47.3
Re: [PATCH v3 03/26] of/irq: Add IRQ affinity reporting interface
Posted by Jonathan Cameron 4 months ago
On Mon, 22 Sep 2025 09:28:10 +0100
Marc Zyngier <maz@kernel.org> wrote:

> Plug the irq_populate_fwspec_info() helper into the OF layer
> to offer an IRQ affinity reporting function.
> 
> Signed-off-by: Marc Zyngier <maz@kernel.org>
Trivial comment inline but I don't care that much.
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>

> ---
>  drivers/of/irq.c       | 20 ++++++++++++++++++++
>  include/linux/of_irq.h |  7 +++++++
>  2 files changed, 27 insertions(+)
> 
> diff --git a/drivers/of/irq.c b/drivers/of/irq.c
> index 74aaea61de13c..9a205cb033bda 100644
> --- a/drivers/of/irq.c
> +++ b/drivers/of/irq.c
> @@ -479,6 +479,26 @@ int of_irq_get(struct device_node *dev, int index)
>  }
>  EXPORT_SYMBOL_GPL(of_irq_get);
>  
> +const struct cpumask *of_irq_get_affinity(struct device_node *dev, int index)
> +{
> +	struct of_phandle_args oirq;
> +	struct irq_fwspec_info info;
> +	struct irq_fwspec fwspec;
> +	int rc;
> +
> +	rc = of_irq_parse_one(dev, index, &oirq);
> +	if (rc)
> +		return NULL;
> +
> +	of_phandle_args_to_fwspec(oirq.np, oirq.args, oirq.args_count,
> +				  &fwspec);
> +
> +	if (!irq_populate_fwspec_info(&fwspec, &info))
> +		return info.affinity;
My slightly picky mental consistency filter suggests that this would look
more like the ACPI version as

	if (irq_populate_fwspec_info(&fwspec, &info))
		return NULL;

	return info.affinity;

But I don't really care.

> +
> +	return NULL;
> +}
> +
Re: [PATCH v3 03/26] of/irq: Add IRQ affinity reporting interface
Posted by Marc Zyngier 3 months, 2 weeks ago
On Thu, 09 Oct 2025 17:49:59 +0100,
Jonathan Cameron <jonathan.cameron@huawei.com> wrote:
> 
> On Mon, 22 Sep 2025 09:28:10 +0100
> Marc Zyngier <maz@kernel.org> wrote:
> 
> > Plug the irq_populate_fwspec_info() helper into the OF layer
> > to offer an IRQ affinity reporting function.
> > 
> > Signed-off-by: Marc Zyngier <maz@kernel.org>
> Trivial comment inline but I don't care that much.
> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> 
> > ---
> >  drivers/of/irq.c       | 20 ++++++++++++++++++++
> >  include/linux/of_irq.h |  7 +++++++
> >  2 files changed, 27 insertions(+)
> > 
> > diff --git a/drivers/of/irq.c b/drivers/of/irq.c
> > index 74aaea61de13c..9a205cb033bda 100644
> > --- a/drivers/of/irq.c
> > +++ b/drivers/of/irq.c
> > @@ -479,6 +479,26 @@ int of_irq_get(struct device_node *dev, int index)
> >  }
> >  EXPORT_SYMBOL_GPL(of_irq_get);
> >  
> > +const struct cpumask *of_irq_get_affinity(struct device_node *dev, int index)
> > +{
> > +	struct of_phandle_args oirq;
> > +	struct irq_fwspec_info info;
> > +	struct irq_fwspec fwspec;
> > +	int rc;
> > +
> > +	rc = of_irq_parse_one(dev, index, &oirq);
> > +	if (rc)
> > +		return NULL;
> > +
> > +	of_phandle_args_to_fwspec(oirq.np, oirq.args, oirq.args_count,
> > +				  &fwspec);
> > +
> > +	if (!irq_populate_fwspec_info(&fwspec, &info))
> > +		return info.affinity;
> My slightly picky mental consistency filter suggests that this would look
> more like the ACPI version as
> 
> 	if (irq_populate_fwspec_info(&fwspec, &info))
> 		return NULL;
> 
> 	return info.affinity;
> 
> But I don't really care.

Consistency doesn't hurt. I've applied this.

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.