From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756142AbeASPrH (ORCPT ); Fri, 19 Jan 2018 10:47:07 -0500 Received: from mail.kernel.org ([198.145.29.99]:58588 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756069AbeASPqh (ORCPT ); Fri, 19 Jan 2018 10:46:37 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 195472175B 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 , Andrew Morton , Paolo Abeni , Radu Rendec , Ingo Molnar , Stanislaw Gruszka , Rik van Riel , Eric Dumazet , David Miller Subject: [RFC PATCH 3/4] softirq: Defer to workqueue when rescheduling is needed Date: Fri, 19 Jan 2018 16:46:13 +0100 Message-Id: <1516376774-24076-4-git-send-email-frederic@kernel.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516376774-24076-1-git-send-email-frederic@kernel.org> References: <1516376774-24076-1-git-send-email-frederic@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 becb1d9..bb0cffa 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -369,16 +369,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 got re-enqueued are threaded */ - if (executed & pending) - do_softirq_workqueue(executed & pending); - pending &= ~executed; - if (pending) - goto restart; - } + if (need_resched()) + executed = pending; + /* Vectors that got re-enqueued are threaded */ + if (executed & pending) + do_softirq_workqueue(executed & pending); + pending &= ~executed; + if (pending) + goto restart; } lockdep_softirq_end(in_hardirq); -- 2.7.4