Skip to content

Commit

Permalink
genirq/migration: Avoid out of line call if pending is not set
Browse files Browse the repository at this point in the history
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: dccfe31 ("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
  • Loading branch information
KAGA-KOKO committed Jun 6, 2018
1 parent a33a5d2 commit d340ebd
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
7 changes: 6 additions & 1 deletion include/linux/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,12 @@ extern int irq_affinity_online_cpu(unsigned int cpu);
#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
Expand Down
5 changes: 1 addition & 4 deletions kernel/irq/migration.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ void irq_move_masked_irq(struct irq_data *idata)
cpumask_clear(desc->pending_mask);
}

void irq_move_irq(struct irq_data *idata)
void __irq_move_irq(struct irq_data *idata)
{
bool masked;

Expand All @@ -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;

Expand Down

0 comments on commit d340ebd

Please sign in to comment.