mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-18 19:57:31 +00:00
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>
This commit is contained in:
parent
80b6e62735
commit
cf4d191272
@ -327,10 +327,10 @@ void guest_cpuid(struct vcpu *vcpu,
|
|||||||
case 0x01U:
|
case 0x01U:
|
||||||
{
|
{
|
||||||
cpuid(leaf, eax, ebx, ecx, edx);
|
cpuid(leaf, eax, ebx, ecx, edx);
|
||||||
uint32_t apicid = vlapic_get_id(vcpu_vlapic(vcpu));
|
uint32_t apicid = vlapic_get_apicid(vcpu_vlapic(vcpu));
|
||||||
/* Patching initial APIC ID */
|
/* Patching initial APIC ID */
|
||||||
*ebx &= ~APIC_ID_MASK;
|
*ebx &= ~APIC_ID_MASK;
|
||||||
*ebx |= (apicid & APIC_ID_MASK);
|
*ebx |= (apicid << APIC_ID_SHIFT);
|
||||||
|
|
||||||
#ifndef CONFIG_MTRR_ENABLED
|
#ifndef CONFIG_MTRR_ENABLED
|
||||||
/* mask mtrr */
|
/* mask mtrr */
|
||||||
|
@ -148,17 +148,16 @@ vm_active_cpus(const struct vm *vm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
vlapic_get_id(const struct acrn_vlapic *vlapic)
|
vlapic_get_apicid(struct acrn_vlapic *vlapic)
|
||||||
{
|
{
|
||||||
uint32_t id = vlapic->apic_page.id.v;
|
uint32_t apicid;
|
||||||
return id;
|
if (is_x2apic_enabled(vlapic)) {
|
||||||
}
|
apicid = vlapic->apic_page.id.v;
|
||||||
|
} else {
|
||||||
|
apicid = (vlapic->apic_page.id.v) >> APIC_ID_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t
|
return apicid;
|
||||||
vlapic_get_apicid(const struct acrn_vlapic *vlapic)
|
|
||||||
{
|
|
||||||
uint32_t apicid = (vlapic->apic_page.id.v) >> APIC_ID_SHIFT;
|
|
||||||
return (uint8_t)apicid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t
|
static inline uint32_t
|
||||||
|
@ -171,8 +171,7 @@ void vlapic_set_tmr_one_vec(struct acrn_vlapic *vlapic, uint32_t delmode,
|
|||||||
uint32_t vector, bool level);
|
uint32_t vector, bool level);
|
||||||
|
|
||||||
void vlapic_apicv_batch_set_tmr(struct acrn_vlapic *vlapic);
|
void vlapic_apicv_batch_set_tmr(struct acrn_vlapic *vlapic);
|
||||||
uint32_t vlapic_get_id(const struct acrn_vlapic *vlapic);
|
uint32_t vlapic_get_apicid(struct acrn_vlapic *vlapic);
|
||||||
uint8_t vlapic_get_apicid(const struct acrn_vlapic *vlapic);
|
|
||||||
int vlapic_create(struct vcpu *vcpu);
|
int vlapic_create(struct vcpu *vcpu);
|
||||||
/*
|
/*
|
||||||
* @pre vcpu != NULL
|
* @pre vcpu != NULL
|
||||||
|
Loading…
Reference in New Issue
Block a user