On Mon, Oct 10, 2016 at 05:28:47PM +0200, Radim Krčmář wrote:
> Cluster x2APIC cannot work without KVM's x2apic API when the maximal
> APIC ID is greater than 8 and only KVM's LAPIC can support x2APIC, so we
> forbid other APICs and also the old KVM case with less than 9, to
> simplify the code.
> There is no point in enabling EIM in forbidden APICs, so we keep it
> enabled only for the KVM APIC; unconditionally, because making the
> option depend on KVM version would be a maintanance burden.
> Old QEMUs would enable eim whenever intremap was on, which would trick
> guests into thinking that they can enable cluster x2APIC even if any
> interrupt destination would get clamped to 8 bits.
> Depending on your configuration, QEMU could notice that the destination
> LAPIC is not present and report it with a very non-obvious:
> KVM: injection failed, MSI lost (Operation not permitted)
> Or the guest could say something about unexpected interrupts, because
> clamping leads to aliasing so interrupts were being delivered to
> incorrect VCPUs.
> KVM_X2APIC_API is the feature that allows us to enable EIM for KVM.
> QEMU 2.7 allowed EIM whenever interrupt remapping was enabled. In order
> to keep backward compatibility, we again allow guests to misbehave in
> non-obvious ways, and make it the default for old machine types.
> A user can enable the buggy mode it with "x-buggy-eim=on".
> Signed-off-by: Radim Krčmář <rkrc...@redhat.com>
Reviewed-by: Peter Xu <pet...@redhat.com>