Skip to content

Commit cf4d191

Browse files
Sainath Grandhilijinxia
authored andcommitted
hv: Modify vlapic_get_apicid for x2APIC mode of vLAPIC
This patch adds support to return APIC ID if guest uses vLAPIC in x2APIC mode. Tracked-On: #1626 Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com> Reviewed-by: Xu Anthony <anthony.xu@intel.com>
1 parent 80b6e62 commit cf4d191

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed

hypervisor/arch/x86/cpuid.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,10 @@ void guest_cpuid(struct vcpu *vcpu,
327327
case 0x01U:
328328
{
329329
cpuid(leaf, eax, ebx, ecx, edx);
330-
uint32_t apicid = vlapic_get_id(vcpu_vlapic(vcpu));
330+
uint32_t apicid = vlapic_get_apicid(vcpu_vlapic(vcpu));
331331
/* Patching initial APIC ID */
332332
*ebx &= ~APIC_ID_MASK;
333-
*ebx |= (apicid & APIC_ID_MASK);
333+
*ebx |= (apicid << APIC_ID_SHIFT);
334334

335335
#ifndef CONFIG_MTRR_ENABLED
336336
/* mask mtrr */

hypervisor/arch/x86/guest/vlapic.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,16 @@ vm_active_cpus(const struct vm *vm)
148148
}
149149

150150
uint32_t
151-
vlapic_get_id(const struct acrn_vlapic *vlapic)
151+
vlapic_get_apicid(struct acrn_vlapic *vlapic)
152152
{
153-
uint32_t id = vlapic->apic_page.id.v;
154-
return id;
155-
}
153+
uint32_t apicid;
154+
if (is_x2apic_enabled(vlapic)) {
155+
apicid = vlapic->apic_page.id.v;
156+
} else {
157+
apicid = (vlapic->apic_page.id.v) >> APIC_ID_SHIFT;
158+
}
156159

157-
uint8_t
158-
vlapic_get_apicid(const struct acrn_vlapic *vlapic)
159-
{
160-
uint32_t apicid = (vlapic->apic_page.id.v) >> APIC_ID_SHIFT;
161-
return (uint8_t)apicid;
160+
return apicid;
162161
}
163162

164163
static inline uint32_t

hypervisor/include/arch/x86/guest/vlapic.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,7 @@ void vlapic_set_tmr_one_vec(struct acrn_vlapic *vlapic, uint32_t delmode,
171171
uint32_t vector, bool level);
172172

173173
void vlapic_apicv_batch_set_tmr(struct acrn_vlapic *vlapic);
174-
uint32_t vlapic_get_id(const struct acrn_vlapic *vlapic);
175-
uint8_t vlapic_get_apicid(const struct acrn_vlapic *vlapic);
174+
uint32_t vlapic_get_apicid(struct acrn_vlapic *vlapic);
176175
int vlapic_create(struct vcpu *vcpu);
177176
/*
178177
* @pre vcpu != NULL

0 commit comments

Comments
 (0)