Reserved fields in SMRAM CPU states could be non-zero even if the corresponding APICs are NOT used. This breaks the assumption that SMRAM CPU state is zero cleared if and only if the APIC corresponding to the entry is NOT used. As the result, help -D lists uninteresting entries as below: APIC ID: 14 RIP: 0000000000000000 RSP: 0000000000000000 RBP: 0000000000000000 RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 SMM REV: 00000000 SMM BASE 00000000 CS : 00000000 DS: 00000000 SS: 00000000 ES: 00000000 FS: 00000000 GS : 00000000 CR0: 0000000000000000 CR3: 0000000000000000 CR4: 00000000 GDT: 0000000000000000 LDT: 0000000000000000 IDT: 0000000000000000 GDTlim: 00000000 LDTlim: 00000000 IDTlim: 00000000 LDTR: 00000000 TR: 00000000 RFLAGS: 0000000000000000 EPTP: 0000000000000000 EPTP_SETTING: 00000000 DR6: 0000000000000000 DR7: 0000000000000000 Ia32Efer: 0000000000000000 IoMemAddr: 0000000000000000 IoEip: 0000000000000000 IoMisc: 00000000 LdtInfo: 00000000 IoInstructionRestart: 0000 AutoHaltRestart: 0000 To fix this issue, mask reserved fields before comparison. Signed-off-by: HATAYAMA Daisuke <d.hatayama@xxxxxxxxxxx> --- sadump.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sadump.c b/sadump.c index 009e17a..f313528 100644 --- a/sadump.c +++ b/sadump.c @@ -51,6 +51,7 @@ static int cpu_to_apicid(int cpu, int *apicid); static int get_sadump_smram_cpu_state(int cpu, struct sadump_smram_cpu_state *smram); static int block_table_init(void); static uint64_t pfn_to_block(uint64_t pfn); +static void mask_reserved_fields(struct sadump_smram_cpu_state *smram); struct sadump_data * sadump_get_sadump_data(void) @@ -1040,6 +1041,15 @@ int sadump_memory_dump(FILE *fp) "cpu_state\n"); return FALSE; } + /* + * Reserved fields in SMRAM CPU states could + * be non-zero even if the corresponding APICs + * are NOT used. This breaks the assumption + * that SMRAM CPU state is zero cleared if and + * only if the APIC corresponding to the entry + * is NOT used. + */ + mask_reserved_fields(&scs); if (memcmp(&scs, &zero, sizeof(scs)) != 0) { fprintf(fp, "\n"); display_smram_cpu_state(aid, &scs); @@ -1707,3 +1717,15 @@ sadump_get_cr3_idtr(ulong *cr3, ulong *idtr) return TRUE; } #endif /* X86_64 */ + +static void +mask_reserved_fields(struct sadump_smram_cpu_state *smram) +{ + memset(smram->Reserved1, 0, sizeof(smram->Reserved1)); + memset(smram->Reserved2, 0, sizeof(smram->Reserved2)); + memset(smram->Reserved3, 0, sizeof(smram->Reserved3)); + memset(smram->Reserved4, 0, sizeof(smram->Reserved4)); + memset(smram->Reserved5, 0, sizeof(smram->Reserved5)); + memset(smram->Reserved6, 0, sizeof(smram->Reserved6)); + memset(smram->Reserved7, 0, sizeof(smram->Reserved7)); +} -- 1.8.3.1 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility