Commit 3a66dae931 for qemu.org
commit 3a66dae931c92d42891a9ef59a118acb5621d99a
Author: Mohamed Mediouni <mohamed@unpredictable.fr>
Date: Wed Apr 22 23:42:11 2026 +0200
whpx: i386: some x2APIC awareness
Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>
Link: https://lore.kernel.org/r/20260422214225.2242-24-mohamed@unpredictable.fr
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/target/i386/whpx/whpx-apic.c b/target/i386/whpx/whpx-apic.c
index 65629ca45f..cc272f82a5 100644
--- a/target/i386/whpx/whpx-apic.c
+++ b/target/i386/whpx/whpx-apic.c
@@ -33,7 +33,11 @@ static void whpx_put_apic_state(APICCommonState *s,
int i;
memset(kapic, 0, sizeof(*kapic));
- kapic->fields[0x2].data = s->id << 24;
+ if (s->apicbase & MSR_IA32_APICBASE_EXTD) {
+ kapic->fields[0x2].data = s->initial_apic_id;
+ } else {
+ kapic->fields[0x2].data = s->id << 24;
+ }
kapic->fields[0x3].data = s->version | ((APIC_LVT_NB - 1) << 16);
kapic->fields[0x8].data = s->tpr;
kapic->fields[0xd].data = s->log_dest << 24;
@@ -61,7 +65,11 @@ static void whpx_get_apic_state(APICCommonState *s,
{
int i, v;
- s->id = kapic->fields[0x2].data >> 24;
+ if (s->apicbase & MSR_IA32_APICBASE_EXTD) {
+ assert(kapic->fields[0x2].data == s->initial_apic_id);
+ } else {
+ s->id = kapic->fields[0x2].data >> 24;
+ }
s->tpr = kapic->fields[0x8].data;
s->arb_id = kapic->fields[0x9].data;
s->log_dest = kapic->fields[0xd].data >> 24;