|
@@ -143,6 +143,8 @@ static inline int kvm_apic_id(struct kvm_lapic *apic)
|
|
|
return (kvm_apic_get_reg(apic, APIC_ID) >> 24) & 0xff;
|
|
|
}
|
|
|
|
|
|
+#define KVM_X2APIC_CID_BITS 0
|
|
|
+
|
|
|
static void recalculate_apic_map(struct kvm *kvm)
|
|
|
{
|
|
|
struct kvm_apic_map *new, *old = NULL;
|
|
@@ -180,7 +182,8 @@ static void recalculate_apic_map(struct kvm *kvm)
|
|
|
if (apic_x2apic_mode(apic)) {
|
|
|
new->ldr_bits = 32;
|
|
|
new->cid_shift = 16;
|
|
|
- new->cid_mask = new->lid_mask = 0xffff;
|
|
|
+ new->cid_mask = (1 << KVM_X2APIC_CID_BITS) - 1;
|
|
|
+ new->lid_mask = 0xffff;
|
|
|
} else if (kvm_apic_sw_enabled(apic) &&
|
|
|
!new->cid_mask /* flat mode */ &&
|
|
|
kvm_apic_get_reg(apic, APIC_DFR) == APIC_DFR_CLUSTER) {
|