mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-23 09:47:44 +00:00
hv: deny the launch of VM if pass-thru PIO bar isn't identical mapping
In current design, when pass-thru dev, for the PIO bar, need to ensure the guest PIO start address equals to host PIO start address. Then set the VMCS io bitmap to pass-thru the corresponding port io to guest for performance. ACRN-DM and acrn-config should ensure the identical mapping of PIO bar. If ACRN-DM or acrn-config failed to achieve this, we should deny the launch of VM Tracked-On: #6508 Signed-off-by: Liu,Junming <junming.liu@intel.com> Reviewed-by: Zhao Yakui <yakui.zhao@intel.com> Reviewed-by: Fei Li <fei1.li@intel.com>
This commit is contained in:
@@ -599,34 +599,37 @@ int32_t create_vm(uint16_t vm_id, uint64_t pcpu_bitmap, struct acrn_vm_config *v
|
||||
passthrough_smbios(vm, get_acrn_boot_info());
|
||||
#endif
|
||||
|
||||
init_vpci(vm);
|
||||
enable_iommu();
|
||||
|
||||
/* Create virtual uart;*/
|
||||
init_legacy_vuarts(vm, vm_config->vuart);
|
||||
|
||||
register_reset_port_handler(vm);
|
||||
|
||||
/* vpic wire_mode default is INTR */
|
||||
vm->wire_mode = VPIC_WIRE_INTR;
|
||||
|
||||
/* Init full emulated vIOAPIC instance:
|
||||
* Present a virtual IOAPIC to guest, as a placeholder interrupt controller,
|
||||
* even if the guest uses PT LAPIC. This is to satisfy the guest OSes,
|
||||
* in some cases, though the functionality of vIOAPIC doesn't work.
|
||||
*/
|
||||
vioapic_init(vm);
|
||||
|
||||
/* Populate return VM handle */
|
||||
*rtn_vm = vm;
|
||||
vm->sw.io_shared_page = NULL;
|
||||
if ((vm_config->load_order == POST_LAUNCHED_VM) && ((vm_config->guest_flags & GUEST_FLAG_IO_COMPLETION_POLLING) != 0U)) {
|
||||
/* enable IO completion polling mode per its guest flags in vm_config. */
|
||||
vm->sw.is_polling_ioreq = true;
|
||||
}
|
||||
status = set_vcpuid_entries(vm);
|
||||
status = init_vpci(vm);
|
||||
if (status == 0) {
|
||||
vm->state = VM_CREATED;
|
||||
enable_iommu();
|
||||
|
||||
/* Create virtual uart;*/
|
||||
init_legacy_vuarts(vm, vm_config->vuart);
|
||||
|
||||
register_reset_port_handler(vm);
|
||||
|
||||
/* vpic wire_mode default is INTR */
|
||||
vm->wire_mode = VPIC_WIRE_INTR;
|
||||
|
||||
/* Init full emulated vIOAPIC instance:
|
||||
* Present a virtual IOAPIC to guest, as a placeholder interrupt controller,
|
||||
* even if the guest uses PT LAPIC. This is to satisfy the guest OSes,
|
||||
* in some cases, though the functionality of vIOAPIC doesn't work.
|
||||
*/
|
||||
vioapic_init(vm);
|
||||
|
||||
/* Populate return VM handle */
|
||||
*rtn_vm = vm;
|
||||
vm->sw.io_shared_page = NULL;
|
||||
if ((vm_config->load_order == POST_LAUNCHED_VM)
|
||||
&& ((vm_config->guest_flags & GUEST_FLAG_IO_COMPLETION_POLLING) != 0U)) {
|
||||
/* enable IO completion polling mode per its guest flags in vm_config. */
|
||||
vm->sw.is_polling_ioreq = true;
|
||||
}
|
||||
status = set_vcpuid_entries(vm);
|
||||
if (status == 0) {
|
||||
vm->state = VM_CREATED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user