ACPI: irq: Add interrupt affinity reporting interface

Plug the irq_populate_fwspec_info() helper into the ACPI layer to offer an
interrupt affinity reporting function. This is currently only supported for
the CONFIG_ACPI_GENERIC_GSI configurations, but could later be extended to
legacy architectures if necessary.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Will Deacon <will@kernel.org>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Acked-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
Link: https://patch.msgid.link/20251020122944.3074811-3-maz@kernel.org
This commit is contained in:
Marc Zyngier 2025-10-20 13:29:19 +01:00 committed by Thomas Gleixner
parent 87b0031f7f
commit 5324fe21ba
2 changed files with 26 additions and 0 deletions

View File

@ -300,6 +300,25 @@ int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res)
} }
EXPORT_SYMBOL_GPL(acpi_irq_get); EXPORT_SYMBOL_GPL(acpi_irq_get);
const struct cpumask *acpi_irq_get_affinity(acpi_handle handle,
unsigned int index)
{
struct irq_fwspec_info info;
struct irq_fwspec fwspec;
unsigned long flags;
if (acpi_irq_parse_one(handle, index, &fwspec, &flags))
return NULL;
if (irq_populate_fwspec_info(&fwspec, &info))
return NULL;
if (!(info.flags & IRQ_FWSPEC_INFO_AFFINITY_VALID))
return NULL;
return info.affinity;
}
/** /**
* acpi_set_irq_model - Setup the GSI irqdomain information * acpi_set_irq_model - Setup the GSI irqdomain information
* @model: the value assigned to acpi_irq_model * @model: the value assigned to acpi_irq_model

View File

@ -1509,12 +1509,19 @@ static inline int acpi_parse_spcr(bool enable_earlycon, bool enable_console)
#if IS_ENABLED(CONFIG_ACPI_GENERIC_GSI) #if IS_ENABLED(CONFIG_ACPI_GENERIC_GSI)
int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res); int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res);
const struct cpumask *acpi_irq_get_affinity(acpi_handle handle,
unsigned int index);
#else #else
static inline static inline
int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res) int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res)
{ {
return -EINVAL; return -EINVAL;
} }
static inline const struct cpumask *acpi_irq_get_affinity(acpi_handle handle,
unsigned int index)
{
return NULL;
}
#endif #endif
#ifdef CONFIG_ACPI_LPIT #ifdef CONFIG_ACPI_LPIT