mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
pc: kvm_apic: Pass APIC ID depending on xAPIC/x2APIC mode
Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Radim Krčmář <rkrcmar@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
facb07cd2a
commit
e391c00970
3 changed files with 21 additions and 5 deletions
|
@ -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);
|
||||
} else {
|
||||
kvm_apic_set_reg(kapic, 0x2, s->id << 24);
|
||||
}
|
||||
kvm_apic_set_reg(kapic, 0x8, s->tpr);
|
||||
kvm_apic_set_reg(kapic, 0xd, s->log_dest << 24);
|
||||
kvm_apic_set_reg(kapic, 0xe, s->dest_mode << 28 | 0x0fffffff);
|
||||
|
@ -59,7 +63,11 @@ void kvm_get_apic_state(DeviceState *dev, struct kvm_lapic_state *kapic)
|
|||
APICCommonState *s = APIC_COMMON(dev);
|
||||
int i, v;
|
||||
|
||||
s->id = kvm_apic_get_reg(kapic, 0x2) >> 24;
|
||||
if (kvm_has_x2apic_api() && s->apicbase & MSR_IA32_APICBASE_EXTD) {
|
||||
assert(kvm_apic_get_reg(kapic, 0x2) == s->initial_apic_id);
|
||||
} else {
|
||||
s->id = kvm_apic_get_reg(kapic, 0x2) >> 24;
|
||||
}
|
||||
s->tpr = kvm_apic_get_reg(kapic, 0x8);
|
||||
s->arb_id = kvm_apic_get_reg(kapic, 0x9);
|
||||
s->log_dest = kvm_apic_get_reg(kapic, 0xd) >> 24;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue