Re: [PART1 RFC v4 06/11] KVM: x86: Detect and Initialize AVIC support

From: Paolo Bonzini
Date: Tue Apr 12 2016 - 17:54:18 EST




On 11/04/2016 22:48, Radim KrÄmÃÅ wrote:
> 2016-04-07 03:20-0500, Suravee Suthikulpanit:
>> This patch introduces AVIC-related data structure, and AVIC
>> initialization code.
>>
>> There are three main data structures for AVIC:
>> * Virtual APIC (vAPIC) backing page (per-VCPU)
>> * Physical APIC ID table (per-VM)
>> * Logical APIC ID table (per-VM)
>>
>> Currently, AVIC is disabled by default. Users can manually
>> enable AVIC via kernel boot option kvm-amd.avic=1 or during
>> kvm-amd module loading with parameter avic=1.
>>
>> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
>> ---
>> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
>> @@ -14,6 +14,9 @@
>> * the COPYING file in the top-level directory.
>> *
>> */
>> +
>> +#define pr_fmt(fmt) "SVM: " fmt
>> +
>> #include <linux/kvm_host.h>
>>
>> #include "irq.h"
>> @@ -78,6 +81,11 @@ MODULE_DEVICE_TABLE(x86cpu, svm_cpu_id);
>> #define TSC_RATIO_MIN 0x0000000000000001ULL
>> #define TSC_RATIO_MAX 0x000000ffffffffffULL
>>
>> +#define AVIC_HPA_MASK ~((0xFFFULL << 52) || 0xFFF)
>> +
>> +/* NOTE: Current max index allowed for physical APIC ID table is 255 */
>> +#define AVIC_PHYSICAL_ID_MAX 0xFF
>
> 0xff is broadcast, so shouldn't the actual last one be 0xfe?

Right, actually 0xFF is the maximum *number* of physical APICs (numbered
0 to 254). But the code is correct and written for that convention, so
we should just rename the macro:

/* 0xff is broadcast, so the max index allowed for physical APIC ID
* table is 0xfe. APIC IDs above 0xff are reserved.
*/
#define AVIC_MAX_PHYSICAL_ID_COUNT 255

You can then remove the comment where Radim pointed out you should use
the constant:

> + /* Note: APIC ID = 0xff is used for broadcast.
> + * APIC ID > 0xff is reserved.
> + */
> + if (index >= 0xff)

Paolo