mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-23 22:18:17 +00:00
HV: setup px info when create vm
The vm px info would be used for guest Pstate control. Currently it is copied from host boot cpu. Signed-off-by: Victor Sun <victor.sun@intel.com> Acked-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
parent
1ab5010910
commit
c47aa3648d
@ -31,6 +31,7 @@
|
||||
#include <hv_lib.h>
|
||||
#include <cpu.h>
|
||||
#include <acrn_common.h>
|
||||
#include <hv_arch.h>
|
||||
#include <cpu_state_tbl.h>
|
||||
|
||||
/* The table includes cpu px info of Intel A3960 SoC */
|
||||
@ -105,3 +106,32 @@ void load_cpu_state_data(void)
|
||||
boot_cpu_data.px_data = (cpu_state_tbl + tbl_idx)->px_data;
|
||||
|
||||
}
|
||||
|
||||
void vm_setup_cpu_px(struct vm *vm)
|
||||
{
|
||||
uint32_t px_data_size;
|
||||
|
||||
vm->pm.px_cnt = 0;
|
||||
memset(vm->pm.px_data, 0, MAX_PSTATE * sizeof(struct cpu_px_data));
|
||||
|
||||
if ((!boot_cpu_data.px_cnt) || (!boot_cpu_data.px_data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (boot_cpu_data.px_cnt > MAX_PSTATE) {
|
||||
vm->pm.px_cnt = MAX_PSTATE;
|
||||
} else {
|
||||
vm->pm.px_cnt = boot_cpu_data.px_cnt;
|
||||
}
|
||||
|
||||
px_data_size = vm->pm.px_cnt * sizeof(struct cpu_px_data);
|
||||
|
||||
memcpy_s(vm->pm.px_data, px_data_size,
|
||||
boot_cpu_data.px_data, px_data_size);
|
||||
|
||||
}
|
||||
|
||||
void vm_setup_cpu_state(struct vm *vm)
|
||||
{
|
||||
vm_setup_cpu_px(vm);
|
||||
}
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include <bsp_extern.h>
|
||||
#include <hv_debug.h>
|
||||
#include <multiboot.h>
|
||||
#include <cpu_state_tbl.h>
|
||||
|
||||
/* Local variables */
|
||||
|
||||
@ -153,6 +154,8 @@ int create_vm(struct vm_description *vm_desc, struct vm **rtn_vm)
|
||||
*/
|
||||
setup_io_bitmap(vm);
|
||||
|
||||
vm_setup_cpu_state(vm);
|
||||
|
||||
/* Create virtual uart */
|
||||
if (is_vm0(vm))
|
||||
vm->vuart = vuart_init(vm);
|
||||
|
@ -38,5 +38,6 @@ struct cpu_state_table {
|
||||
};
|
||||
|
||||
void load_cpu_state_data(void);
|
||||
void vm_setup_cpu_state(struct vm *vm);
|
||||
|
||||
#endif /* CPU_STATE_TBL_H */
|
||||
|
@ -80,6 +80,11 @@ struct vm_sw_info {
|
||||
uint64_t req_buf;
|
||||
};
|
||||
|
||||
struct vm_pm_info {
|
||||
uint8_t px_cnt;
|
||||
struct cpu_px_data px_data[MAX_PSTATE];
|
||||
};
|
||||
|
||||
/* VM guest types */
|
||||
#define VM_LINUX_GUEST 0x02
|
||||
#define VM_MONO_GUEST 0x01
|
||||
@ -152,6 +157,7 @@ struct vm {
|
||||
struct vm_attr attr; /* Reference to this VM's attributes */
|
||||
struct vm_hw_info hw; /* Reference to this VM's HW information */
|
||||
struct vm_sw_info sw; /* Reference to SW associated with this VM */
|
||||
struct vm_pm_info pm; /* Reference to this VM's arch information */
|
||||
struct vm_arch arch_vm; /* Reference to this VM's arch information */
|
||||
struct vm_state_info state_info;/* State info of this VM */
|
||||
enum vm_state state; /* VM state */
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <io.h>
|
||||
#include <vcpu.h>
|
||||
#include <trusty.h>
|
||||
#include <cpu_state_tbl.h>
|
||||
#include <vm.h>
|
||||
#include <cpuid.h>
|
||||
#include <mmu.h>
|
||||
|
Loading…
Reference in New Issue
Block a user