@@ -86,11 +86,13 @@ msi_set_affinity(struct irq_data *irqd, const struct cpumask *mask, bool force)
8686 * The quirk bit is not set in this case.
8787 * - The new vector is the same as the old vector
8888 * - The old vector is MANAGED_IRQ_SHUTDOWN_VECTOR (interrupt starts up)
89+ * - The interrupt is not yet started up
8990 * - The new destination CPU is the same as the old destination CPU
9091 */
9192 if (!irqd_msi_nomask_quirk (irqd ) ||
9293 cfg -> vector == old_cfg .vector ||
9394 old_cfg .vector == MANAGED_IRQ_SHUTDOWN_VECTOR ||
95+ !irqd_is_started (irqd ) ||
9496 cfg -> dest_apicid == old_cfg .dest_apicid ) {
9597 irq_msi_update_msg (irqd , cfg );
9698 return ret ;
@@ -178,7 +180,8 @@ static struct irq_chip pci_msi_controller = {
178180 .irq_ack = irq_chip_ack_parent ,
179181 .irq_retrigger = irq_chip_retrigger_hierarchy ,
180182 .irq_set_affinity = msi_set_affinity ,
181- .flags = IRQCHIP_SKIP_SET_WAKE ,
183+ .flags = IRQCHIP_SKIP_SET_WAKE |
184+ IRQCHIP_AFFINITY_PRE_STARTUP ,
182185};
183186
184187int pci_msi_prepare (struct irq_domain * domain , struct device * dev , int nvec ,
@@ -247,7 +250,8 @@ static struct irq_chip pci_msi_ir_controller = {
247250 .irq_mask = pci_msi_mask_irq ,
248251 .irq_ack = irq_chip_ack_parent ,
249252 .irq_retrigger = irq_chip_retrigger_hierarchy ,
250- .flags = IRQCHIP_SKIP_SET_WAKE ,
253+ .flags = IRQCHIP_SKIP_SET_WAKE |
254+ IRQCHIP_AFFINITY_PRE_STARTUP ,
251255};
252256
253257static struct msi_domain_info pci_msi_ir_domain_info = {
@@ -289,7 +293,8 @@ static struct irq_chip dmar_msi_controller = {
289293 .irq_set_affinity = msi_domain_set_affinity ,
290294 .irq_retrigger = irq_chip_retrigger_hierarchy ,
291295 .irq_write_msi_msg = dmar_msi_write_msg ,
292- .flags = IRQCHIP_SKIP_SET_WAKE ,
296+ .flags = IRQCHIP_SKIP_SET_WAKE |
297+ IRQCHIP_AFFINITY_PRE_STARTUP ,
293298};
294299
295300static int dmar_msi_init (struct irq_domain * domain ,
@@ -381,7 +386,7 @@ static struct irq_chip hpet_msi_controller __ro_after_init = {
381386 .irq_set_affinity = msi_domain_set_affinity ,
382387 .irq_retrigger = irq_chip_retrigger_hierarchy ,
383388 .irq_write_msi_msg = hpet_msi_write_msg ,
384- .flags = IRQCHIP_SKIP_SET_WAKE ,
389+ .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_AFFINITY_PRE_STARTUP ,
385390};
386391
387392static int hpet_msi_init (struct irq_domain * domain ,
0 commit comments