Messages in this thread Patch in this message | | | From | Frederic Weisbecker <> | Subject | [PATCH 24/32] softirq: Uninline !CONFIG_TRACE_IRQFLAGS __local_bh_disable_ip() | Date | Tue, 12 Feb 2019 18:14:15 +0100 |
| |
The common code between both versions of __local_bh_disable_ip(), whether CONFIG_TRACE_IRQFLAGS is on or off, is going to grow up in order to support vector masking granularity.
Merge these versions together to prepare for that.
Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Cc: Mauro Carvalho Chehab <mchehab@s-opensource.com> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Pavan Kondeti <pkondeti@codeaurora.org> Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com> Cc: David S . Miller <davem@davemloft.net> Cc: Ingo Molnar <mingo@kernel.org> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> --- include/linux/bottom_half.h | 10 ---------- kernel/softirq.c | 10 ++++++---- 2 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/include/linux/bottom_half.h b/include/linux/bottom_half.h index 240419382978..ef9e4c752f56 100644 --- a/include/linux/bottom_half.h +++ b/include/linux/bottom_half.h @@ -28,17 +28,7 @@ enum #define SOFTIRQ_DATA_INIT (SOFTIRQ_ALL_MASK << SOFTIRQ_ENABLED_SHIFT) - - -#ifdef CONFIG_TRACE_IRQFLAGS extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt); -#else -static __always_inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) -{ - preempt_count_add(cnt); - barrier(); -} -#endif static inline void local_bh_disable(void) { diff --git a/kernel/softirq.c b/kernel/softirq.c index 5fea9e299caf..91dee716e139 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -102,14 +102,14 @@ static bool ksoftirqd_running(unsigned long pending) * softirq and whether we just have bh disabled. */ -#ifdef CONFIG_TRACE_IRQFLAGS void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) { +#ifdef CONFIG_TRACE_IRQFLAGS unsigned long flags; - WARN_ON_ONCE(in_irq()); - raw_local_irq_save(flags); +#endif + WARN_ON_ONCE(in_irq()); /* * The preempt tracer hooks into preempt_count_add and will break * lockdep because it calls back into lockdep after SOFTIRQ_OFFSET @@ -123,7 +123,10 @@ void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) */ if (softirq_count() == (cnt & SOFTIRQ_MASK)) trace_softirqs_off(ip); + +#ifdef CONFIG_TRACE_IRQFLAGS raw_local_irq_restore(flags); +#endif if (preempt_count() == cnt) { #ifdef CONFIG_DEBUG_PREEMPT @@ -133,7 +136,6 @@ void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) } } EXPORT_SYMBOL(__local_bh_disable_ip); -#endif /* CONFIG_TRACE_IRQFLAGS */ static void __local_bh_enable_no_softirq(unsigned int cnt) { -- 2.17.1
| |