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 CB0E53C6616 for ; Tue, 31 Mar 2026 07:26:04 +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=1774941964; cv=none; b=KnE3IrN092g1ZLfxGzvMDTBEgSnjqx5HQGLWU1xk4d1nUBQbAkO5k7zMvkUk57gHS5T6KommQNRlVmP+DGU9KynpYVB1em5qNYdiB2MnV1uLJCXk6wQvB/JsHRq3ZQlfNPDKvLVuELF5zJ+uVm1Uaya5ooLeGduwu65WFSPIQro= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774941964; c=relaxed/simple; bh=ZLmIvuPlb0X1zrvFItoDImyWe9LMqQj8d8lHL6FtJlI=; h=Date:Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=kH1npJL56obKMbCGEBrImNMdbD4A8EC0Qf9MbXNbBdsVc/GOcrp7B+wbCft7vFhTlNP8hen7I+PYYDo7ar45DVOscFqlqTk08SACQ4aE4bnbXla1wjlM2gxbCxOUYx7oyY3IovPttYueU10P8EWjUVr7xNatgry/rvumhUNtcWA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Fx42e/ob; 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="Fx42e/ob" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98D22C19423; Tue, 31 Mar 2026 07:26:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774941964; bh=ZLmIvuPlb0X1zrvFItoDImyWe9LMqQj8d8lHL6FtJlI=; h=Date:From:To:Cc:Subject:References:From; b=Fx42e/ob2N2uOubKb3RBFm5OhTXpFaltxafieWcxMDXSeVt/+4kopzVFVbQ48fi6n th3v/aQvT0J34+SYQ/bQX7LfWrJLeg4UKJxHY8lcUTyGc32pv2OgGU+GyIhNXsANgH hAp4zRd88U6Ill8EoxD8Z+7chv/MwntEWxEfv7tIadpgk/4ySA9Vokf6Gm8MSS/MLc HNXqi2PrJmHxKTP9YWUre8BP+a8FA3NFun8eA41zoZujAGDF1b1WVDTEG3k+hEatUf ZyGmtG3vd/y2V2/cLqDdTe+DshZeaq3xQ8NHwwqgvNDWaKQxAxc9CGstvOSGb7giXH IimxBOKz2t9Ew== Date: Tue, 31 Mar 2026 09:26:01 +0200 Message-ID: <20260331072419.015247250@kernel.org> User-Agent: quilt/0.68 From: Thomas Gleixner To: LKML Cc: x86@kernel.org, Michael Kelley , Dmitry Ilvokhin , Radu Rendec , Jan Kiszka , Kieran Bingham , Florian Fainelli , Marc Zyngier Subject: [patch V4 07/15] scripts/gdb: Update x86 interrupts to the array based storage References: <20260331071453.172185305@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 From: Thomas Gleixner x86 changed the interrupt statistics from a struct with individual members to an counter array. It also provides a corresponding info array with the strings for prefix and description and an indicator to skip the entry. Update the already out of sync GDB script to use the counter and the info array, which keeps the GDB script in sync automatically. Signed-off-by: Thomas Gleixner Tested-by: Florian Fainelli Reviewed-by: Florian Fainelli --- V4: Adopted to irq_stat_count_show bitmap and removed the duplicate ERR/MIS output V3: New patch - Radu --- scripts/gdb/linux/interrupts.py | 74 ++++++++-------------------------------- 1 file changed, 16 insertions(+), 58 deletions(-) --- a/scripts/gdb/linux/interrupts.py +++ b/scripts/gdb/linux/interrupts.py @@ -90,71 +90,29 @@ irq_desc_type = utils.CachedType("struct return text -def show_irq_err_count(prec): - cnt = utils.gdb_eval_or_none("irq_err_count") - text = "" - if cnt is not None: - 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) - return text - -def x86_show_mce(prec, var, pfx, desc): - pvar = gdb.parse_and_eval(var) - text = "%*s: " % (prec, pfx) - for cpu in cpus.each_online_cpu(): - text += "%10u " % (cpus.per_cpu(pvar, cpu).dereference()) - text += " %s\n" % (desc) + text += "%10u " % (stat.dereference()) + text += desc return text def x86_show_interupts(prec): - text = x86_show_irqstat(prec, "NMI", '__nmi_count', 'Non-maskable interrupts') + info_type = gdb.lookup_type('struct irq_stat_info') + info = gdb.parse_and_eval('irq_stat_info') + bitmap = gdb.parse_and_eval('irq_stat_count_show') + nbits = 8 * int(bitmap.type.sizeof) - 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") - - 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 += show_irq_err_count(prec) - - if constants.LX_CONFIG_X86_IO_APIC: - cnt = utils.gdb_eval_or_none("irq_mis_count") - 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') + text = "" + for idx in range(int(info.type.sizeof / info_type.sizeof)): + show = bitmap[idx / nbits] + if not show & 1 << (idx % nbits): + continue + pfx = info[idx]['symbol'].string() + desc = info[idx]['text'].string() + text += x86_show_irqstat(prec, pfx, idx, desc) return text