4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner tglx@linutronix.de
commit d340ebd696f921d3ad01b8c0c29dd38f2ad2bf3e upstream.
The upcoming fix for the -EBUSY return from affinity settings requires to use the irq_move_irq() functionality even on irq remapped interrupts. To avoid the out of line call, move the check for the pending bit into an inline helper.
Preparatory change for the real fix. No functional change.
Fixes: dccfe3147b42 ("x86/vector: Simplify vector move cleanup") Signed-off-by: Thomas Gleixner tglx@linutronix.de Cc: Joerg Roedel jroedel@suse.de Cc: Peter Zijlstra peterz@infradead.org Cc: Song Liu liu.song.a23@gmail.com Cc: Dmitry Safonov 0x7f454c46@gmail.com Cc: stable@vger.kernel.org Cc: Mike Travis mike.travis@hpe.com Cc: Borislav Petkov bp@alien8.de Cc: Tariq Toukan tariqt@mellanox.com Cc: Dou Liyang douly.fnst@cn.fujitsu.com Link: https://lkml.kernel.org/r/20180604162224.471925894@linutronix.de Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
--- include/linux/irq.h | 7 ++++++- kernel/irq/migration.c | 5 +---- 2 files changed, 7 insertions(+), 5 deletions(-)
--- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -556,7 +556,12 @@ extern int irq_affinity_online_cpu(unsig #endif
#if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_PENDING_IRQ) -void irq_move_irq(struct irq_data *data); +void __irq_move_irq(struct irq_data *data); +static inline void irq_move_irq(struct irq_data *data) +{ + if (unlikely(irqd_is_setaffinity_pending(data))) + __irq_move_irq(data); +} void irq_move_masked_irq(struct irq_data *data); void irq_force_complete_move(struct irq_desc *desc); #else --- a/kernel/irq/migration.c +++ b/kernel/irq/migration.c @@ -91,7 +91,7 @@ void irq_move_masked_irq(struct irq_data cpumask_clear(desc->pending_mask); }
-void irq_move_irq(struct irq_data *idata) +void __irq_move_irq(struct irq_data *idata) { bool masked;
@@ -102,9 +102,6 @@ void irq_move_irq(struct irq_data *idata */ idata = irq_desc_get_irq_data(irq_data_to_desc(idata));
- if (likely(!irqd_is_setaffinity_pending(idata))) - return; - if (unlikely(irqd_irq_disabled(idata))) return;