From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Waiman Long To: Andrew Morton , Alexey Dobriyan , Kees Cook , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Davidlohr Bueso , Miklos Szeredi , Daniel Colascione , Dave Chinner , Randy Dunlap , Matthew Wilcox , Waiman Long Subject: [PATCH v3 3/4] genirq: Track the number of active IRQs Date: Wed, 9 Jan 2019 14:20:47 -0500 Message-Id: <1547061648-16080-4-git-send-email-longman@redhat.com> In-Reply-To: <1547061648-16080-1-git-send-email-longman@redhat.com> References: <1547061648-16080-1-git-send-email-longman@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: A new atomic variable nr_active_irqs is added to track the number of active IRQs that have one or more interrupts serviced. Signed-off-by: Waiman Long --- kernel/irq/internals.h | 7 +++++-- kernel/irq/irqdesc.c | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 31787c1..239ae51 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -242,10 +242,13 @@ static inline void irq_state_set_masked(struct irq_desc *desc) #undef __irqd_to_state +extern atomic_t nr_active_irqs; /* # of active IRQs */ static inline void kstat_incr_irqs_this_cpu(struct irq_desc *desc) { - if (unlikely(__this_cpu_inc_return(*desc->kstat_irqs) == 1)) - atomic_inc(&desc->kstat_irq_cpus); + if (unlikely(__this_cpu_inc_return(*desc->kstat_irqs) == 1)) { + if (atomic_inc_return(&desc->kstat_irq_cpus) == 1) + atomic_inc(&nr_active_irqs); + } __this_cpu_inc(kstat.irqs_sum); } diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 3d2c38b..7e00c4d 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -20,6 +20,11 @@ #include "internals.h" /* + * Number of active IRQs + */ +atomic_t nr_active_irqs; + +/* * lockdep: we want to handle all irq_desc locks as a single lock-class: */ static struct lock_class_key irq_desc_lock_class; -- 1.8.3.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B569C43387 for ; Wed, 9 Jan 2019 19:21:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D9177214C6 for ; Wed, 9 Jan 2019 19:21:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728253AbfAITVE (ORCPT ); Wed, 9 Jan 2019 14:21:04 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34410 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728270AbfAITVD (ORCPT ); Wed, 9 Jan 2019 14:21:03 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5AAB75F; Wed, 9 Jan 2019 19:21:03 +0000 (UTC) Received: from llong.com (dhcp-17-223.bos.redhat.com [10.18.17.223]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0B5DC608DA; Wed, 9 Jan 2019 19:21:01 +0000 (UTC) From: Waiman Long To: Andrew Morton , Alexey Dobriyan , Kees Cook , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Davidlohr Bueso , Miklos Szeredi , Daniel Colascione , Dave Chinner , Randy Dunlap , Matthew Wilcox , Waiman Long Subject: [PATCH v3 3/4] genirq: Track the number of active IRQs Date: Wed, 9 Jan 2019 14:20:47 -0500 Message-Id: <1547061648-16080-4-git-send-email-longman@redhat.com> In-Reply-To: <1547061648-16080-1-git-send-email-longman@redhat.com> References: <1547061648-16080-1-git-send-email-longman@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 09 Jan 2019 19:21:03 +0000 (UTC) Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Message-ID: <20190109192047.906c2Fy13yfbDcZN0egE24myjvKF598o9QVJyJVv-u4@z> A new atomic variable nr_active_irqs is added to track the number of active IRQs that have one or more interrupts serviced. Signed-off-by: Waiman Long --- kernel/irq/internals.h | 7 +++++-- kernel/irq/irqdesc.c | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 31787c1..239ae51 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -242,10 +242,13 @@ static inline void irq_state_set_masked(struct irq_desc *desc) #undef __irqd_to_state +extern atomic_t nr_active_irqs; /* # of active IRQs */ static inline void kstat_incr_irqs_this_cpu(struct irq_desc *desc) { - if (unlikely(__this_cpu_inc_return(*desc->kstat_irqs) == 1)) - atomic_inc(&desc->kstat_irq_cpus); + if (unlikely(__this_cpu_inc_return(*desc->kstat_irqs) == 1)) { + if (atomic_inc_return(&desc->kstat_irq_cpus) == 1) + atomic_inc(&nr_active_irqs); + } __this_cpu_inc(kstat.irqs_sum); } diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 3d2c38b..7e00c4d 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -20,6 +20,11 @@ #include "internals.h" /* + * Number of active IRQs + */ +atomic_t nr_active_irqs; + +/* * lockdep: we want to handle all irq_desc locks as a single lock-class: */ static struct lock_class_key irq_desc_lock_class; -- 1.8.3.1