On Wed, May 25, 2016 at 06:15:00PM +0200, Radim Krčmář wrote: > 2016-05-23 16:04+0800, Peter Xu: > > Hi, Radim, > > > > Got several questions inline. > > > > On Fri, May 06, 2016 at 10:53:58PM +0200, Radim Krčmář wrote: > >> x2APIC supports up to 2^32-1 LAPICs, but most guest in coming years will > >> have slighly less VCPUs. Dynamic size saves memory at the cost of > >> turning one constant into a variable. > > > > From the manual, I see x2apic only support 2^20-16 processors, not > > 2^32-1. Which one is correct? > > "up to" is a crucial part. Physical x2APIC can address 2^32-1, logical > x2APIC can address (2^16-1)*16 LAPICs and the OS can choose which mode > to use. > > I think that machines with APIC IDs >2^20 will still be able to use > logical x2APIC, but higher APIC IDs are only be addressable with > physical x2APIC. > > (Well, broadcasts would make even xAPIC "support" an unbounded amount of > LAPICs. :]) > > > From below codes [1], I still see 2^20-16, since we are using high > > 16 bits of dest ID as cluster ID (0-0xfffe, while I guess 0xffff > > should be reserved), and lower 16 bits as processor/lapic mask. > > > > [...] > > > >> +static inline bool kvm_apic_map_get_logical_dest(struct kvm_apic_map *map, > >> + u32 dest_id, struct kvm_lapic ***cluster, u16 *mask) { > >> + switch (map->mode) { > >> + case KVM_APIC_MODE_X2APIC: { > >> + u32 offset = (dest_id >> 16) * 16; > >> + // XXX: phys_map must be allocated as multiples of 16 > >> + if (offset < map->size) { > >> + *cluster = &map->phys_map[offset]; > >> + *mask = dest_id & 0xffff; > > > > [1] > > This function is called ...get_LOGICAL_dest, so only logical addresses > are going to be passed to it. Yes, it cannot handle APIC ID > 2^20-16. Thanks for the explanation. I thought x2apic only support logical mode, seems I was wrong. :) -- peterx -- 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