lkml.org 
[lkml]   [2019]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 24/32] softirq: Uninline !CONFIG_TRACE_IRQFLAGS __local_bh_disable_ip()
    Date
    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
    \
     
     \ /
      Last update: 2019-02-12 18:40    [W:4.089 / U:0.744 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site