[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1547054628-12703-4-git-send-email-longman@redhat.com>
Date: Wed, 9 Jan 2019 12:23:47 -0500
From: Waiman Long <longman@...hat.com>
To: Andrew Morton <akpm@...ux-foundation.org>,
Alexey Dobriyan <adobriyan@...il.com>,
Kees Cook <keescook@...omium.org>,
Thomas Gleixner <tglx@...utronix.de>
Cc: linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org,
Davidlohr Bueso <dave@...olabs.net>,
Miklos Szeredi <miklos@...redi.hu>,
Daniel Colascione <dancol@...gle.com>,
Dave Chinner <david@...morbit.com>,
Randy Dunlap <rdunlap@...radead.org>,
Matthew Wilcox <willy@...radead.org>,
Waiman Long <longman@...hat.com>
Subject: [PATCH v2 3/4] genirq: Track the number of active IRQs
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 <longman@...hat.com>
---
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
Powered by blists - more mailing lists