* [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain
@ 2025-06-26 14:48 Nam Cao
2025-06-26 14:48 ` [PATCH 01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info Nam Cao
` (12 more replies)
0 siblings, 13 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:48 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
The initial implementation of PCI/MSI interrupt domains in the hierarchical
interrupt domain model used a shortcut by providing a global PCI/MSI
domain.
This works because the PCI/MSI[X] hardware is standardized and uniform, but
it violates the basic design principle of hierarchical interrupt domains:
Each hardware block involved in the interrupt delivery chain should have a
separate interrupt domain.
For PCI/MSI[X], the interrupt controller is per PCI device and not a global
made-up entity.
Unsurprisingly, the shortcut turned out to have downsides as it does not
allow dynamic allocation of interrupt vectors after initialization and it
prevents supporting IMS on PCI. For further details, see:
https://lore.kernel.org/lkml/20221111120501.026511281@linutronix.de/
The solution is implementing per device MSI domains, this means the
entities which provide global PCI/MSI domain so far have to implement MSI
parent domain functionality instead.
Aside from that, the creation of MSI parent domains has been simplified by
new helper functions, which are not yet used by all drivers.
This series addresses this by:
- Converting the remaining global PCI/MSI domain providers to MSI parent
domains
- Converting the existing MSI parent domain implementations to the
simplified setup function
drivers/irqchip/Kconfig | 3 +
drivers/irqchip/irq-alpine-msi.c | 155 ++++++++-------------
drivers/irqchip/irq-armada-370-xp.c | 48 ++++---
drivers/irqchip/irq-bcm2712-mip.c | 20 +--
drivers/irqchip/irq-imx-mu-msi.c | 14 +-
drivers/irqchip/irq-loongson-pch-msi.c | 25 ++--
drivers/irqchip/irq-ls-scfg-msi.c | 49 +++----
drivers/irqchip/irq-riscv-imsic-platform.c | 12 +-
drivers/irqchip/irq-sg2042-msi.c | 20 ++-
include/linux/irqdomain.h | 2 +
include/linux/msi.h | 2 +
kernel/irq/irqdomain.c | 1 +
kernel/irq/msi.c | 3 +-
13 files changed, 155 insertions(+), 199 deletions(-)
--
2.39.5
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
@ 2025-06-26 14:48 ` Nam Cao
2025-06-26 14:48 ` [PATCH 02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain() Nam Cao
` (11 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:48 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Add device pointer to irq_domain_info and msi_domain_info, so that device
can be specified at domain creation.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
include/linux/irqdomain.h | 2 ++
include/linux/msi.h | 2 ++
kernel/irq/irqdomain.c | 1 +
kernel/irq/msi.c | 3 ++-
4 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index 7387d183029b7..266b5e5bb8ced 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -279,6 +279,7 @@ struct irq_domain_chip_generic_info;
* domains are added using same fwnode
* @ops: Domain operation callbacks
* @host_data: Controller private data pointer
+ * @dev: Device which creates the domain
* @dgc_info: Geneneric chip information structure pointer used to
* create generic chips for the domain if not NULL.
* @init: Function called when the domain is created.
@@ -298,6 +299,7 @@ struct irq_domain_info {
const char *name_suffix;
const struct irq_domain_ops *ops;
void *host_data;
+ struct device *dev;
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
/**
* @parent: Pointer to the parent irq domain used in a hierarchy domain
diff --git a/include/linux/msi.h b/include/linux/msi.h
index 6863540f4b717..77227d23ea84b 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -488,6 +488,7 @@ struct msi_domain_ops {
* gets initialized to the maximum software index limit
* by the domain creation code.
* @ops: The callback data structure
+ * @dev: Device which creates the domain
* @chip: Optional: associated interrupt chip
* @chip_data: Optional: associated interrupt chip data
* @handler: Optional: associated interrupt flow handler
@@ -501,6 +502,7 @@ struct msi_domain_info {
enum irq_domain_bus_token bus_token;
unsigned int hwsize;
struct msi_domain_ops *ops;
+ struct device *dev;
struct irq_chip *chip;
void *chip_data;
irq_flow_handler_t handler;
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index c8b6de09047be..4afbd3ac532fb 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -317,6 +317,7 @@ static struct irq_domain *__irq_domain_instantiate(const struct irq_domain_info
domain->flags |= info->domain_flags;
domain->exit = info->exit;
+ domain->dev = info->dev;
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
if (info->parent) {
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 9febe797a5f6a..9b09ad3f9914c 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -889,6 +889,7 @@ static struct irq_domain *__msi_create_irq_domain(struct fwnode_handle *fwnode,
if (domain) {
irq_domain_update_bus_token(domain, info->bus_token);
+ domain->dev = info->dev;
if (info->flags & MSI_FLAG_PARENT_PM_DEV)
domain->pm_dev = parent->pm_dev;
}
@@ -1051,6 +1052,7 @@ bool msi_create_device_irq_domain(struct device *dev, unsigned int domid,
bundle->info.data = domain_data;
bundle->info.chip_data = chip_data;
bundle->info.alloc_data = &bundle->alloc_info;
+ bundle->info.dev = dev;
pops = parent->msi_parent_ops;
snprintf(bundle->name, sizeof(bundle->name), "%s%s-%s",
@@ -1089,7 +1091,6 @@ bool msi_create_device_irq_domain(struct device *dev, unsigned int domid,
if (!domain)
return false;
- domain->dev = dev;
dev->msi.data->__domains[domid].domain = domain;
if (msi_domain_prepare_irqs(domain, dev, hwsize, &bundle->alloc_info)) {
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain()
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
2025-06-26 14:48 ` [PATCH 01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info Nam Cao
@ 2025-06-26 14:48 ` Nam Cao
2025-06-26 16:12 ` Nam Cao
2025-06-26 14:49 ` [PATCH 03/12] irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper Nam Cao
` (10 subsequent siblings)
12 siblings, 1 reply; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:48 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
From: Thomas Gleixner <tglx@linutronix.de>
Switch to use the concise helper to create an MSI parent domain.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <tglx@linutronix.de>
---
drivers/irqchip/irq-bcm2712-mip.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/irqchip/irq-bcm2712-mip.c b/drivers/irqchip/irq-bcm2712-mip.c
index 63de5ef6cf2db..9bd7bc0bf6d59 100644
--- a/drivers/irqchip/irq-bcm2712-mip.c
+++ b/drivers/irqchip/irq-bcm2712-mip.c
@@ -172,18 +172,18 @@ static const struct msi_parent_ops mip_msi_parent_ops = {
static int mip_init_domains(struct mip_priv *mip, struct device_node *np)
{
- struct irq_domain *middle;
-
- middle = irq_domain_create_hierarchy(mip->parent, 0, mip->num_msis, of_fwnode_handle(np),
- &mip_middle_domain_ops, mip);
- if (!middle)
+ struct irq_domain_info info = {
+ .fwnode = of_fwnode_handle(np),
+ .ops = &mip_middle_domain_ops,
+ .host_data = mip,
+ .size = mip->num_msis,
+ .parent = mip->parent,
+ .dev = mip->dev,
+ };
+
+ if (!msi_create_parent_irq_domain(&info, &mip_msi_parent_ops))
return -ENOMEM;
- irq_domain_update_bus_token(middle, DOMAIN_BUS_GENERIC_MSI);
- middle->dev = mip->dev;
- middle->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- middle->msi_parent_ops = &mip_msi_parent_ops;
-
/*
* All MSI-X unmasked for the host, masked for the VPU, and edge-triggered.
*/
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 03/12] irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
2025-06-26 14:48 ` [PATCH 01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info Nam Cao
2025-06-26 14:48 ` [PATCH 02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain() Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 04/12] irqchip/imx-mu-msi: " Nam Cao
` (9 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
From: Marc Zyngier <maz@kernel.org>
Now that we have a concise helper to create an MSI parent domain,
switch the RISC-V letter soup over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241204124549.607054-6-maz@kernel.org
---
Cc: Anup Patel <anup@brainfault.org>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: linux-riscv@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
drivers/irqchip/irq-riscv-imsic-platform.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-riscv-imsic-platform.c b/drivers/irqchip/irq-riscv-imsic-platform.c
index 1b9fbfce95816..74a2a28f94030 100644
--- a/drivers/irqchip/irq-riscv-imsic-platform.c
+++ b/drivers/irqchip/irq-riscv-imsic-platform.c
@@ -307,6 +307,11 @@ static const struct msi_parent_ops imsic_msi_parent_ops = {
int imsic_irqdomain_init(void)
{
+ struct irq_domain_info info = {
+ .fwnode = imsic->fwnode,
+ .ops = &imsic_base_domain_ops,
+ .host_data = imsic,
+ };
struct imsic_global_config *global;
if (!imsic || !imsic->fwnode) {
@@ -320,16 +325,11 @@ int imsic_irqdomain_init(void)
}
/* Create Base IRQ domain */
- imsic->base_domain = irq_domain_create_tree(imsic->fwnode,
- &imsic_base_domain_ops, imsic);
+ imsic->base_domain = msi_create_parent_irq_domain(&info, &imsic_msi_parent_ops);
if (!imsic->base_domain) {
pr_err("%pfwP: failed to create IMSIC base domain\n", imsic->fwnode);
return -ENOMEM;
}
- imsic->base_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- imsic->base_domain->msi_parent_ops = &imsic_msi_parent_ops;
-
- irq_domain_update_bus_token(imsic->base_domain, DOMAIN_BUS_NEXUS);
global = &imsic->global;
pr_info("%pfwP: hart-index-bits: %d, guest-index-bits: %d\n",
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 04/12] irqchip/imx-mu-msi: Convert to msi_create_parent_irq_domain() helper
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (2 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 03/12] irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 16:08 ` Frank Li
2025-06-26 14:49 ` [PATCH 05/12] irqchip/loongson-pch-msi.c: Switch to msi_create_parent_irq_domain() Nam Cao
` (8 subsequent siblings)
12 siblings, 1 reply; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
From: Marc Zyngier <maz@kernel.org>
Now that we have a concise helper to create an MSI parent domain,
switch the IMX letter soup over to that.
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241204124549.607054-7-maz@kernel.org
---
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: imx@lists.linux.dev
Cc: linux-arm-kernel@lists.infradead.org
---
drivers/irqchip/irq-imx-mu-msi.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/irqchip/irq-imx-mu-msi.c b/drivers/irqchip/irq-imx-mu-msi.c
index 137da1927d144..d2a4e8a61a42b 100644
--- a/drivers/irqchip/irq-imx-mu-msi.c
+++ b/drivers/irqchip/irq-imx-mu-msi.c
@@ -223,21 +223,21 @@ static const struct msi_parent_ops imx_mu_msi_parent_ops = {
static int imx_mu_msi_domains_init(struct imx_mu_msi *msi_data, struct device *dev)
{
- struct fwnode_handle *fwnodes = dev_fwnode(dev);
+ struct irq_domain_info info = {
+ .ops = &imx_mu_msi_domain_ops,
+ .fwnode = dev_fwnode(dev),
+ .size = IMX_MU_CHANS,
+ .host_data = msi_data,
+ };
struct irq_domain *parent;
/* Initialize MSI domain parent */
- parent = irq_domain_create_linear(fwnodes, IMX_MU_CHANS,
- &imx_mu_msi_domain_ops, msi_data);
+ parent = msi_create_parent_irq_domain(&info, &imx_mu_msi_parent_ops);
if (!parent) {
dev_err(dev, "failed to create IRQ domain\n");
return -ENOMEM;
}
-
- irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS);
parent->dev = parent->pm_dev = dev;
- parent->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- parent->msi_parent_ops = &imx_mu_msi_parent_ops;
return 0;
}
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 05/12] irqchip/loongson-pch-msi.c: Switch to msi_create_parent_irq_domain()
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (3 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 04/12] irqchip/imx-mu-msi: " Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 06/12] irqchip/sg2042-msi: " Nam Cao
` (7 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Switch to use the concise helper to create an MSI parent domain.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: linux-mips@vger.kernel.org
---
drivers/irqchip/irq-loongson-pch-msi.c | 25 ++++++++++---------------
1 file changed, 10 insertions(+), 15 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index a0257c7bef108..4aedc9b90ff77 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -153,26 +153,21 @@ static struct msi_parent_ops pch_msi_parent_ops = {
.init_dev_msi_info = msi_lib_init_dev_msi_info,
};
-static int pch_msi_init_domains(struct pch_msi_data *priv,
- struct irq_domain *parent,
+static int pch_msi_init_domains(struct pch_msi_data *priv, struct irq_domain *parent,
struct fwnode_handle *domain_handle)
{
- struct irq_domain *middle_domain;
-
- middle_domain = irq_domain_create_hierarchy(parent, 0, priv->num_irqs,
- domain_handle,
- &pch_msi_middle_domain_ops,
- priv);
- if (!middle_domain) {
+ struct irq_domain_info info = {
+ .ops = &pch_msi_middle_domain_ops,
+ .size = priv->num_irqs,
+ .parent = parent,
+ .host_data = priv,
+ .fwnode = domain_handle,
+ };
+
+ if (!msi_create_parent_irq_domain(&info, &pch_msi_parent_ops)) {
pr_err("Failed to create the MSI middle domain\n");
return -ENOMEM;
}
-
- irq_domain_update_bus_token(middle_domain, DOMAIN_BUS_NEXUS);
-
- middle_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- middle_domain->msi_parent_ops = &pch_msi_parent_ops;
-
return 0;
}
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 06/12] irqchip/sg2042-msi: Switch to msi_create_parent_irq_domain()
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (4 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 05/12] irqchip/loongson-pch-msi.c: Switch to msi_create_parent_irq_domain() Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-28 2:01 ` Chen Wang
2025-06-26 14:49 ` [PATCH 07/12] irqchip/alpine-msi: Clean up whitespace style Nam Cao
` (6 subsequent siblings)
12 siblings, 1 reply; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Switch to use the concise helper to create an MSI parent domain.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
drivers/irqchip/irq-sg2042-msi.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/irqchip/irq-sg2042-msi.c b/drivers/irqchip/irq-sg2042-msi.c
index af16bc5a3c8b5..bcfddc51bc6a1 100644
--- a/drivers/irqchip/irq-sg2042-msi.c
+++ b/drivers/irqchip/irq-sg2042-msi.c
@@ -219,20 +219,18 @@ static const struct msi_parent_ops sg2044_msi_parent_ops = {
static int sg204x_msi_init_domains(struct sg204x_msi_chipdata *data,
struct irq_domain *plic_domain, struct device *dev)
{
- struct fwnode_handle *fwnode = dev_fwnode(dev);
- struct irq_domain *middle_domain;
-
- middle_domain = irq_domain_create_hierarchy(plic_domain, 0, data->num_irqs, fwnode,
- &sg204x_msi_middle_domain_ops, data);
- if (!middle_domain) {
+ struct irq_domain_info info = {
+ .ops = &sg204x_msi_middle_domain_ops,
+ .parent = plic_domain,
+ .size = data->num_irqs,
+ .fwnode = dev_fwnode(dev),
+ .host_data = data,
+ };
+
+ if (!msi_create_parent_irq_domain(&info, data->chip_info->parent_ops)) {
pr_err("Failed to create the MSI middle domain\n");
return -ENOMEM;
}
-
- irq_domain_update_bus_token(middle_domain, DOMAIN_BUS_NEXUS);
-
- middle_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
- middle_domain->msi_parent_ops = data->chip_info->parent_ops;
return 0;
}
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 07/12] irqchip/alpine-msi: Clean up whitespace style
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (5 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 06/12] irqchip/sg2042-msi: " Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 08/12] irqchip/alpine-msi: Convert to lock guards Nam Cao
` (5 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Tidy up the code style. Whitespace changes only.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Antoine Tenart <atenart@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
---
drivers/irqchip/irq-alpine-msi.c | 37 +++++++++++---------------------
1 file changed, 13 insertions(+), 24 deletions(-)
diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c
index a5289dc26dca0..7e379a6985a6a 100644
--- a/drivers/irqchip/irq-alpine-msi.c
+++ b/drivers/irqchip/irq-alpine-msi.c
@@ -29,11 +29,11 @@
#define ALPINE_MSIX_SPI_TARGET_CLUSTER0 BIT(16)
struct alpine_msix_data {
- spinlock_t msi_map_lock;
- phys_addr_t addr;
- u32 spi_first; /* The SGI number that MSIs start */
- u32 num_spis; /* The number of SGIs for MSIs */
- unsigned long *msi_map;
+ spinlock_t msi_map_lock;
+ phys_addr_t addr;
+ u32 spi_first; /* The SGI number that MSIs start */
+ u32 num_spis; /* The number of SGIs for MSIs */
+ unsigned long *msi_map;
};
static void alpine_msix_mask_msi_irq(struct irq_data *d)
@@ -76,8 +76,7 @@ static int alpine_msix_allocate_sgi(struct alpine_msix_data *priv, int num_req)
return priv->spi_first + first;
}
-static void alpine_msix_free_sgi(struct alpine_msix_data *priv, unsigned sgi,
- int num_req)
+static void alpine_msix_free_sgi(struct alpine_msix_data *priv, unsigned int sgi, int num_req)
{
int first = sgi - priv->spi_first;
@@ -88,14 +87,12 @@ static void alpine_msix_free_sgi(struct alpine_msix_data *priv, unsigned sgi,
spin_unlock(&priv->msi_map_lock);
}
-static void alpine_msix_compose_msi_msg(struct irq_data *data,
- struct msi_msg *msg)
+static void alpine_msix_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{
struct alpine_msix_data *priv = irq_data_get_irq_chip_data(data);
phys_addr_t msg_addr = priv->addr;
msg_addr |= (data->hwirq << 3);
-
msg->address_hi = upper_32_bits(msg_addr);
msg->address_lo = lower_32_bits(msg_addr);
msg->data = 0;
@@ -116,8 +113,7 @@ static struct irq_chip middle_irq_chip = {
.irq_compose_msi_msg = alpine_msix_compose_msi_msg,
};
-static int alpine_msix_gic_domain_alloc(struct irq_domain *domain,
- unsigned int virq, int sgi)
+static int alpine_msix_gic_domain_alloc(struct irq_domain *domain, unsigned int virq, int sgi)
{
struct irq_fwspec fwspec;
struct irq_data *d;
@@ -138,12 +134,10 @@ static int alpine_msix_gic_domain_alloc(struct irq_domain *domain,
d = irq_domain_get_irq_data(domain->parent, virq);
d->chip->irq_set_type(d, IRQ_TYPE_EDGE_RISING);
-
return 0;
}
-static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,
- unsigned int virq,
+static int alpine_msix_middle_domain_alloc(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs, void *args)
{
struct alpine_msix_data *priv = domain->host_data;
@@ -161,7 +155,6 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,
irq_domain_set_hwirq_and_chip(domain, virq + i, sgi + i,
&middle_irq_chip, priv);
}
-
return 0;
err_sgi:
@@ -170,8 +163,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,
return err;
}
-static void alpine_msix_middle_domain_free(struct irq_domain *domain,
- unsigned int virq,
+static void alpine_msix_middle_domain_free(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs)
{
struct irq_data *d = irq_domain_get_irq_data(domain, virq);
@@ -186,8 +178,7 @@ static const struct irq_domain_ops alpine_msix_middle_domain_ops = {
.free = alpine_msix_middle_domain_free,
};
-static int alpine_msix_init_domains(struct alpine_msix_data *priv,
- struct device_node *node)
+static int alpine_msix_init_domains(struct alpine_msix_data *priv, struct device_node *node)
{
struct irq_domain *middle_domain, *msi_domain, *gic_domain;
struct device_node *gic_node;
@@ -224,8 +215,7 @@ static int alpine_msix_init_domains(struct alpine_msix_data *priv,
return 0;
}
-static int alpine_msix_init(struct device_node *node,
- struct device_node *parent)
+static int alpine_msix_init(struct device_node *node, struct device_node *parent)
{
struct alpine_msix_data *priv;
struct resource res;
@@ -271,8 +261,7 @@ static int alpine_msix_init(struct device_node *node,
goto err_priv;
}
- pr_debug("Registering %d msixs, starting at %d\n",
- priv->num_spis, priv->spi_first);
+ pr_debug("Registering %d msixs, starting at %d\n", priv->num_spis, priv->spi_first);
ret = alpine_msix_init_domains(priv, node);
if (ret)
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 08/12] irqchip/alpine-msi: Convert to lock guards
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (6 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 07/12] irqchip/alpine-msi: Clean up whitespace style Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 09/12] irqchip/alpine-msi: Convert to __free Nam Cao
` (4 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Convert lock/unlock pairs to guards and tidy up the code.
No functional change.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Antoine Tenart <atenart@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
---
drivers/irqchip/irq-alpine-msi.c | 18 ++++--------------
1 file changed, 4 insertions(+), 14 deletions(-)
diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c
index 7e379a6985a6a..cf188e5feefc0 100644
--- a/drivers/irqchip/irq-alpine-msi.c
+++ b/drivers/irqchip/irq-alpine-msi.c
@@ -60,19 +60,12 @@ static int alpine_msix_allocate_sgi(struct alpine_msix_data *priv, int num_req)
{
int first;
- spin_lock(&priv->msi_map_lock);
-
- first = bitmap_find_next_zero_area(priv->msi_map, priv->num_spis, 0,
- num_req, 0);
- if (first >= priv->num_spis) {
- spin_unlock(&priv->msi_map_lock);
+ guard(spinlock)(&priv->msi_map_lock);
+ first = bitmap_find_next_zero_area(priv->msi_map, priv->num_spis, 0, num_req, 0);
+ if (first >= priv->num_spis)
return -ENOSPC;
- }
bitmap_set(priv->msi_map, first, num_req);
-
- spin_unlock(&priv->msi_map_lock);
-
return priv->spi_first + first;
}
@@ -80,11 +73,8 @@ static void alpine_msix_free_sgi(struct alpine_msix_data *priv, unsigned int sgi
{
int first = sgi - priv->spi_first;
- spin_lock(&priv->msi_map_lock);
-
+ guard(spinlock)(&priv->msi_map_lock);
bitmap_clear(priv->msi_map, first, num_req);
-
- spin_unlock(&priv->msi_map_lock);
}
static void alpine_msix_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 09/12] irqchip/alpine-msi: Convert to __free
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (7 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 08/12] irqchip/alpine-msi: Convert to lock guards Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 10/12] irqchip/alpine-msi: Switch to msi_create_parent_irq_domain() Nam Cao
` (3 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Tidy up the code with __free. No functional change.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Antoine Tenart <atenart@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
---
drivers/irqchip/irq-alpine-msi.c | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c
index cf188e5feefc0..43d6db290138a 100644
--- a/drivers/irqchip/irq-alpine-msi.c
+++ b/drivers/irqchip/irq-alpine-msi.c
@@ -207,11 +207,10 @@ static int alpine_msix_init_domains(struct alpine_msix_data *priv, struct device
static int alpine_msix_init(struct device_node *node, struct device_node *parent)
{
- struct alpine_msix_data *priv;
+ struct alpine_msix_data *priv __free(kfree) = kzalloc(sizeof(*priv), GFP_KERNEL);
struct resource res;
int ret;
- priv = kzalloc(sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
@@ -220,7 +219,7 @@ static int alpine_msix_init(struct device_node *node, struct device_node *parent
ret = of_address_to_resource(node, 0, &res);
if (ret) {
pr_err("Failed to allocate resource\n");
- goto err_priv;
+ return ret;
}
/*
@@ -235,34 +234,28 @@ static int alpine_msix_init(struct device_node *node, struct device_node *parent
if (of_property_read_u32(node, "al,msi-base-spi", &priv->spi_first)) {
pr_err("Unable to parse MSI base\n");
- ret = -EINVAL;
- goto err_priv;
+ return -EINVAL;
}
if (of_property_read_u32(node, "al,msi-num-spis", &priv->num_spis)) {
pr_err("Unable to parse MSI numbers\n");
- ret = -EINVAL;
- goto err_priv;
+ return -EINVAL;
}
- priv->msi_map = bitmap_zalloc(priv->num_spis, GFP_KERNEL);
- if (!priv->msi_map) {
- ret = -ENOMEM;
- goto err_priv;
- }
+ unsigned long *msi_map __free(kfree) = bitmap_zalloc(priv->num_spis, GFP_KERNEL);
+
+ if (!msi_map)
+ return -ENOMEM;
+ priv->msi_map = msi_map;
pr_debug("Registering %d msixs, starting at %d\n", priv->num_spis, priv->spi_first);
ret = alpine_msix_init_domains(priv, node);
if (ret)
- goto err_map;
+ return ret;
+ retain_and_null_ptr(priv);
+ retain_and_null_ptr(msi_map);
return 0;
-
-err_map:
- bitmap_free(priv->msi_map);
-err_priv:
- kfree(priv);
- return ret;
}
IRQCHIP_DECLARE(alpine_msix, "al,alpine-msix", alpine_msix_init);
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 10/12] irqchip/alpine-msi: Switch to msi_create_parent_irq_domain()
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (8 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 09/12] irqchip/alpine-msi: Convert to __free Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 11/12] irqchip/armada-370-xp: " Nam Cao
` (2 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
From: Thomas Gleixner <tglx@linutronix.de>
Move away from the legacy MSI domain setup, switch to use
msi_create_parent_irq_domain().
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Antoine Tenart <atenart@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
---
drivers/irqchip/Kconfig | 1 +
drivers/irqchip/irq-alpine-msi.c | 69 +++++++++++++-------------------
2 files changed, 28 insertions(+), 42 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 0d196e4471426..dbdb988e4f7e0 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -85,6 +85,7 @@ config ALPINE_MSI
bool
depends on PCI
select PCI_MSI
+ select IRQ_MSI_LIB
select GENERIC_IRQ_CHIP
config AL_FIC
diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c
index 43d6db290138a..159d9ec7c0ddc 100644
--- a/drivers/irqchip/irq-alpine-msi.c
+++ b/drivers/irqchip/irq-alpine-msi.c
@@ -14,6 +14,7 @@
#include <linux/irqchip.h>
#include <linux/irqchip/arm-gic.h>
+#include <linux/irqchip/irq-msi-lib.h>
#include <linux/msi.h>
#include <linux/of.h>
#include <linux/of_address.h>
@@ -36,26 +37,6 @@ struct alpine_msix_data {
unsigned long *msi_map;
};
-static void alpine_msix_mask_msi_irq(struct irq_data *d)
-{
- pci_msi_mask_irq(d);
- irq_chip_mask_parent(d);
-}
-
-static void alpine_msix_unmask_msi_irq(struct irq_data *d)
-{
- pci_msi_unmask_irq(d);
- irq_chip_unmask_parent(d);
-}
-
-static struct irq_chip alpine_msix_irq_chip = {
- .name = "MSIx",
- .irq_mask = alpine_msix_mask_msi_irq,
- .irq_unmask = alpine_msix_unmask_msi_irq,
- .irq_eoi = irq_chip_eoi_parent,
- .irq_set_affinity = irq_chip_set_affinity_parent,
-};
-
static int alpine_msix_allocate_sgi(struct alpine_msix_data *priv, int num_req)
{
int first;
@@ -88,12 +69,6 @@ static void alpine_msix_compose_msi_msg(struct irq_data *data, struct msi_msg *m
msg->data = 0;
}
-static struct msi_domain_info alpine_msix_domain_info = {
- .flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
- MSI_FLAG_PCI_MSIX,
- .chip = &alpine_msix_irq_chip,
-};
-
static struct irq_chip middle_irq_chip = {
.name = "alpine_msix_middle",
.irq_mask = irq_chip_mask_parent,
@@ -164,13 +139,35 @@ static void alpine_msix_middle_domain_free(struct irq_domain *domain, unsigned i
}
static const struct irq_domain_ops alpine_msix_middle_domain_ops = {
+ .select = msi_lib_irq_domain_select,
.alloc = alpine_msix_middle_domain_alloc,
.free = alpine_msix_middle_domain_free,
};
+#define ALPINE_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
+ MSI_FLAG_USE_DEF_CHIP_OPS | \
+ MSI_FLAG_PCI_MSI_MASK_PARENT)
+
+#define ALPINE_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \
+ MSI_FLAG_PCI_MSIX)
+
+static struct msi_parent_ops alpine_msi_parent_ops = {
+ .supported_flags = ALPINE_MSI_FLAGS_SUPPORTED,
+ .required_flags = ALPINE_MSI_FLAGS_REQUIRED,
+ .chip_flags = MSI_CHIP_FLAG_SET_EOI,
+ .bus_select_token = DOMAIN_BUS_NEXUS,
+ .bus_select_mask = MATCH_PCI_MSI,
+ .prefix = "ALPINE-",
+ .init_dev_msi_info = msi_lib_init_dev_msi_info,
+};
+
static int alpine_msix_init_domains(struct alpine_msix_data *priv, struct device_node *node)
{
- struct irq_domain *middle_domain, *msi_domain, *gic_domain;
+ struct irq_domain_info info = {
+ .fwnode = of_fwnode_handle(node),
+ .ops = &alpine_msix_middle_domain_ops,
+ .host_data = priv,
+ };
struct device_node *gic_node;
gic_node = of_irq_find_parent(node);
@@ -179,29 +176,17 @@ static int alpine_msix_init_domains(struct alpine_msix_data *priv, struct device
return -ENODEV;
}
- gic_domain = irq_find_host(gic_node);
+ info.parent = irq_find_host(gic_node);
of_node_put(gic_node);
- if (!gic_domain) {
+ if (!info.parent) {
pr_err("Failed to find the GIC domain\n");
return -ENXIO;
}
- middle_domain = irq_domain_create_hierarchy(gic_domain, 0, 0, NULL,
- &alpine_msix_middle_domain_ops, priv);
- if (!middle_domain) {
- pr_err("Failed to create the MSIX middle domain\n");
- return -ENOMEM;
- }
-
- msi_domain = pci_msi_create_irq_domain(of_fwnode_handle(node),
- &alpine_msix_domain_info,
- middle_domain);
- if (!msi_domain) {
+ if (!msi_create_parent_irq_domain(&info, &alpine_msi_parent_ops)) {
pr_err("Failed to create MSI domain\n");
- irq_domain_remove(middle_domain);
return -ENOMEM;
}
-
return 0;
}
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 11/12] irqchip/armada-370-xp: Switch to msi_create_parent_irq_domain()
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (9 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 10/12] irqchip/alpine-msi: Switch to msi_create_parent_irq_domain() Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-06-26 14:49 ` [PATCH 12/12] irqchip/ls-scfg-msi: Switch to use msi_create_parent_irq_domain() Nam Cao
2025-08-10 21:12 ` [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain patchwork-bot+linux-riscv
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
Move away from the legacy MSI domain setup, switch to use
msi_create_parent_irq_domain().
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@bootlin.com>
Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
---
drivers/irqchip/Kconfig | 1 +
drivers/irqchip/irq-armada-370-xp.c | 48 +++++++++++++++--------------
2 files changed, 26 insertions(+), 23 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index dbdb988e4f7e0..afd7bae30a788 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -79,6 +79,7 @@ config ARMADA_370_XP_IRQ
bool
select GENERIC_IRQ_CHIP
select PCI_MSI if PCI
+ select IRQ_MSI_LIB if PCI
select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP
config ALPINE_MSI
diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
index 67b672a788626..a44c49e985b75 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -20,6 +20,7 @@
#include <linux/interrupt.h>
#include <linux/irqchip.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/irqchip/irq-msi-lib.h>
#include <linux/cpu.h>
#include <linux/io.h>
#include <linux/of_address.h>
@@ -156,7 +157,6 @@
* @parent_irq: parent IRQ if MPIC is not top-level interrupt controller
* @domain: MPIC main interrupt domain
* @ipi_domain: IPI domain
- * @msi_domain: MSI domain
* @msi_inner_domain: MSI inner domain
* @msi_used: bitmap of used MSI numbers
* @msi_lock: mutex serializing access to @msi_used
@@ -176,7 +176,6 @@ struct mpic {
struct irq_domain *ipi_domain;
#endif
#ifdef CONFIG_PCI_MSI
- struct irq_domain *msi_domain;
struct irq_domain *msi_inner_domain;
DECLARE_BITMAP(msi_used, PCI_MSI_FULL_DOORBELL_NR);
struct mutex msi_lock;
@@ -234,18 +233,6 @@ static void mpic_irq_unmask(struct irq_data *d)
#ifdef CONFIG_PCI_MSI
-static struct irq_chip mpic_msi_irq_chip = {
- .name = "MPIC MSI",
- .irq_mask = pci_msi_mask_irq,
- .irq_unmask = pci_msi_unmask_irq,
-};
-
-static struct msi_domain_info mpic_msi_domain_info = {
- .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
- MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX),
- .chip = &mpic_msi_irq_chip,
-};
-
static void mpic_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
{
unsigned int cpu = cpumask_first(irq_data_get_effective_affinity_mask(d));
@@ -314,6 +301,7 @@ static void mpic_msi_free(struct irq_domain *domain, unsigned int virq, unsigned
}
static const struct irq_domain_ops mpic_msi_domain_ops = {
+ .select = msi_lib_irq_domain_select,
.alloc = mpic_msi_alloc,
.free = mpic_msi_free,
};
@@ -331,6 +319,21 @@ static void mpic_msi_reenable_percpu(struct mpic *mpic)
writel(1, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
}
+#define MPIC_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
+ MSI_FLAG_USE_DEF_CHIP_OPS)
+#define MPIC_MSI_FLAGS_SUPPORTED (MSI_FLAG_MULTI_PCI_MSI | \
+ MSI_FLAG_PCI_MSIX | \
+ MSI_GENERIC_FLAGS_MASK)
+
+static const struct msi_parent_ops mpic_msi_parent_ops = {
+ .required_flags = MPIC_MSI_FLAGS_REQUIRED,
+ .supported_flags = MPIC_MSI_FLAGS_SUPPORTED,
+ .bus_select_token = DOMAIN_BUS_NEXUS,
+ .bus_select_mask = MATCH_PCI_MSI,
+ .prefix = "MPIC-",
+ .init_dev_msi_info = msi_lib_init_dev_msi_info,
+};
+
static int __init mpic_msi_init(struct mpic *mpic, struct device_node *node,
phys_addr_t main_int_phys_base)
{
@@ -348,17 +351,16 @@ static int __init mpic_msi_init(struct mpic *mpic, struct device_node *node,
mpic->msi_doorbell_mask = PCI_MSI_FULL_DOORBELL_MASK;
}
- mpic->msi_inner_domain = irq_domain_create_linear(NULL, mpic->msi_doorbell_size,
- &mpic_msi_domain_ops, mpic);
- if (!mpic->msi_inner_domain)
- return -ENOMEM;
+ struct irq_domain_info info = {
+ .fwnode = of_fwnode_handle(node),
+ .ops = &mpic_msi_domain_ops,
+ .host_data = mpic,
+ .size = mpic->msi_doorbell_size,
+ };
- mpic->msi_domain = pci_msi_create_irq_domain(of_fwnode_handle(node), &mpic_msi_domain_info,
- mpic->msi_inner_domain);
- if (!mpic->msi_domain) {
- irq_domain_remove(mpic->msi_inner_domain);
+ mpic->msi_inner_domain = msi_create_parent_irq_domain(&info, &mpic_msi_parent_ops);
+ if (!mpic->msi_inner_domain)
return -ENOMEM;
- }
mpic_msi_reenable_percpu(mpic);
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 12/12] irqchip/ls-scfg-msi: Switch to use msi_create_parent_irq_domain()
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (10 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 11/12] irqchip/armada-370-xp: " Nam Cao
@ 2025-06-26 14:49 ` Nam Cao
2025-08-10 21:12 ` [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain patchwork-bot+linux-riscv
12 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 14:49 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
Cc: Nam Cao
Move away from the legacy MSI domain setup, switch to use
msi_create_parent_irq_domain().
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
drivers/irqchip/Kconfig | 1 +
drivers/irqchip/irq-ls-scfg-msi.c | 49 ++++++++++++++-----------------
2 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index afd7bae30a788..f1aaf3a0fcdb0 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -436,6 +436,7 @@ config LS_SCFG_MSI
def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE
select IRQ_MSI_IOMMU
depends on PCI_MSI
+ select IRQ_MSI_LIB
config PARTITION_PERCPU
bool
diff --git a/drivers/irqchip/irq-ls-scfg-msi.c b/drivers/irqchip/irq-ls-scfg-msi.c
index 84bc5e4b47cf5..7eca751d6548b 100644
--- a/drivers/irqchip/irq-ls-scfg-msi.c
+++ b/drivers/irqchip/irq-ls-scfg-msi.c
@@ -14,6 +14,7 @@
#include <linux/iommu.h>
#include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/irqchip/irq-msi-lib.h>
#include <linux/irqdomain.h>
#include <linux/of_irq.h>
#include <linux/of_pci.h>
@@ -47,7 +48,6 @@ struct ls_scfg_msi {
spinlock_t lock;
struct platform_device *pdev;
struct irq_domain *parent;
- struct irq_domain *msi_domain;
void __iomem *regs;
phys_addr_t msiir_addr;
struct ls_scfg_msi_cfg *cfg;
@@ -57,17 +57,18 @@ struct ls_scfg_msi {
unsigned long *used;
};
-static struct irq_chip ls_scfg_msi_irq_chip = {
- .name = "MSI",
- .irq_mask = pci_msi_mask_irq,
- .irq_unmask = pci_msi_unmask_irq,
-};
-
-static struct msi_domain_info ls_scfg_msi_domain_info = {
- .flags = (MSI_FLAG_USE_DEF_DOM_OPS |
- MSI_FLAG_USE_DEF_CHIP_OPS |
- MSI_FLAG_PCI_MSIX),
- .chip = &ls_scfg_msi_irq_chip,
+#define MPIC_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
+ MSI_FLAG_USE_DEF_CHIP_OPS)
+#define MPIC_MSI_FLAGS_SUPPORTED (MSI_FLAG_PCI_MSIX | \
+ MSI_GENERIC_FLAGS_MASK)
+
+static const struct msi_parent_ops ls_scfg_msi_parent_ops = {
+ .required_flags = MPIC_MSI_FLAGS_REQUIRED,
+ .supported_flags = MPIC_MSI_FLAGS_SUPPORTED,
+ .bus_select_token = DOMAIN_BUS_NEXUS,
+ .bus_select_mask = MATCH_PCI_MSI,
+ .prefix = "MSI-",
+ .init_dev_msi_info = msi_lib_init_dev_msi_info,
};
static int msi_affinity_flag = 1;
@@ -185,6 +186,7 @@ static void ls_scfg_msi_domain_irq_free(struct irq_domain *domain,
}
static const struct irq_domain_ops ls_scfg_msi_domain_ops = {
+ .select = msi_lib_irq_domain_select,
.alloc = ls_scfg_msi_domain_irq_alloc,
.free = ls_scfg_msi_domain_irq_free,
};
@@ -214,21 +216,15 @@ static void ls_scfg_msi_irq_handler(struct irq_desc *desc)
static int ls_scfg_msi_domains_init(struct ls_scfg_msi *msi_data)
{
- /* Initialize MSI domain parent */
- msi_data->parent = irq_domain_create_linear(NULL,
- msi_data->irqs_num,
- &ls_scfg_msi_domain_ops,
- msi_data);
+ struct irq_domain_info info = {
+ .fwnode = of_fwnode_handle(msi_data->pdev->dev.of_node),
+ .ops = &ls_scfg_msi_domain_ops,
+ .host_data = msi_data,
+ .size = msi_data->irqs_num,
+ };
+
+ msi_data->parent = msi_create_parent_irq_domain(&info, &ls_scfg_msi_parent_ops);
if (!msi_data->parent) {
- dev_err(&msi_data->pdev->dev, "failed to create IRQ domain\n");
- return -ENOMEM;
- }
-
- msi_data->msi_domain = pci_msi_create_irq_domain(
- of_fwnode_handle(msi_data->pdev->dev.of_node),
- &ls_scfg_msi_domain_info,
- msi_data->parent);
- if (!msi_data->msi_domain) {
dev_err(&msi_data->pdev->dev, "failed to create MSI domain\n");
irq_domain_remove(msi_data->parent);
return -ENOMEM;
@@ -405,7 +401,6 @@ static void ls_scfg_msi_remove(struct platform_device *pdev)
for (i = 0; i < msi_data->msir_num; i++)
ls_scfg_msi_teardown_hwirq(&msi_data->msir[i]);
- irq_domain_remove(msi_data->msi_domain);
irq_domain_remove(msi_data->parent);
platform_set_drvdata(pdev, NULL);
--
2.39.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 04/12] irqchip/imx-mu-msi: Convert to msi_create_parent_irq_domain() helper
2025-06-26 14:49 ` [PATCH 04/12] irqchip/imx-mu-msi: " Nam Cao
@ 2025-06-26 16:08 ` Frank Li
0 siblings, 0 replies; 18+ messages in thread
From: Frank Li @ 2025-06-26 16:08 UTC (permalink / raw)
To: Nam Cao
Cc: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
On Thu, Jun 26, 2025 at 04:49:01PM +0200, Nam Cao wrote:
> From: Marc Zyngier <maz@kernel.org>
>
> Now that we have a concise helper to create an MSI parent domain,
> switch the IMX letter soup over to that.
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Link: https://lore.kernel.org/all/20241204124549.607054-7-maz@kernel.org
Reviewed-by: Frank Li <Frank.Li@nxp.com>
> ---
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
> Cc: Fabio Estevam <festevam@gmail.com>
> Cc: imx@lists.linux.dev
> Cc: linux-arm-kernel@lists.infradead.org
> ---
> drivers/irqchip/irq-imx-mu-msi.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/irqchip/irq-imx-mu-msi.c b/drivers/irqchip/irq-imx-mu-msi.c
> index 137da1927d144..d2a4e8a61a42b 100644
> --- a/drivers/irqchip/irq-imx-mu-msi.c
> +++ b/drivers/irqchip/irq-imx-mu-msi.c
> @@ -223,21 +223,21 @@ static const struct msi_parent_ops imx_mu_msi_parent_ops = {
>
> static int imx_mu_msi_domains_init(struct imx_mu_msi *msi_data, struct device *dev)
> {
> - struct fwnode_handle *fwnodes = dev_fwnode(dev);
> + struct irq_domain_info info = {
> + .ops = &imx_mu_msi_domain_ops,
> + .fwnode = dev_fwnode(dev),
> + .size = IMX_MU_CHANS,
> + .host_data = msi_data,
> + };
> struct irq_domain *parent;
>
> /* Initialize MSI domain parent */
> - parent = irq_domain_create_linear(fwnodes, IMX_MU_CHANS,
> - &imx_mu_msi_domain_ops, msi_data);
> + parent = msi_create_parent_irq_domain(&info, &imx_mu_msi_parent_ops);
> if (!parent) {
> dev_err(dev, "failed to create IRQ domain\n");
> return -ENOMEM;
> }
> -
> - irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS);
> parent->dev = parent->pm_dev = dev;
> - parent->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
> - parent->msi_parent_ops = &imx_mu_msi_parent_ops;
> return 0;
> }
>
> --
> 2.39.5
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain()
2025-06-26 14:48 ` [PATCH 02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain() Nam Cao
@ 2025-06-26 16:12 ` Nam Cao
0 siblings, 0 replies; 18+ messages in thread
From: Nam Cao @ 2025-06-26 16:12 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Antoine Tenart, Andrew Lunn,
Gregory Clement, Sebastian Hesselbarth, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Huacai Chen, Jiaxun Yang,
Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv
On Thu, Jun 26, 2025 at 04:48:59PM +0200, Nam Cao wrote:
> From: Thomas Gleixner <tglx@linutronix.de>
>
> Switch to use the concise helper to create an MSI parent domain.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Nam Cao <tglx@linutronix.de>
^ oops, that's not my email
I will send v2, but let's wait for a few days if there is something else I
should fix.
Nam
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 06/12] irqchip/sg2042-msi: Switch to msi_create_parent_irq_domain()
2025-06-26 14:49 ` [PATCH 06/12] irqchip/sg2042-msi: " Nam Cao
@ 2025-06-28 2:01 ` Chen Wang
0 siblings, 0 replies; 18+ messages in thread
From: Chen Wang @ 2025-06-28 2:01 UTC (permalink / raw)
To: Nam Cao, Marc Zyngier, Thomas Gleixner, Antoine Tenart,
Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Huacai Chen,
Jiaxun Yang, Anup Patel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-kernel, linux-arm-kernel, imx, linux-mips,
linux-riscv, Inochi Amaoto
Cc: sophgo@lists.linux.dev
On 2025/6/26 22:49, Nam Cao wrote:
> From: Thomas Gleixner <tglx@linutronix.de>
>
> Switch to use the concise helper to create an MSI parent domain.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Nam Cao <namcao@linutronix.de>
Reviewed-by: Chen Wang <unicorn_wang@outlook.com>
Adding Inochi and cc sophgo maillist
Hi, Inocho, can you please review the same and have a test with SG2044
board?
Thanks.
Chen
> ---
> drivers/irqchip/irq-sg2042-msi.c | 20 +++++++++-----------
> 1 file changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/irqchip/irq-sg2042-msi.c b/drivers/irqchip/irq-sg2042-msi.c
> index af16bc5a3c8b5..bcfddc51bc6a1 100644
> --- a/drivers/irqchip/irq-sg2042-msi.c
> +++ b/drivers/irqchip/irq-sg2042-msi.c
> @@ -219,20 +219,18 @@ static const struct msi_parent_ops sg2044_msi_parent_ops = {
> static int sg204x_msi_init_domains(struct sg204x_msi_chipdata *data,
> struct irq_domain *plic_domain, struct device *dev)
> {
> - struct fwnode_handle *fwnode = dev_fwnode(dev);
> - struct irq_domain *middle_domain;
> -
> - middle_domain = irq_domain_create_hierarchy(plic_domain, 0, data->num_irqs, fwnode,
> - &sg204x_msi_middle_domain_ops, data);
> - if (!middle_domain) {
> + struct irq_domain_info info = {
> + .ops = &sg204x_msi_middle_domain_ops,
> + .parent = plic_domain,
> + .size = data->num_irqs,
> + .fwnode = dev_fwnode(dev),
> + .host_data = data,
> + };
> +
> + if (!msi_create_parent_irq_domain(&info, data->chip_info->parent_ops)) {
> pr_err("Failed to create the MSI middle domain\n");
> return -ENOMEM;
> }
> -
> - irq_domain_update_bus_token(middle_domain, DOMAIN_BUS_NEXUS);
> -
> - middle_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
> - middle_domain->msi_parent_ops = data->chip_info->parent_ops;
> return 0;
> }
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
` (11 preceding siblings ...)
2025-06-26 14:49 ` [PATCH 12/12] irqchip/ls-scfg-msi: Switch to use msi_create_parent_irq_domain() Nam Cao
@ 2025-08-10 21:12 ` patchwork-bot+linux-riscv
2025-08-11 12:52 ` Thomas Gleixner
12 siblings, 1 reply; 18+ messages in thread
From: patchwork-bot+linux-riscv @ 2025-08-10 21:12 UTC (permalink / raw)
To: Nam Cao
Cc: linux-riscv, maz, tglx, atenart, andrew, gregory.clement,
sebastian.hesselbarth, shawnguo, s.hauer, kernel, festevam,
chenhuacai, jiaxun.yang, anup, paul.walmsley, palmer, aou, alex,
linux-kernel, linux-arm-kernel, imx, linux-mips
Hello:
This series was applied to riscv/linux.git (fixes)
by Thomas Gleixner <tglx@linutronix.de>:
On Thu, 26 Jun 2025 16:48:57 +0200 you wrote:
> The initial implementation of PCI/MSI interrupt domains in the hierarchical
> interrupt domain model used a shortcut by providing a global PCI/MSI
> domain.
>
> This works because the PCI/MSI[X] hardware is standardized and uniform, but
> it violates the basic design principle of hierarchical interrupt domains:
> Each hardware block involved in the interrupt delivery chain should have a
> separate interrupt domain.
>
> [...]
Here is the summary with links:
- [01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info
https://git.kernel.org/riscv/c/858e65af9135
- [02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain()
https://git.kernel.org/riscv/c/91650ca5efcf
- [03/12] irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper
https://git.kernel.org/riscv/c/59422904dd98
- [04/12] irqchip/imx-mu-msi: Convert to msi_create_parent_irq_domain() helper
https://git.kernel.org/riscv/c/c7cc7b122a4c
- [05/12] irqchip/loongson-pch-msi.c: Switch to msi_create_parent_irq_domain()
https://git.kernel.org/riscv/c/7f91d608cc43
- [06/12] irqchip/sg2042-msi: Switch to msi_create_parent_irq_domain()
https://git.kernel.org/riscv/c/7c0dbd80de03
- [07/12] irqchip/alpine-msi: Clean up whitespace style
https://git.kernel.org/riscv/c/6e44ac411255
- [08/12] irqchip/alpine-msi: Convert to lock guards
https://git.kernel.org/riscv/c/71476f915f92
- [09/12] irqchip/alpine-msi: Convert to __free
https://git.kernel.org/riscv/c/f7c2dd9f4c2d
- [10/12] irqchip/alpine-msi: Switch to msi_create_parent_irq_domain()
https://git.kernel.org/riscv/c/7a91ad7ebd61
- [11/12] irqchip/armada-370-xp: Switch to msi_create_parent_irq_domain()
https://git.kernel.org/riscv/c/bafb2901317f
- [12/12] irqchip/ls-scfg-msi: Switch to use msi_create_parent_irq_domain()
https://git.kernel.org/riscv/c/94b59d5f567a
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain
2025-08-10 21:12 ` [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain patchwork-bot+linux-riscv
@ 2025-08-11 12:52 ` Thomas Gleixner
0 siblings, 0 replies; 18+ messages in thread
From: Thomas Gleixner @ 2025-08-11 12:52 UTC (permalink / raw)
To: patchwork-bot+linux-riscv, Nam Cao
Cc: linux-riscv, maz, atenart, andrew, gregory.clement,
sebastian.hesselbarth, shawnguo, s.hauer, kernel, festevam,
chenhuacai, jiaxun.yang, anup, paul.walmsley, palmer, aou, alex,
linux-kernel, linux-arm-kernel, imx, linux-mips
On Sun, Aug 10 2025 at 21:12, patchwork-bot wrote:
> Hello:
>
> This series was applied to riscv/linux.git (fixes)
> by Thomas Gleixner <tglx@linutronix.de>:
...
> Here is the summary with links:
> - [01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info
> https://git.kernel.org/riscv/c/858e65af9135
...
> You are awesome, thank you!
I know that I'm awesome, but this broken patchwork bot is _not_
Why the hell does it waste electrons and inbox space on stuff which is
A) applied on a different tree
B) already upstream
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2025-08-11 12:52 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26 14:48 [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain Nam Cao
2025-06-26 14:48 ` [PATCH 01/12] irqdomain: Add device pointer to irq_domain_info and msi_domain_info Nam Cao
2025-06-26 14:48 ` [PATCH 02/12] irqchip/bcm2712-mip: Switch to msi_create_parent_irq_domain() Nam Cao
2025-06-26 16:12 ` Nam Cao
2025-06-26 14:49 ` [PATCH 03/12] irqchip/riscv-imsic: Convert to msi_create_parent_irq_domain() helper Nam Cao
2025-06-26 14:49 ` [PATCH 04/12] irqchip/imx-mu-msi: " Nam Cao
2025-06-26 16:08 ` Frank Li
2025-06-26 14:49 ` [PATCH 05/12] irqchip/loongson-pch-msi.c: Switch to msi_create_parent_irq_domain() Nam Cao
2025-06-26 14:49 ` [PATCH 06/12] irqchip/sg2042-msi: " Nam Cao
2025-06-28 2:01 ` Chen Wang
2025-06-26 14:49 ` [PATCH 07/12] irqchip/alpine-msi: Clean up whitespace style Nam Cao
2025-06-26 14:49 ` [PATCH 08/12] irqchip/alpine-msi: Convert to lock guards Nam Cao
2025-06-26 14:49 ` [PATCH 09/12] irqchip/alpine-msi: Convert to __free Nam Cao
2025-06-26 14:49 ` [PATCH 10/12] irqchip/alpine-msi: Switch to msi_create_parent_irq_domain() Nam Cao
2025-06-26 14:49 ` [PATCH 11/12] irqchip/armada-370-xp: " Nam Cao
2025-06-26 14:49 ` [PATCH 12/12] irqchip/ls-scfg-msi: Switch to use msi_create_parent_irq_domain() Nam Cao
2025-08-10 21:12 ` [PATCH 00/12] irqchip: MSI cleanup and conversion to MSI parent domain patchwork-bot+linux-riscv
2025-08-11 12:52 ` Thomas Gleixner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).