[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: |
Radim Krčmář |
Subject: |
Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode |
Date: |
Tue, 18 Oct 2016 18:26:54 +0200 |
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.)
- Re: [Qemu-devel] [PATCH v3 06/13] pc: apic_common: extend APIC ID property to 32bit, (continued)
[Qemu-devel] [PATCH v3 07/13] pc: apic_common: restore APIC ID to initial ID on reset, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 08/13] pc: apic_common: reset APIC ID to initial ID when switching into x2APIC mode, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Igor Mammedov, 2016/10/13
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