[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending o
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode |
Date: |
Tue, 18 Oct 2016 16:04:39 -0200 |
User-agent: |
Mutt/1.7.0 (2016-08-17) |
On Tue, Oct 18, 2016 at 06:26:54PM +0200, Radim Krčmář wrote:
> 2016-10-18 12:56-0200, Eduardo Habkost:
> > On Fri, Oct 14, 2016 at 01:21:55PM +0200, Igor Mammedov wrote:
> >> Signed-off-by: Igor Mammedov <address@hidden>
> >> ---
> >> v4:
> >> - restore kvm_has_x2apic_api() and use it to avoid side-effects
> >> of kvm_enable_x2apic(). x2APIC API will be enabled by iommu
> >> if it's present or not enabled at all.
> >> v3:
> >> - drop kvm_has_x2apic_api() and reuse kvm_enable_x2apic() instead
> >> ---
> >> diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c
> >> @@ -34,7 +34,11 @@ static void kvm_put_apic_state(APICCommonState *s,
> >> struct kvm_lapic_state *kapic
> >> int i;
> >>
> >> memset(kapic, 0, sizeof(*kapic));
> >> - kvm_apic_set_reg(kapic, 0x2, s->id << 24);
> >> + if (kvm_has_x2apic_api() && s->apicbase & MSR_IA32_APICBASE_EXTD) {
> >> + kvm_apic_set_reg(kapic, 0x2, s->initial_apic_id);
> >
> > What happens if:
> >
> > * x2apic is enabled on CPUID;
> > * guest sets MSR_IA32_APICBASE_EXTD; an
> > * the x2apic API is not enabled?
>
> KVM expects APIC ID to be in upper 8 bits of the register then.
> Guest APIC mode does not come into play if the x2APIC API is not
> enabled. This is to keep compatibility with old KVMs that used xAPIC
> format regardless of APIC mode.
>
> > Does that mean kvm_{put,get}_apic_state() was already broken, or
> > is the x2apic ID translated to the old format by the kernel when
> > the x2apic API is disabled?
>
> The latter. KVM stores the 8 bits in an appropriate format, but it
> doesn't really matter to QEMU: the exchange format without enabled
> x2APIC API is defined to be the xAPIC one. (KVM used to keep always
> keep ID in xAPIC format and trapped x2APIC ID reads to shift the value.)
Thanks for the clarification!
Reviewed-by: Eduardo Habkost <address@hidden>
--
Eduardo
- Re: [Qemu-devel] [PATCH v3 06/13] pc: apic_common: extend APIC ID property to 32bit, (continued)
Re: [Qemu-devel] [PATCH v3 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Eduardo Habkost, 2016/10/17
[Qemu-devel] [PATCH v3 10/13] pc: clarify FW_CFG_MAX_CPUS usage comment, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 11/13] increase MAX_CPUMASK_BITS from 255 to 288, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 13/13] pc: require IRQ remapping and EIM if there could be x2APIC CPUs, Igor Mammedov, 2016/10/13