genirq: Change force_irqthreads to a static key
With CONFIG_IRQ_FORCED_THREADING=y, testing the boolean force_irqthreads could incur a cache line miss in invoke_softirq() and other places. Replace the test with a static key to avoid the potential cache miss. [ tglx: Dropped the IDE part, removed the export and updated blk-mq ] Suggested-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Tanner Love <tannerlove@google.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20210602180338.3324213-1-tannerlove.kernel@gmail.com
This commit is contained in:
committed by
Thomas Gleixner
parent
5a6c76b5de
commit
91cc470e79
@@ -13,6 +13,7 @@
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/jump_label.h>
|
||||
|
||||
#include <linux/atomic.h>
|
||||
#include <asm/ptrace.h>
|
||||
@@ -474,12 +475,13 @@ extern int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
|
||||
|
||||
#ifdef CONFIG_IRQ_FORCED_THREADING
|
||||
# ifdef CONFIG_PREEMPT_RT
|
||||
# define force_irqthreads (true)
|
||||
# define force_irqthreads() (true)
|
||||
# else
|
||||
extern bool force_irqthreads;
|
||||
DECLARE_STATIC_KEY_FALSE(force_irqthreads_key);
|
||||
# define force_irqthreads() (static_branch_unlikely(&force_irqthreads_key))
|
||||
# endif
|
||||
#else
|
||||
#define force_irqthreads (0)
|
||||
#define force_irqthreads() (false)
|
||||
#endif
|
||||
|
||||
#ifndef local_softirq_pending
|
||||
|
||||
Reference in New Issue
Block a user