genirq/msi: Add bus token to struct msi_domain_info
authorAhmed S. Darwish <darwi@linutronix.de>
Fri, 11 Nov 2022 13:54:33 +0000 (14:54 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 17 Nov 2022 14:15:19 +0000 (15:15 +0100)
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 <tglx@linutronix.de>
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20221111122014.294554462@linutronix.de
include/linux/msi.h
kernel/irq/msi.c

index ee735ff..2dfd7b2 100644 (file)
@@ -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 */
index a2efa00..b46b747 100644 (file)
@@ -694,8 +694,11 @@ struct irq_domain *msi_create_irq_domain(struct fwnode_handle *fwnode,
        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;
 }