Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751510AbeAPEl3 (ORCPT + 1 other); Mon, 15 Jan 2018 23:41:29 -0500 Received: from mail.kernel.org ([198.145.29.99]:42310 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751427AbeAPElM (ORCPT ); Mon, 15 Jan 2018 23:41:12 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6DF4221721 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/OPTIONAL PATCH 5/5] softirq: Reset vector call counter before workqueue completion Date: Tue, 16 Jan 2018 05:40:40 +0100 Message-Id: <1516077640-19718-6-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: Once a softirq vector queue has been completed from the workqueue, its call counter for the current jiffy frame can be reset in order to handle those that will follow from the normal IRQ tail softirq processing. 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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/softirq.c b/kernel/softirq.c index b2a5384..4e5a0ef 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -255,10 +255,13 @@ static void vector_work_func(struct work_struct *work) local_irq_disable(); pending = local_softirq_pending(); - if (pending & vec_bit) + if (pending & vec_bit) { schedule_work_on(smp_processor_id(), &vector->work); - else + } else { softirq->pending_work_mask &= ~vec_bit; + vector->jiffy_calls = 0; + vector->jiffy_snap = jiffies; + } lockdep_softirq_exit(); account_irq_exit_time(current); -- 2.7.4