On 17/09/2015 17:58, Radim Krčmář wrote: > For interrupts from MSI and IOxAPIC: > - Flat logical interrupts are delivered as if we had natural > (CPU0<->bit0, CPU1<->bit1, ...) flat logical xAPIC for first 8 VCPUs. > - Cluster logical doesn't work much, it's interpreted like flat logical. > I didn't care about xAPIC cluster because Linux, the sole user of our > paravirtualized x2APIC, doesn't configure it. > > I'll paste kvm_apic_mda() source for better explanation: > > static u32 kvm_apic_mda(unsigned int dest_id, struct kvm_lapic *source, > struct kvm_lapic *target) > { > bool ipi = source != NULL; > bool x2apic_mda = apic_x2apic_mode(ipi ? source : target); > > if (!ipi && dest_id == APIC_BROADCAST && x2apic_mda) > return X2APIC_BROADCAST; > > return x2apic_mda ? dest_id : SET_APIC_DEST_FIELD(dest_id); > } > > MSI/IOxAPIC interrupt means that source is NULL and if the target is in > x2APIC mode, the original 'dest_id' is returned as mda => a flat logical > xAPIC to 0x0f will get interpreted as (cluster) logical x2APIC 0xf in > kvm_apic_match_logical_addr(). > xAPIC address are only 8 bit long so they always get delivered to x2APIC > cluster 0, where first 16 bits work like xAPIC flat logical mode. Ok, I was wondering whether this was the correct interpretation. Thanks! Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html