x86/APIC: modify error_interrupt() to output using single printk()

This takes care of the issue of APIC errors tending to occur on multiple
cores at once.  In turn this tends to causes the error messages to be
merged together, making understanding them difficult.

Signed-off-by: Elliott Mitchell <ehem+xen@m5p.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Elliott Mitchell authored and Jan Beulich committed 2023-07-13 16:58:56 +02:00
1 parent 013670adf5
commit 6960e343d6
1 file changed
+7 -5
+7 -5
View File
@@ -1410,6 +1410,7 @@ static void cf_check error_interrupt(struct cpu_user_regs *regs)
", Received illegal vector",
", Illegal register address",
};
const char *entries[ARRAY_SIZE(esr_fields)];
unsigned int v, v1;
int i;
@@ -1419,12 +1420,13 @@ static void cf_check error_interrupt(struct cpu_user_regs *regs)
v1 = apic_read(APIC_ESR);
ack_APIC_irq();
printk(XENLOG_DEBUG "APIC error on CPU%u: %02x(%02x)",
smp_processor_id(), v , v1);
for ( i = 7; i >= 0; --i )
if ( v1 & (1 << i) )
printk("%s", esr_fields[i]);
printk("\n");
entries[i] = v1 & (1 << i) ? esr_fields[i] : "";
printk(XENLOG_DEBUG
"APIC error on CPU%u: %02x(%02x)%s%s%s%s%s%s%s%s\n",
smp_processor_id(), v, v1,
entries[7], entries[6], entries[5], entries[4],
entries[3], entries[2], entries[1], entries[0]);
}
/*
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.