Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934955AbeAKQca (ORCPT + 1 other); Thu, 11 Jan 2018 11:32:30 -0500 Received: from merlin.infradead.org ([205.233.59.134]:40172 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933569AbeAKQc3 (ORCPT ); Thu, 11 Jan 2018 11:32:29 -0500 Date: Thu, 11 Jan 2018 17:32:04 +0100 From: Peter Zijlstra To: Eric Dumazet Cc: Dmitry Safonov , Frederic Weisbecker , Linus Torvalds , LKML , Dmitry Safonov <0x7f454c46@gmail.com>, Andrew Morton , David Miller , Frederic Weisbecker , Hannes Frederic Sowa , Ingo Molnar , "Levin, Alexander (Sasha Levin)" , Paolo Abeni , "Paul E. McKenney" , Radu Rendec , Rik van Riel , Stanislaw Gruszka , Thomas Gleixner , Wanpeng Li Subject: Re: [RFC 1/2] softirq: Defer net rx/tx processing to ksoftirqd context Message-ID: <20180111163204.GE6176@hirez.programming.kicks-ass.net> References: <20180109133623.10711-1-dima@arista.com> <20180109133623.10711-2-dima@arista.com> <1515620880.3350.44.camel@arista.com> <20180111032232.GA11633@lerouge> <20180111044456.GC11633@lerouge> <1515681091.3039.21.camel@arista.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Thu, Jan 11, 2018 at 08:20:18AM -0800, Eric Dumazet wrote: > diff --git a/kernel/softirq.c b/kernel/softirq.c > index 2f5e87f1bae22f3df44fa4493fcc8b255882267f..d2f20daf77d14dc8ebde00d7c4a0237152d082ba > 100644 > --- a/kernel/softirq.c > +++ b/kernel/softirq.c > @@ -192,7 +192,7 @@ EXPORT_SYMBOL(__local_bh_enable_ip); > > /* > * We restart softirq processing for at most MAX_SOFTIRQ_RESTART times, > - * but break the loop if need_resched() is set or after 2 ms. > + * but break the loop after 2 ms. > * The MAX_SOFTIRQ_TIME provides a nice upper bound in most cases, but in > * certain cases, such as stop_machine(), jiffies may cease to > * increment and so we need the MAX_SOFTIRQ_RESTART limit as > @@ -299,8 +299,7 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) > > pending = local_softirq_pending(); > if (pending) { > - if (time_before(jiffies, end) && !need_resched() && > - --max_restart) > + if (time_before(jiffies, end) && --max_restart) > goto restart; > > wakeup_softirqd(); You just introduced a 2ms preempt-disable region I think, that's not cool for PREEMPT and a plain bug on PREEMPT_RT.