Re: [PATCH v1 10/11] KVM: x86: add KVM_CAP_X2APIC_API

From: Radim KrÄmÃÅ
Date: Fri Jul 01 2016 - 14:31:58 EST


2016-07-01 11:09-0700, David Matlack:
> On Thu, Jun 30, 2016 at 1:54 PM, Radim KrÄmÃÅ <rkrcmar@xxxxxxxxxx> wrote:
>> KVM_CAP_X2APIC_API can be enabled to extend APIC ID in get/set ioctl and MSI
>> addresses to 32 bits. Both are needed to support x2APIC.
>>
>> The capability has to be toggleable and disabled by default, because get/set
>> ioctl shifted and truncated APIC ID to 8 bits by using a non-standard protocol
>> inspired by xAPIC and the change is not backward-compatible.
>>
>> Changes to MSI addresses follow the format used by interrupt remapping unit.
>> The upper address word, that used to be 0, contains upper 24 bits of the LAPIC
>> address in its upper 24 bits. Lower 8 bits are reserved as 0.
>> Using the upper address word is not backward-compatible either as we didn't
>> check that userspace zeroed the word. Reserved bits are still not explicitly
>> checked, but non-zero data will affect LAPIC addresses, which will cause a bug.
>>
>> Signed-off-by: Radim KrÄmÃÅ <rkrcmar@xxxxxxxxxx>
>> ---
>> diff --git a/arch/x86/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c
>> @@ -111,12 +111,17 @@ int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
>> }
>>
>> void kvm_set_msi_irq(struct kvm_kernel_irq_routing_entry *e,
>> - struct kvm_lapic_irq *irq)
>> + struct kvm_lapic_irq *irq, bool x2apic_api)
>> {
>> trace_kvm_msi_set_irq(e->msi.address_lo, e->msi.data);
>
> This tracepoint should start reporting e->msi.address_hi as well now.

Good catch, thanks.