diff --git a/hypervisor/arch/x86/guest/vm.c b/hypervisor/arch/x86/guest/vm.c index 2f9bdb2eb..385272193 100644 --- a/hypervisor/arch/x86/guest/vm.c +++ b/hypervisor/arch/x86/guest/vm.c @@ -816,7 +816,7 @@ int32_t reset_vm(struct acrn_vm *vm) vm->arch_vm.vlapic_mode = VM_VLAPIC_XAPIC; if (is_sos_vm(vm)) { - (void)vm_sw_loader(vm); + (void)prepare_os_image(vm); } reset_vm_ioreqs(vm); @@ -932,7 +932,7 @@ void prepare_vm(uint16_t vm_id, struct acrn_vm_config *vm_config) } } - err = vm_sw_loader(vm); + err = prepare_os_image(vm); if (is_prelaunched_vm(vm)) { loaded_pre_vm_nr++; diff --git a/hypervisor/boot/guest/bzimage_loader.c b/hypervisor/boot/guest/bzimage_loader.c index 8b8c70e1d..f84958a92 100644 --- a/hypervisor/boot/guest/bzimage_loader.c +++ b/hypervisor/boot/guest/bzimage_loader.c @@ -338,7 +338,6 @@ static void load_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu, struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info); struct sw_module_info *bootargs_info = &(vm->sw.bootargs_info); struct sw_module_info *ramdisk_info = &(vm->sw.ramdisk_info); - struct sw_module_info *acpi_info = &(vm->sw.acpi_info); struct zero_page *zeropage = (struct zero_page *)sw_kernel->kernel_src_addr; /* The bzImage file consists of three parts: @@ -379,9 +378,6 @@ static void load_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu, load_sw_module(vm, bootargs_info); - /* Copy Guest OS ACPI to its load location */ - load_sw_module(vm, acpi_info); - /* 32bit kernel entry is at where protected mode code loaded */ kernel_entry_offset = 0U; if (vcpu->arch.cpu_mode == CPU_MODE_64BIT) { diff --git a/hypervisor/boot/guest/rawimage_loader.c b/hypervisor/boot/guest/rawimage_loader.c index 248f79b73..46d3fcd9a 100644 --- a/hypervisor/boot/guest/rawimage_loader.c +++ b/hypervisor/boot/guest/rawimage_loader.c @@ -13,7 +13,6 @@ static void load_rawimage(struct acrn_vm *vm) { struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info); - struct sw_module_info *acpi_info = &(vm->sw.acpi_info); const struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id); uint64_t kernel_load_gpa; @@ -23,9 +22,6 @@ static void load_rawimage(struct acrn_vm *vm) /* Copy the guest kernel image to its run-time location */ (void)copy_to_gpa(vm, sw_kernel->kernel_src_addr, kernel_load_gpa, sw_kernel->kernel_size); - /* Copy Guest OS ACPI to its load location */ - load_sw_module(vm, acpi_info); - sw_kernel->kernel_entry_addr = (void *)vm_config->os_config.kernel_entry_addr; } diff --git a/hypervisor/common/vm_load.c b/hypervisor/common/vm_load.c index 1434f9b52..7aab36037 100644 --- a/hypervisor/common/vm_load.c +++ b/hypervisor/common/vm_load.c @@ -22,11 +22,12 @@ void load_sw_module(struct acrn_vm *vm, struct sw_module_info *sw_module) /** * @pre vm != NULL */ -int32_t vm_sw_loader(struct acrn_vm *vm) +int32_t prepare_os_image(struct acrn_vm *vm) { int32_t ret = -EINVAL; /* get primary vcpu */ struct acrn_vcpu *vcpu = vcpu_from_vid(vm, BSP_CPU_ID); + struct sw_module_info *acpi_info = &(vm->sw.acpi_info); switch (vm->sw.kernel_type) { #ifdef CONFIG_GUEST_KERNEL_BZIMAGE @@ -45,6 +46,8 @@ int32_t vm_sw_loader(struct acrn_vm *vm) } if (ret == 0) { + /* Copy Guest OS ACPI to its load location */ + load_sw_module(vm, acpi_info); /* Set VCPU entry point to kernel entry */ vcpu_set_rip(vcpu, (uint64_t)vm->sw.kernel_info.kernel_entry_addr); pr_info("%s, VM %hu VCPU %hu Entry: 0x%016lx ", __func__, vm->vm_id, vcpu->vcpu_id, diff --git a/hypervisor/include/arch/x86/asm/guest/vm.h b/hypervisor/include/arch/x86/asm/guest/vm.h index d08d808ce..9a6171be0 100644 --- a/hypervisor/include/arch/x86/asm/guest/vm.h +++ b/hypervisor/include/arch/x86/asm/guest/vm.h @@ -249,7 +249,7 @@ void create_sos_vm_e820(struct acrn_vm *vm); void create_prelaunched_vm_e820(struct acrn_vm *vm); uint64_t find_space_from_ve820(struct acrn_vm *vm, uint32_t size, uint64_t min_addr, uint64_t max_addr); -int32_t vm_sw_loader(struct acrn_vm *vm); +int32_t prepare_os_image(struct acrn_vm *vm); void vrtc_init(struct acrn_vm *vm);