From nobody Mon Jun 8 20:45:50 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 690E6403151; Tue, 26 May 2026 14:22:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779805361; cv=none; b=IPkYNYbAfnXnfCF2NrIVWZYaBXnJJI3Qy3Nn/HkEci7pH6ktcY5RDaJ2J0Z1heD3NWNQSy//ftzfBwGqNb4zY9PqxYjv9hjF43j/eShmiTjrhvXZJOytGfiHabnpGbergYH07DTyzS4SfHfiJyxw88fYXHMf4T5lzcvUHhGH4Pk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779805361; c=relaxed/simple; bh=4LnL2MPSqRkLT4xq6YyasPdIbyeF4YX14E/lepA58tQ=; h=Date:From:To:Subject:Cc:In-Reply-To:References:MIME-Version: Message-ID:Content-Type; b=QYtEUf7kzRm2P3Pows01D9gDtV2ymA/XGEISLe1HWON+/W1oqHS6rDnbaIH1a6IiGlrsF5Ty7mQvdOYA8gdI6gvNVMQ5fGYbS7BA6S/JeMLC7etOqK0UCMi2AG63b75pB8db/psJLcEU1SzjTRZnIP3WwfEJM1baXlr8bnWdajY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=ARqDYoVO; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=3ehEfJ9Q; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="ARqDYoVO"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="3ehEfJ9Q" Date: Tue, 26 May 2026 14:22:37 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1779805358; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PYNkamlDnxIhlybPccOAfKJWIw1LgYgwbo7Zt2o5R98=; b=ARqDYoVOLKEBm1fejjIQIvqmbhXimpeYdyIjqeEX3fFvYHmuDsxB8l/meD0kyFzSI2oV6t qullnU6rj07O5YDq4u8nIMmBzzRgahIE4zdCJxm7pRdBlLiMmXRWyYrE1O1QHgVrwWlRdx UX2nOVodTkE/shodZw2Kwjz+HLsqR/pY3W6wGwGY0M0JjYU5fTpEOgDslxw73bYOpN+3xD DBoOu95GHD5xcYqIC+8wemOvVxNet5bgb6Q/9pxIcQX05RfmuhjT3TnIAiPpAXY7yk/Uq1 ybbaVdfytevH8EkcfmxsIJU22/EpWdwlWwMpBDIz8SVEOaAybYqlPekojZnu+g== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1779805358; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PYNkamlDnxIhlybPccOAfKJWIw1LgYgwbo7Zt2o5R98=; b=3ehEfJ9QIWSzMQvs8VTj8Y6rGvj7fdl/eNzj0WKhhWE+gvXhrWLim9IBEKmThRnjTgS+UT 70xISfAztcGDkoDQ== From: "tip-bot2 for Thomas Gleixner" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: irq/core] genirq/proc: Avoid formatting zero counts in /proc/interrupts Cc: Thomas Gleixner , Michael Kelley , Dmitry Ilvokhin , Radu Rendec , Shrikanth Hegde , x86@kernel.org, linux-kernel@vger.kernel.org, maz@kernel.org In-Reply-To: <20260517194931.034728540@kernel.org> References: <20260517194931.034728540@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-ID: <177980535713.1039918.6894005561793540681.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Precedence: bulk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The following commit has been merged into the irq/core branch of tip: Commit-ID: 95c33a64f203be444954a1e1d855a4820c4f0efa Gitweb: https://git.kernel.org/tip/95c33a64f203be444954a1e1d855a4820= c4f0efa Author: Thomas Gleixner AuthorDate: Sun, 17 May 2026 22:01:38 +02:00 Committer: Thomas Gleixner CommitterDate: Tue, 26 May 2026 16:21:11 +02:00 genirq/proc: Avoid formatting zero counts in /proc/interrupts A large portion of interrupt count entries are zero. There is no point in formatting the zero value as it is way cheeper to just emit a constant string. Collect the number of consecutive zero counts and emit them in one go before a non-zero count and at the end of the line. Signed-off-by: Thomas Gleixner Tested-by: Michael Kelley Reviewed-by: Dmitry Ilvokhin Reviewed-by: Radu Rendec Reviewed-by: Shrikanth Hegde Link: https://patch.msgid.link/20260517194931.034728540@kernel.org --- include/linux/interrupt.h | 1 +- kernel/irq/proc.c | 43 +++++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 6cd26ff..3bf969a 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -864,6 +864,7 @@ static inline void init_irq_proc(void) struct seq_file; int show_interrupts(struct seq_file *p, void *v); int arch_show_interrupts(struct seq_file *p, int prec); +void irq_proc_emit_counts(struct seq_file *p, unsigned int __percpu *cnts); =20 extern int early_irq_init(void); extern int arch_probe_nr_irqs(void); diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index dfa0b07..378b523 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -451,6 +451,43 @@ int __weak arch_show_interrupts(struct seq_file *p, in= t prec) # define ACTUAL_NR_IRQS irq_get_nr_irqs() #endif =20 +/* Same as seq_put_decimal_ull_width(p, " ", cnt, 10) */ +#define ZSTR1 " 0" +#define ZSTR1_LEN (sizeof(ZSTR1) - 1) +#define ZSTR16 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 \ + ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 ZSTR1 +#define ZSTR256 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 \ + ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 ZSTR16 + +static inline void irq_proc_emit_zero_counts(struct seq_file *p, unsigned = int zeros) +{ + if (!zeros) + return; + + for (unsigned int n =3D min(zeros, 256); n; zeros -=3D n, n =3D min(zeros= , 256)) + seq_write(p, ZSTR256, n * ZSTR1_LEN); +} + +static inline unsigned int irq_proc_emit_count(struct seq_file *p, unsigne= d int cnt, + unsigned int zeros) +{ + if (!cnt) + return zeros + 1; + + irq_proc_emit_zero_counts(p, zeros); + seq_put_decimal_ull_width(p, " ", cnt, 10); + return 0; +} + +void irq_proc_emit_counts(struct seq_file *p, unsigned int __percpu *cnts) +{ + unsigned int cpu, zeros =3D 0; + + for_each_online_cpu(cpu) + zeros =3D irq_proc_emit_count(p, per_cpu(*cnts, cpu), zeros); + irq_proc_emit_zero_counts(p, zeros); +} + int show_interrupts(struct seq_file *p, void *v) { const unsigned int nr_irqs =3D irq_get_nr_irqs(); @@ -486,11 +523,7 @@ int show_interrupts(struct seq_file *p, void *v) return 0; =20 seq_printf(p, "%*d:", prec, i); - for_each_online_cpu(j) { - unsigned int cnt =3D desc->kstat_irqs ? per_cpu(desc->kstat_irqs->cnt, j= ) : 0; - - seq_put_decimal_ull_width(p, " ", cnt, 10); - } + irq_proc_emit_counts(p, &desc->kstat_irqs->cnt); seq_putc(p, ' '); =20 guard(raw_spinlock_irq)(&desc->lock);