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:
Victor Sun 2018-04-05 19:58:40 +08:00 committed by lijinxia
parent 1ab5010910
commit c47aa3648d
5 changed files with 41 additions and 0 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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 */

View File

@ -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 */

View File

@ -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>