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 E07E73822A3 for ; Wed, 1 Apr 2026 21:52:10 +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=1775080330; cv=none; b=itUnuhZ4jaZ8R7CxcZ4cO5nanmGu26cIi90N+BB9V2Phin3LIXLSmqprFi/o+tkUt8jaajkzY8fDZLDQhKmB6duhR/N2213RREgkO67LtXoq9N3uLOJzq1I/3C5hbBa4XDzXLQWezwkGlTIjzxpZtYcB6OKTl+5qCXWczKp4FoM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775080330; c=relaxed/simple; bh=v+Y2UuYBp6qB050jd82dFr6sAdIEbFWJGxJyT4B01lc=; h=Date:Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=D83zv/ze98ZD7MllDH4a2qqk8qvouLEaW6ud2n43Vgn1IZlcUN4htV5QX+xkDHMX3vRirwGZAfieGYOnhDEFQ81wb1iV3qmz32bSshcK7yCnbPoBv3ELbgdp2BJ8ZbdB7rIo5vuN6lw6GNmYjsilcTMloC3SmsLklZh8bVoCyEE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QC/bwn1Q; 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="QC/bwn1Q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E7B02C4CEF7; Wed, 1 Apr 2026 21:52:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775080330; bh=v+Y2UuYBp6qB050jd82dFr6sAdIEbFWJGxJyT4B01lc=; h=Date:From:To:Cc:Subject:References:From; b=QC/bwn1Ql6OADc75Qy8Xs6+Sg52bob7BvTkZTgJuzIPS48ERTysEEnq88zCwairue 8uHHfunfTCX8bPL1kPkzo9LenNfQA2eZTn8M+WXQ3ldkNafvWhpqK0d68h6ePc33mK A+vrfgOfCLnjPv642MbUpnNt3zL3Y+bMiMjddPYSPSrsAuHFDSfA8KiFqQLnJi2sMq wxILaOtVihdL14aRSBgESytyNth+NZMHQet84ej74Cmgfc5QXX0QFSB1zyobAqPBTz sL1r79tkUYPCnMIutVNmpRLUJ4v4bbwrwH5QwAhJAFUOAsj8yvu3kX/xx7qZ1blwE3 mnwLr0gGU4asA== Date: Wed, 01 Apr 2026 23:52:07 +0200 Message-ID: <20260401201348.491212585@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 V5 07/15] scripts/gdb: Update x86 interrupts to the array based storage References: <20260401195625.213446764@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 --- V5: Bring the show_err_irq() back as it is used on mips Fix the index calculation for the show bitmap so it works with more than one unsigned long. V4: Adopted to irq_stat_count_show bitmap and removed the duplicate ERR/MIS output V3: New patch - Radu --- scripts/gdb/linux/interrupts.py | 81 +++++++++++----------------------------- 1 file changed, 23 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') + bitsperlong = 8 * int(bitmap.type.target().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[int(idx / bitsperlong)] + if not show & 1 << int(idx % bitsperlong): + continue + pfx = info[idx]['symbol'].string() + desc = info[idx]['text'].string() + text += x86_show_irqstat(prec, pfx, idx, desc) return text @@ -187,6 +145,13 @@ irq_desc_type = utils.CachedType("struct text += "%*s: %10lu\n" % (prec, "ERR", gdb.parse_and_eval("irq_err_count")) 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 arch_show_interrupts(prec): text = "" if utils.is_target_arch("x86"):