From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Xu Subject: Re: [PATCH 2/9] KVM: x86: dynamic kvm_apic_map Date: Mon, 30 May 2016 13:24:09 +0800 Message-ID: <20160530052409.GA6656@pxdev.xzpeter.org> References: <1462568045-31085-1-git-send-email-rkrcmar@redhat.com> <1462568045-31085-3-git-send-email-rkrcmar@redhat.com> <20160523080401.GC8247@pxdev.xzpeter.org> <20160525161459.GF14795@potion> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: kvm@vger.kernel.org, Paolo Bonzini , "Lan, Tianyu" , Igor Mammedov , Jan Kiszka To: Radim =?utf-8?B?S3LEjW3DocWZ?= Return-path: Received: from mx1.redhat.com ([209.132.183.28]:52939 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751093AbcE3FYT (ORCPT ); Mon, 30 May 2016 01:24:19 -0400 Content-Disposition: inline In-Reply-To: <20160525161459.GF14795@potion> Sender: kvm-owner@vger.kernel.org List-ID: On Wed, May 25, 2016 at 06:15:00PM +0200, Radim Kr=C4=8Dm=C3=A1=C5=99 w= rote: > 2016-05-23 16:04+0800, Peter Xu: > > Hi, Radim, > >=20 > > Got several questions inline. > >=20 > > On Fri, May 06, 2016 at 10:53:58PM +0200, Radim Kr=C4=8Dm=C3=A1=C5=99= wrote: > >> x2APIC supports up to 2^32-1 LAPICs, but most guest in coming year= s will > >> have slighly less VCPUs. Dynamic size saves memory at the cost of > >> turning one constant into a variable. > >=20 > > From the manual, I see x2apic only support 2^20-16 processors, not > > 2^32-1. Which one is correct? >=20 > "up to" is a crucial part. Physical x2APIC can address 2^32-1, logic= al > x2APIC can address (2^16-1)*16 LAPICs and the OS can choose which mod= e > to use. >=20 > 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. >=20 > (Well, broadcasts would make even xAPIC "support" an unbounded amount= of > LAPICs. :]) >=20 > > 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. > >=20 > > [...] > >=20 > >> +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 =3D (dest_id >> 16) * 16; > >> + // XXX: phys_map must be allocated as multiples of 16 > >> + if (offset < map->size) { > >> + *cluster =3D &map->phys_map[offset]; > >> + *mask =3D dest_id & 0xffff; > >=20 > > [1] >=20 > This function is called ...get_LOGICAL_dest, so only logical addresse= s > are going to be passed to it. Yes, it cannot handle APIC ID > 2^20-1= 6. Thanks for the explanation. I thought x2apic only support logical mode, seems I was wrong. :) -- peterx