Re: [PATCH] x86/apic: reset LDR in clear_local_APIC

From: Thomas Gleixner
Date: Mon Aug 19 2019 - 17:07:11 EST


Bandan,

On Wed, 14 Aug 2019, Bandan Das wrote:
> On a 32 bit RHEL6 guest with greater than 8 cpus, the
> kdump kernel hangs when calibrating apic. This happens
> because when apic initializes bigsmp, it also initializes LDR
> even though it probably wouldn't be used.

'It probably wouldn't be used' is a not really a useful technical
statement.

Either it is used, then it needs to be handled. Or it is unused then why is
it written in the first place?

The bigsmp APIC uses physical destination mode because the logical flat
model only supports 8 APICs. So clearly bigsmp_init_apic_ldr() is bogus and
should be empty.

> When booting into kdump, KVM apic incorrectly reads the stale LDR
> values from the guest while building the logical destination map
> even for inactive vcpus. While KVM apic can be fixed to ignore apics
> that haven't been enabled, a simple guest only change can be to
> just clear out the LDR.

This does not make much sense either. What has KVM to do with logical
destination maps while booting the kdump kernel? The kdump kernel is not
going through the regular cold/warm boot process, so KVM does not even know
that the crashing kernel jumped into the kdump one.

What builds the logical destination maps and what has LDR and the KVM APIC
to do with that?

I'm not opposed to the change per se, but I'm not accepting change logs
which have the fairy tale smell.

Thanks,

tglx