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: Eduardo Habkost <ehabk...@redhat.com> -- Eduardo