From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 C7E443750CF for ; Wed, 25 Mar 2026 22:52:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774479167; cv=none; b=JYazpVMNlfYqL4n6Fk1HPHjv0lvakZEVm51Q8tiTf22pkyYqlKnbMpHoSex+JEQPgCISWEs3e5JIg82pxljOVvd0Uslny6C3aXVtnUVd95a8Hzr4vegdEPk+BELQ729RgZtz4qoMg99z+oMQWeekDr9YBz0BGMZSxcXkaYeA4cc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774479167; c=relaxed/simple; bh=cIH9gMrxtkb7VPb1fFzx0in7PKLsP5CWzryD4bbR+Bk=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=n0wIyyBMtXUR+32N1L/6uc6ovuf8ioSBCRgdRJfB9ImKeWRCPJkLOmbylRCViRcot+8wlzN1TdngHP40azr6ISQKbqhHRqCRdzwpWy8ov0u2e37xPi5B8Wh9aOc0X3xzLZfHyEnsNVSAIdBxs1J7gYAhUVGMvi75PLPJIfacK48= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TnwLYGxq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TnwLYGxq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9759FC4CEF7; Wed, 25 Mar 2026 22:52:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774479167; bh=cIH9gMrxtkb7VPb1fFzx0in7PKLsP5CWzryD4bbR+Bk=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=TnwLYGxqUDEVqrAGEN9dXiu8TJOxfaBXsbJw1ogmeuBGIx3wH4NzCFjfVBrnzNE8j C1IkEKGdYB6q7tdC6NiDLCkvCkZ1Pwry5rEhhERdAvoL4avNsbeVPw6oUrPFjaCMI3 rRdmvFAtrOiR8XHoHpaesFeNeEu66iaN9Kl+H0cyyy2qoZaDWJwEjvQtvHKi0SPACc 7inp3y7ocnesYAjsEtiTKhwQjdtVlJpYMVy+3w15lDrqR1GwZpBiRU6o3yROb5lqBu ACixnydJtjQF+Ipgg5+r7XVDbN490dtoydQq8eKL07whdYCH3krqmkjWLwvI+BiQR7 CEG9YGMi+XI+g== From: Thomas Gleixner To: Radu Rendec , LKML Cc: x86@kernel.org, Dmitry Ilvokhin , Neil Horman , Florian Fainelli Subject: Re: [patch v2 04/14] x86/irq: Make irqstats array based In-Reply-To: References: <20260320131108.344376329@kernel.org> <20260320132102.297759330@kernel.org> <874im5gfzp.ffs@tglx> <871ph9ges3.ffs@tglx> Date: Wed, 25 Mar 2026 23:52:43 +0100 Message-ID: <87bjgbed38.ffs@tglx> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain On Wed, Mar 25 2026 at 15:20, Radu Rendec wrote: > On Tue, 2026-03-24 at 16:32 -0400, Radu Rendec wrote: > > I tested it, and it's very close but requires a few extra changes, > which I included as a patch at the bottom. All of this is overly complicated. That can directly use the irq_stat_info array and therefore stays always in sync without ever touching that python nightmare again. Replacement patch below (works only after 5/14 obviously). > There's one more gotcha: in the next patch (patch 5) you rename nr_irqs > to total_nr_irqs, and the change must be applied to interrupts.py as > well. It's used at the beginning of the LxInterruptList.invoke() > function. Sigh, yes. This GDB python insanity is a pain, debugging it even more so. Thanks, tglx --- diff --git a/scripts/gdb/linux/interrupts.py b/scripts/gdb/linux/interrupts.py index f4f715a8f0e3..7fde52317e84 100644 --- a/scripts/gdb/linux/interrupts.py +++ b/scripts/gdb/linux/interrupts.py @@ -97,13 +97,13 @@ def show_irq_err_count(prec): text += "%*s: %10u\n" % (prec, "ERR", cnt['counter']) return text -def x86_show_irqstat(prec, pfx, field, desc): - irq_stat = gdb.parse_and_eval("&irq_stat") +def x86_show_irqstat(prec, pfx, idx, desc): + irq_stat = gdb.parse_and_eval("&irq_stat.counts[%d]" %idx) text = "%*s: " % (prec, pfx) for cpu in cpus.each_online_cpu(): stat = cpus.per_cpu(irq_stat, cpu) - text += "%10u " % (stat[field]) - text += " %s\n" % (desc) + text += "%10u " % (stat.dereference()) + text += desc return text def x86_show_mce(prec, var, pfx, desc): @@ -115,34 +115,14 @@ def x86_show_mce(prec, var, pfx, desc): return text def x86_show_interupts(prec): - text = x86_show_irqstat(prec, "NMI", '__nmi_count', 'Non-maskable interrupts') - - if constants.LX_CONFIG_X86_LOCAL_APIC: - text += x86_show_irqstat(prec, "LOC", 'apic_timer_irqs', "Local timer interrupts") - text += x86_show_irqstat(prec, "SPU", 'irq_spurious_count', "Spurious interrupts") - text += x86_show_irqstat(prec, "PMI", 'apic_perf_irqs', "Performance monitoring interrupts") - text += x86_show_irqstat(prec, "IWI", 'apic_irq_work_irqs', "IRQ work interrupts") - text += x86_show_irqstat(prec, "RTR", 'icr_read_retry_count', "APIC ICR read retries") - if utils.gdb_eval_or_none("x86_platform_ipi_callback") is not None: - text += x86_show_irqstat(prec, "PLT", 'x86_platform_ipis', "Platform interrupts") - - if constants.LX_CONFIG_SMP: - text += x86_show_irqstat(prec, "RES", 'irq_resched_count', "Rescheduling interrupts") - text += x86_show_irqstat(prec, "CAL", 'irq_call_count', "Function call interrupts") - text += x86_show_irqstat(prec, "TLB", 'irq_tlb_count', "TLB shootdowns") - - if constants.LX_CONFIG_X86_THERMAL_VECTOR: - text += x86_show_irqstat(prec, "TRM", 'irq_thermal_count', "Thermal events interrupts") + info_type = gdb.lookup_type('struct irq_stat_info') + info = gdb.parse_and_eval('irq_stat_info') - if constants.LX_CONFIG_X86_MCE_THRESHOLD: - text += x86_show_irqstat(prec, "THR", 'irq_threshold_count', "Threshold APIC interrupts") - - if constants.LX_CONFIG_X86_MCE_AMD: - text += x86_show_irqstat(prec, "DFR", 'irq_deferred_error_count', "Deferred Error APIC interrupts") - - if constants.LX_CONFIG_X86_MCE: - text += x86_show_mce(prec, "&mce_exception_count", "MCE", "Machine check exceptions") - text += x86_show_mce(prec, "&mce_poll_count", "MCP", "Machine check polls") + text = "" + for idx in range(int(info.type.sizeof / info_type.sizeof)): + pfx = info[idx]['symbol'].string() + desc = info[idx]['text'].string() + text += x86_show_irqstat(prec, pfx, idx, desc) text += show_irq_err_count(prec) @@ -151,11 +131,6 @@ def x86_show_interupts(prec): if cnt is not None: text += "%*s: %10u\n" % (prec, "MIS", cnt['counter']) - if constants.LX_CONFIG_KVM: - text += x86_show_irqstat(prec, "PIN", 'kvm_posted_intr_ipis', 'Posted-interrupt notification event') - text += x86_show_irqstat(prec, "NPI", 'kvm_posted_intr_nested_ipis', 'Nested posted-interrupt event') - text += x86_show_irqstat(prec, "PIW", 'kvm_posted_intr_wakeup_ipis', 'Posted-interrupt wakeup event') - return text def arm_common_show_interrupts(prec): @@ -209,7 +184,7 @@ class LxInterruptList(gdb.Command): super(LxInterruptList, self).__init__("lx-interruptlist", gdb.COMMAND_DATA) def invoke(self, arg, from_tty): - nr_irqs = gdb.parse_and_eval("nr_irqs") + nr_irqs = gdb.parse_and_eval("total_nr_irqs") prec = 3 j = 1000 while prec < 10 and j <= nr_irqs: