--- /dev/null
+From tglx@linutronix.de Thu Sep 27 10:47:34 2018
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 30 Aug 2018 17:05:19 +0200 (CEST)
+Subject: tick/nohz: Prevent bogus softirq pending warning
+To: John Crispin <john@phrozen.org>
+Cc: Frederic Weisbecker <frederic@kernel.org>, LKML <linux-kernel@vger.kernel.org>, Ingo Molnar <mingo@kernel.org>, Anna-Maria Gleixner <anna-maria@linutronix.de>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, stable@vger.kernel.org
+Message-ID: <alpine.DEB.2.21.1808301702450.1210@nanos.tec.linutronix.de>
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+Commit 0a0e0829f990 ("nohz: Fix missing tick reprogram when interrupting an
+inline softirq") got backported to stable trees and now causes the NOHZ
+softirq pending warning to trigger. It's not an upstream issue as the NOHZ
+update logic has been changed there.
+
+The problem is when a softirq disabled section gets interrupted and on
+return from interrupt the tick/nohz state is evaluated, which then can
+observe pending soft interrupts. These soft interrupts are legitimately
+pending because they cannot be processed as long as soft interrupts are
+disabled and the interrupted code will correctly process them when soft
+interrupts are reenabled.
+
+Add a check for softirqs disabled to the pending check to prevent the
+warning.
+
+Reported-by: Grygorii Strashko <grygorii.strashko@ti.com>
+Reported-by: John Crispin <john@phrozen.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Tested-by: Grygorii Strashko <grygorii.strashko@ti.com>
+Tested-by: John Crispin <john@phrozen.org>
+Cc: Frederic Weisbecker <frederic@kernel.org>
+Cc: Ingo Molnar <mingo@kernel.org>
+Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
+Cc: stable@vger.kernel.org
+Fixes: 2d898915ccf4838c ("nohz: Fix missing tick reprogram when interrupting an inline softirq")
+Acked-by: Frederic Weisbecker <frederic@kernel.org>
+Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
+---
+ kernel/time/tick-sched.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -908,7 +908,7 @@ static bool can_stop_idle_tick(int cpu,
+ if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
+ static int ratelimit;
+
+- if (ratelimit < 10 &&
++ if (ratelimit < 10 && !in_softirq() &&
+ (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) {
+ pr_warn("NOHZ: local_softirq_pending %02x\n",
+ (unsigned int) local_softirq_pending());