diff options
author | Paul E. McKenney <paulmck@kernel.org> | 2021-01-20 22:38:08 +0100 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2021-03-08 23:18:07 +0100 |
commit | 7ffc9ec8eac196cbd85669a4d7920cd80f186a51 (patch) | |
tree | 91692f5101bbeef9055de2382cd4fd539a1bdebe /kernel/rcu | |
parent | kvfree_rcu: Use __GFP_NOMEMALLOC for single-argument kvfree_rcu() (diff) | |
download | linux-7ffc9ec8eac196cbd85669a4d7920cd80f186a51.tar.xz linux-7ffc9ec8eac196cbd85669a4d7920cd80f186a51.zip |
kvfree_rcu: Make krc_this_cpu_unlock() use raw_spin_unlock_irqrestore()
The krc_this_cpu_unlock() function does a raw_spin_unlock() immediately
followed by a local_irq_restore(). This commit saves a line of code by
merging them into a raw_spin_unlock_irqrestore(). This transformation
also reduces scheduling latency because raw_spin_unlock_irqrestore()
responds immediately to a reschedule request. In contrast,
local_irq_restore() does a scheduling-oblivious enabling of interrupts.
Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'kernel/rcu')
-rw-r--r-- | kernel/rcu/tree.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 08b50441ebe8..7ee83f3a15ea 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3229,8 +3229,7 @@ krc_this_cpu_lock(unsigned long *flags) static inline void krc_this_cpu_unlock(struct kfree_rcu_cpu *krcp, unsigned long flags) { - raw_spin_unlock(&krcp->lock); - local_irq_restore(flags); + raw_spin_unlock_irqrestore(&krcp->lock, flags); } static inline struct kvfree_rcu_bulk_data * |