KVM: x86: avoid logical_map when it is invalid
We want to support mixed modes and the easiest solution is to avoid optimizing those weird and unlikely scenarios. Signed-off-by: Radim Krčmář <rkrcmar@redhat.com> Message-Id: <1423766494-26150-4-git-send-email-rkrcmar@redhat.com> [Add comment above KVM_APIC_MODE_* defines. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:

committed by
Paolo Bonzini

parent
9ea369b032
commit
3548a259f6
@@ -548,8 +548,20 @@ struct kvm_arch_memory_slot {
|
||||
struct kvm_lpage_info *lpage_info[KVM_NR_PAGE_SIZES - 1];
|
||||
};
|
||||
|
||||
/*
|
||||
* We use as the mode the number of bits allocated in the LDR for the
|
||||
* logical processor ID. It happens that these are all powers of two.
|
||||
* This makes it is very easy to detect cases where the APICs are
|
||||
* configured for multiple modes; in that case, we cannot use the map and
|
||||
* hence cannot use kvm_irq_delivery_to_apic_fast either.
|
||||
*/
|
||||
#define KVM_APIC_MODE_XAPIC_CLUSTER 4
|
||||
#define KVM_APIC_MODE_XAPIC_FLAT 8
|
||||
#define KVM_APIC_MODE_X2APIC 16
|
||||
|
||||
struct kvm_apic_map {
|
||||
struct rcu_head rcu;
|
||||
u8 mode;
|
||||
u8 ldr_bits;
|
||||
/* fields bellow are used to decode ldr values in different modes */
|
||||
u32 cid_shift, cid_mask, lid_mask;
|
||||
|
Reference in New Issue
Block a user