Date: Thu, 23 Jul 2026 10:01:20 +0000 From: Olivier Certner <olce@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Konstantin Belousov <kib@FreeBSD.org> Subject: git: 60d7891a52cd - stable/14 - x86 lapic: Dump LVTs from the ddb show lapic command Message-ID: <6a61e670.3aecc.7a9b69d9@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/14 has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=60d7891a52cdd7e34e60d225a785db2efe33fbb6 commit 60d7891a52cdd7e34e60d225a785db2efe33fbb6 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2026-01-22 18:00:56 +0000 Commit: Olivier Certner <olce@FreeBSD.org> CommitDate: 2026-07-23 09:59:17 +0000 x86 lapic: Dump LVTs from the ddb show lapic command (cherry picked from commit dfc4186c6dcf2986b510fac108784011a236554d) (cherry picked from commit 854e0e4803789c669edeff7c31e1ed4fd66e64b7) --- sys/x86/x86/local_apic.c | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index 675ec7a9c051..cb045399e3da 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -134,6 +134,7 @@ struct lvt { u_int lvt_mode:16; u_int lvt_vector:8; u_int lvt_reg; + const char *lvt_desc; }; struct lapic { @@ -163,6 +164,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_EXTINT, .lvt_vector = 0, .lvt_reg = LAPIC_LVT_LINT0, + .lvt_desc = "LINT0", }, /* LINT1: NMI */ [APIC_LVT_LINT1] = { @@ -173,6 +175,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_NMI, .lvt_vector = 0, .lvt_reg = LAPIC_LVT_LINT1, + .lvt_desc = "LINT1", }, [APIC_LVT_TIMER] = { .lvt_edgetrigger = 1, @@ -182,6 +185,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = APIC_TIMER_INT, .lvt_reg = LAPIC_LVT_TIMER, + .lvt_desc = "TIMER", }, [APIC_LVT_ERROR] = { .lvt_edgetrigger = 1, @@ -191,6 +195,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = APIC_ERROR_INT, .lvt_reg = LAPIC_LVT_ERROR, + .lvt_desc = "ERROR", }, [APIC_LVT_PMC] = { .lvt_edgetrigger = 1, @@ -200,6 +205,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_NMI, .lvt_vector = 0, .lvt_reg = LAPIC_LVT_PCINT, + .lvt_desc = "PMC", }, [APIC_LVT_THERMAL] = { .lvt_edgetrigger = 1, @@ -209,6 +215,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = APIC_THERMAL_INT, .lvt_reg = LAPIC_LVT_THERMAL, + .lvt_desc = "THERM", }, [APIC_LVT_CMCI] = { .lvt_edgetrigger = 1, @@ -218,6 +225,7 @@ static struct lvt lvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = APIC_CMC_INT, .lvt_reg = LAPIC_LVT_CMCI, + .lvt_desc = "CMCI", }, }; @@ -231,6 +239,7 @@ static struct lvt elvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = 0, .lvt_reg = LAPIC_EXT_LVT0, + .lvt_desc = "ELVT0", }, [APIC_ELVT_MCA] = { .lvt_edgetrigger = 1, @@ -240,6 +249,7 @@ static struct lvt elvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = APIC_CMC_INT, .lvt_reg = LAPIC_EXT_LVT1, + .lvt_desc = "MCA", }, [APIC_ELVT_DEI] = { .lvt_edgetrigger = 1, @@ -249,6 +259,7 @@ static struct lvt elvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = 0, .lvt_reg = LAPIC_EXT_LVT2, + .lvt_desc = "ELVT2", }, [APIC_ELVT_SBI] = { .lvt_edgetrigger = 1, @@ -258,6 +269,7 @@ static struct lvt elvts[] = { .lvt_mode = APIC_LVT_DM_FIXED, .lvt_vector = 0, .lvt_reg = LAPIC_EXT_LVT3, + .lvt_desc = "ELVT3", }, }; @@ -1972,18 +1984,34 @@ dump_mask(const char *prefix, uint32_t v, int base) /* Show info from the lapic regs for this CPU. */ DB_SHOW_COMMAND_FLAGS(lapic, db_show_lapic, DB_CMD_MEMSAFE) { - uint32_t v; + const struct lvt *l; + int elvt_count, lvts_count, i; + uint32_t v, vr; db_printf("lapic ID = %d\n", lapic_id()); v = lapic_read32(LAPIC_VERSION); - db_printf("version = %d.%d\n", (v & APIC_VER_VERSION) >> 4, - v & 0xf); + db_printf("version = %d.%d (%#x) \n", (v & APIC_VER_VERSION) >> 4, + v & 0xf, v); db_printf("max LVT = %d\n", lapic_maxlvt(v)); - v = lapic_read32(LAPIC_SVR); - db_printf("SVR = %02x (%s)\n", v & APIC_SVR_VECTOR, - v & APIC_SVR_ENABLE ? "enabled" : "disabled"); + vr = lapic_read32(LAPIC_SVR); + db_printf("SVR = %02x (%s)\n", vr & APIC_SVR_VECTOR, + vr & APIC_SVR_ENABLE ? "enabled" : "disabled"); db_printf("TPR = %02x\n", lapic_read32(LAPIC_TPR)); + lvts_count = min(nitems(lvts), lapic_maxlvt(v) + 1); + for (i = 0; i < lvts_count; i++) { + l = &lvts[i]; + db_printf("LVT%d (reg %#x %-5s) = %#010x\n", i, l->lvt_reg, + l->lvt_desc, lapic_read32(l->lvt_reg)); + } + + elvt_count = amd_read_elvt_count(); + for (i = 0; i < elvt_count; i++) { + l = &elvts[i]; + db_printf("ELVT%d (reg %#x %-5s) = %#010x\n", i, l->lvt_reg, + l->lvt_desc, lapic_read32(l->lvt_reg)); + } + #define dump_field(prefix, regn, index) \ dump_mask(__XSTRING(prefix ## index), \ lapic_read32(LAPIC_ ## regn ## index), \home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a61e670.3aecc.7a9b69d9>
