HV: add get_sos_vm api

This patch creates a new get_sos_vm() api to replace get_vm_from_vmid(0U)
because VM 0 might not be SOS VM now;

Tracked-On: #2291

Signed-off-by: Victor Sun <victor.sun@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Victor Sun 2019-01-21 15:33:17 +08:00 committed by Eddie Dong
parent f3014a3c89
commit ec199d9609
5 changed files with 15 additions and 7 deletions

View File

@ -73,6 +73,12 @@ struct acrn_vm *get_vm_from_vmid(uint16_t vm_id)
return &vm_array[vm_id]; return &vm_array[vm_id];
} }
/* return a pointer to the virtual machine structure of SOS VM */
struct acrn_vm *get_sos_vm(void)
{
return sos_vm_ptr;
}
/** /**
* @pre vm_config != NULL * @pre vm_config != NULL
*/ */

View File

@ -15,14 +15,15 @@ static void fire_vhm_interrupt(void)
* use vLAPIC to inject vector to SOS vcpu 0 if vlapic is enabled * use vLAPIC to inject vector to SOS vcpu 0 if vlapic is enabled
* otherwise, send IPI hardcoded to BOOT_CPU_ID * otherwise, send IPI hardcoded to BOOT_CPU_ID
*/ */
struct acrn_vm *vm0; struct acrn_vm *sos_vm;
struct acrn_vcpu *vcpu; struct acrn_vcpu *vcpu;
vm0 = get_vm_from_vmid(0U); sos_vm = get_sos_vm();
if (sos_vm != NULL) {
vcpu = vcpu_from_vid(sos_vm, BOOT_CPU_ID);
vcpu = vcpu_from_vid(vm0, 0U); vlapic_set_intr(vcpu, acrn_vhm_vector, LAPIC_TRIG_EDGE);
}
vlapic_set_intr(vcpu, acrn_vhm_vector, LAPIC_TRIG_EDGE);
} }
#if defined(HV_DEBUG) #if defined(HV_DEBUG)

View File

@ -376,7 +376,7 @@ struct acrn_vuart *vuart_console_active(void)
vm = get_vm_from_vmid(vuart_vmid); vm = get_vm_from_vmid(vuart_vmid);
#else #else
struct acrn_vm *vm = get_vm_from_vmid(0U); struct acrn_vm *vm = get_sos_vm();
#endif #endif
if (vm != NULL) { if (vm != NULL) {

View File

@ -228,7 +228,7 @@ void vpci_reset_ptdev_intr_info(const struct acrn_vm *target_vm, uint16_t vbdf,
} else { } else {
/* Return this PCI device to SOS */ /* Return this PCI device to SOS */
if (vdev->vpci->vm == target_vm) { if (vdev->vpci->vm == target_vm) {
vm = get_vm_from_vmid(0U); vm = get_sos_vm();
if (vm != NULL) { if (vm != NULL) {
vdev->vpci = &vm->vpci; vdev->vpci = &vm->vpci;

View File

@ -314,6 +314,7 @@ extern struct acrn_vm_config vm_configs[];
bool is_sos_vm(const struct acrn_vm *vm); bool is_sos_vm(const struct acrn_vm *vm);
uint16_t find_free_vm_id(void); uint16_t find_free_vm_id(void);
struct acrn_vm *get_vm_from_vmid(uint16_t vm_id); struct acrn_vm *get_vm_from_vmid(uint16_t vm_id);
struct acrn_vm *get_sos_vm(void);
#ifdef CONFIG_PARTITION_MODE #ifdef CONFIG_PARTITION_MODE
struct vm_config_arraies { struct vm_config_arraies {