From 292d1a15f9dab3f7f4921e9750ed63e2f0734004 Mon Sep 17 00:00:00 2001 From: Mingqiang Chi Date: Thu, 17 Oct 2019 11:57:51 +0800 Subject: [PATCH] hv:Wrap some APIs related with guest pm -- change some APIs to static -- combine two APIs to init_guest_pm Tracked-On: #1842 Signed-off-by: Mingqiang Chi --- hypervisor/arch/x86/guest/pm.c | 25 ++++++++++++++++---- hypervisor/arch/x86/guest/vm.c | 19 +-------------- hypervisor/include/arch/x86/guest/guest_pm.h | 5 +--- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/hypervisor/arch/x86/guest/pm.c b/hypervisor/arch/x86/guest/pm.c index 00dbef4b4..dd8f64dcc 100644 --- a/hypervisor/arch/x86/guest/pm.c +++ b/hypervisor/arch/x86/guest/pm.c @@ -103,7 +103,7 @@ static inline void init_cx_port(struct acrn_vm *vm) } } -void vm_setup_cpu_state(struct acrn_vm *vm) +static void vm_setup_cpu_state(struct acrn_vm *vm) { vm_setup_cpu_px(vm); vm_setup_cpu_cx(vm); @@ -113,7 +113,7 @@ void vm_setup_cpu_state(struct acrn_vm *vm) /* This function is for power management Sx state implementation, * VM need to load the Sx state data to implement S3/S5. */ -int32_t vm_load_pm_s_state(struct acrn_vm *vm) +static int32_t vm_load_pm_s_state(struct acrn_vm *vm) { int32_t ret; struct pm_s_state_data *sx_data = get_host_sstate_data(); @@ -278,7 +278,7 @@ static void register_gas_io_handler(struct acrn_vm *vm, uint32_t pio_idx, const } } -void register_pm1ab_handler(struct acrn_vm *vm) +static void register_pm1ab_handler(struct acrn_vm *vm) { struct pm_s_state_data *sx_data = vm->pm.sx_state_data; @@ -315,7 +315,7 @@ static bool rt_vm_pm1a_io_write(struct acrn_vcpu *vcpu, uint16_t addr, size_t wi return false; } -void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm) +static void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm) { struct vm_io_range io_range; @@ -325,3 +325,20 @@ void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm) register_pio_emulation_handler(vm, VIRTUAL_PM1A_CNT_PIO_IDX, &io_range, &rt_vm_pm1a_io_read, &rt_vm_pm1a_io_write); } + +void init_guest_pm(struct acrn_vm *vm) +{ + vm_setup_cpu_state(vm); + + if (is_sos_vm(vm)) { + /* Load pm S state data */ + if (vm_load_pm_s_state(vm) == 0) { + register_pm1ab_handler(vm); + } + } + + /* Intercept the virtual pm port for RTVM */ + if (is_rt_vm(vm)) { + register_rt_vm_pm1a_ctl_handler(vm); + } +} diff --git a/hypervisor/arch/x86/guest/vm.c b/hypervisor/arch/x86/guest/vm.c index ee0ff9a36..41904d53e 100644 --- a/hypervisor/arch/x86/guest/vm.c +++ b/hypervisor/arch/x86/guest/vm.c @@ -397,21 +397,6 @@ static void prepare_epc_vm_memmap(struct acrn_vm *vm) } } -static void register_pm_io_handler(struct acrn_vm *vm) -{ - if (is_sos_vm(vm)) { - /* Load pm S state data */ - if (vm_load_pm_s_state(vm) == 0) { - register_pm1ab_handler(vm); - } - } - - /* Intercept the virtual pm port for RTVM */ - if (is_rt_vm(vm)) { - register_rt_vm_pm1a_ctl_handler(vm); - } -} - /** * @brief get bitmap of pCPUs whose vCPUs have LAPIC PT enabled * @@ -515,9 +500,7 @@ int32_t create_vm(uint16_t vm_id, struct acrn_vm_config *vm_config, struct acrn_ */ setup_io_bitmap(vm); - vm_setup_cpu_state(vm); - - register_pm_io_handler(vm); + init_guest_pm(vm); if (!is_lapic_pt_configured(vm)) { vpic_init(vm); diff --git a/hypervisor/include/arch/x86/guest/guest_pm.h b/hypervisor/include/arch/x86/guest/guest_pm.h index d18f8c4e3..d7d70bba5 100644 --- a/hypervisor/include/arch/x86/guest/guest_pm.h +++ b/hypervisor/include/arch/x86/guest/guest_pm.h @@ -7,10 +7,7 @@ #ifndef GUEST_PM_H #define GUEST_PM_H -void vm_setup_cpu_state(struct acrn_vm *vm); -int32_t vm_load_pm_s_state(struct acrn_vm *vm); int32_t validate_pstate(const struct acrn_vm *vm, uint64_t perf_ctl); -void register_pm1ab_handler(struct acrn_vm *vm); -void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm); +void init_guest_pm(struct acrn_vm *vm); #endif /* PM_H */