FAILED: patch "[PATCH] genirq: Provide IRQCHIP_AFFINITY_PRE_STARTUP" failed to apply to 4.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 826da771291fc25a428e871f9e7fb465e390f852 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <[email protected]>
Date: Thu, 29 Jul 2021 23:51:48 +0200
Subject: [PATCH] genirq: Provide IRQCHIP_AFFINITY_PRE_STARTUP
X86 IO/APIC and MSI interrupts (when used without interrupts remapping) require that the affinity setup on startup is done before the interrupt is enabled for the first time as the non-remapped operation mode cannot safely migrate enabled interrupts from arbitrary contexts. Provide a new irq chip flag which allows affected hardware to request this.
This has to be opt-in because there have been reports in the past that some interrupt chips cannot handle affinity setting before startup.
include/linux/irq.h +2 -0
@@ -569,6 +569,7 @@ struct irq_chip {* IRQCHIP_SUPPORTS_NMI: Chip can deliver NMIs, only for root irqchips * IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND: Invokes __enable_irq()/__disable_irq() for wake irqs * in the suspend path if they are in disabled state +* IRQCHIP_AFFINITY_PRE_STARTUP: Default affinity update before startup */ enum {IRQCHIP_SET_TYPE_MASKED = (1 <<0 ),
@@ -581,6 +582,7 @@ enum {IRQCHIP_SUPPORTS_LEVEL_MSI = (1 <<7 ),IRQCHIP_SUPPORTS_NMI = (1 <<8 ),IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = (1 <<9 ), + IRQCHIP_AFFINITY_PRE_STARTUP = (1 << 10), };#include <linux/irqdesc.h>
kernel/irq/chip.c +4 -1
@@ -265,8 +265,11 @@ int irq_startup(struct irq_desc *desc, bool resend, bool force) }else {switch (__irq_startup_managed (desc, aff, force)) {case IRQ_STARTUP_NORMAL : +if (d->chip->flags &IRQCHIP_AFFINITY_PRE_STARTUP ) +irq_setup_affinity (desc); ret =__irq_startup (desc); -irq_setup_affinity (desc); +if (!(d->chip->flags &IRQCHIP_AFFINITY_PRE_STARTUP )) +irq_setup_affinity (desc);break ;case IRQ_STARTUP_MANAGED :irq_do_set_affinity (d, aff, false);