Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751415AbeAPElH (ORCPT + 1 other); Mon, 15 Jan 2018 23:41:07 -0500 Received: from mail.kernel.org ([198.145.29.99]:42204 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751376AbeAPElE (ORCPT ); Mon, 15 Jan 2018 23:41:04 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 17DA421783 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=frederic@kernel.org From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Levin Alexander , Peter Zijlstra , Mauro Carvalho Chehab , Linus Torvalds , Hannes Frederic Sowa , "Paul E . McKenney" , Wanpeng Li , Dmitry Safonov , Thomas Gleixner , Eric Dumazet , Radu Rendec , Ingo Molnar , Stanislaw Gruszka , Paolo Abeni , Rik van Riel , Andrew Morton , David Miller Subject: [RFC PATCH 3/5] softirq: Defer to workqueue when rescheduling is needed Date: Tue, 16 Jan 2018 05:40:38 +0100 Message-Id: <1516077640-19718-4-git-send-email-frederic@kernel.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516077640-19718-1-git-send-email-frederic@kernel.org> References: <1516077640-19718-1-git-send-email-frederic@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: One more step toward converting ksoftirqd to per vector workqueues. Suggested-by: Paolo Abeni Suggested-by: Linus Torvalds Signed-off-by: Frederic Weisbecker Cc: Dmitry Safonov Cc: Eric Dumazet Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Andrew Morton Cc: David Miller Cc: Hannes Frederic Sowa Cc: Ingo Molnar Cc: Levin Alexander Cc: Paolo Abeni Cc: Paul E. McKenney Cc: Radu Rendec Cc: Rik van Riel Cc: Stanislaw Gruszka Cc: Thomas Gleixner Cc: Wanpeng Li Cc: Mauro Carvalho Chehab --- kernel/softirq.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/kernel/softirq.c b/kernel/softirq.c index 255da68..441e654 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -389,16 +389,14 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) pending = local_softirq_pending() & ~softirq->pending_work_mask; if (pending) { - if (need_resched()) { - wakeup_softirqd(); - } else { - /* Vectors that overreached the limits are threaded */ - if (overrun & pending) - do_softirq_workqueue(overrun & pending); - pending &= ~overrun; - if (pending) - goto restart; - } + if (need_resched()) + overrun = pending; + /* Vectors that overreached the limits are threaded */ + if (overrun & pending) + do_softirq_workqueue(overrun & pending); + pending &= ~overrun; + if (pending) + goto restart; } lockdep_softirq_end(in_hardirq); -- 2.7.4