Patch "irqchip/bcm7038-l1: Implement irq_cpu_offline() callback" has been added to the 4.4-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
irqchip/bcm7038-l1: Implement irq_cpu_offline() callback
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
irqchip-bcm7038-l1-implement-irq_cpu_offline-callback.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
34c535793bcbf9263cf22f8a52101f796cdfab8eMon Sep 17 00:00:00 2001
From: Florian Fainelli <[email protected]>
Date: Mon, 31 Oct 2016 14:17:35 -0700
Subject: irqchip/bcm7038-l1: Implement irq_cpu_offline() callback
From: Florian Fainelli <[email protected]>
commit 34c535793bcbf9263cf22f8a52101f796cdfab8e upstream.
We did not implement an irq_cpu_offline callback for our irqchip, yet we support setting a given IRQ's affinity. This resulted in interrupts whose affinity mask included CPUs being taken offline not to work correctly once the CPU had been put offline.
--- drivers/irqchip/irq-bcm7038-l1.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
drivers/irqchip/irq-bcm7038-l1.c +26 -0
@@ -216,6 +216,31 @@ static int bcm7038_l1_set_affinity(strucreturn 0 ; } +static void bcm7038_l1_cpu_offline (struct irq_data *d) +{ +struct cpumask *mask =irq_data_get_affinity_mask (d); +int cpu =smp_processor_id (); +cpumask_t new_affinity; + +/* This CPU was not on the affinity mask */ +if (!cpumask_test_cpu (cpu, mask)) +return ; + +if (cpumask_weight (mask) >1 ) { +/* +* Multiple CPU affinity, remove this CPU from the affinity +* mask +*/ +cpumask_copy (&new_affinity, mask); +cpumask_clear_cpu (cpu, &new_affinity); + }else { +/* Only CPU, put on the lowest online CPU */ +cpumask_clear (&new_affinity); +cpumask_set_cpu (cpumask_first (cpu_online_mask), &new_affinity); + } +irq_set_affinity_locked (d, &new_affinity, false); +} +static int __init bcm7038_l1_init_one (struct device_node *dn,unsigned int idx,struct bcm7038_l1_chip *intc)
@@ -267,6 +292,7 @@ static struct irq_chip bcm7038_l1_irq_ch .irq_mask = bcm7038_l1_mask, .irq_unmask = bcm7038_l1_unmask, .irq_set_affinity = bcm7038_l1_set_affinity, + .irq_cpu_offline = bcm7038_l1_cpu_offline, }; static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/irqchip-bcm7038-l1-implement-irq_cpu_offline-callback.patch