From: Ahmed S. Darwish <da...@linutronix.de>

Add a bus token member to struct msi_domain_info and let
msi_create_irq_domain() set the bus token.

That allows to remove the bus token updates at the call sites.

Suggested-by: Thomas Gleixner <t...@linutronix.de>
Signed-off-by: Ahmed S. Darwish <da...@linutronix.de>
Signed-off-by: Thomas Gleixner <t...@linutronix.de>
---
 include/linux/msi.h |   19 +++++++++++--------
 kernel/irq/msi.c    |    7 +++++--
 2 files changed, 16 insertions(+), 10 deletions(-)

--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -16,6 +16,7 @@
  * abuse. The only function which is relevant for drivers is msi_get_virq().
  */
 
+#include <linux/irqdomain_defs.h>
 #include <linux/cpumask.h>
 #include <linux/xarray.h>
 #include <linux/mutex.h>
@@ -365,6 +366,7 @@ struct msi_domain_ops {
 /**
  * struct msi_domain_info - MSI interrupt domain data
  * @flags:             Flags to decribe features and capabilities
+ * @bus_token:         The domain bus token
  * @ops:               The callback data structure
  * @chip:              Optional: associated interrupt chip
  * @chip_data:         Optional: associated interrupt chip data
@@ -374,14 +376,15 @@ struct msi_domain_ops {
  * @data:              Optional: domain specific data
  */
 struct msi_domain_info {
-       u32                     flags;
-       struct msi_domain_ops   *ops;
-       struct irq_chip         *chip;
-       void                    *chip_data;
-       irq_flow_handler_t      handler;
-       void                    *handler_data;
-       const char              *handler_name;
-       void                    *data;
+       u32                             flags;
+       enum irq_domain_bus_token       bus_token;
+       struct msi_domain_ops           *ops;
+       struct irq_chip                 *chip;
+       void                            *chip_data;
+       irq_flow_handler_t              handler;
+       void                            *handler_data;
+       const char                      *handler_name;
+       void                            *data;
 };
 
 /* Flags for msi_domain_info */
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -694,8 +694,11 @@ struct irq_domain *msi_create_irq_domain
        domain = irq_domain_create_hierarchy(parent, IRQ_DOMAIN_FLAG_MSI, 0,
                                             fwnode, &msi_domain_ops, info);
 
-       if (domain && !domain->name && info->chip)
-               domain->name = info->chip->name;
+       if (domain) {
+               if (!domain->name && info->chip)
+                       domain->name = info->chip->name;
+               irq_domain_update_bus_token(domain, info->bus_token);
+       }
 
        return domain;
 }

Reply via email to