Пример #1
0
static void vmx_cpu_skillz()
{
   rd_msr_ia32_mtrr_def(info->vm.mtrr_def);
   rd_msr_ia32_mtrr_cap(info->vm.mtrr_cap);

   if(cpuid_ext_highest() < CPUID_MAX_ADDR)
      info->vm.max_paddr = (1ULL<<36) - 1;
   else
      info->vm.max_paddr = cpuid_max_paddr();

   info->vm.cpu.skillz.pg_2M = info->vm.vmx_ept_cap.pg_2m;
   info->vm.cpu.skillz.pg_1G = info->vm.vmx_ept_cap.pg_1g;

   if(info->vm.vmx_ept_cap.invvpid_s && info->vm.vmx_ept_cap.invvpid_r)
   {
      info->vm.cpu.skillz.flush_tlb     = VMCS_VPID_INV_SINGLE;
      info->vm.cpu.skillz.flush_tlb_glb = VMCS_VPID_INV_SINGLE_ALL;
   }
   else if(info->vm.vmx_ept_cap.invvpid_a)
   {
      info->vm.cpu.skillz.flush_tlb     = VMCS_VPID_INV_ALL;
      info->vm.cpu.skillz.flush_tlb_glb = VMCS_VPID_INV_ALL;
   }
   else
      panic("no valid invvpid type found");

   debug(VMX_CPU,
	 "vm 1GB pages support: %s\n"
	 "vm 2MB pages support: %s\n"
	 "vm max physical addr: 0x%X\n"
	 ,info->vm.cpu.skillz.pg_1G?"yes":"no"
	 ,info->vm.cpu.skillz.pg_2M?"yes":"no"
	 ,info->vm.max_paddr);
}
Пример #2
0
static void vmx_cpu_skillz()
{
   rd_msr_ia32_mtrr_def(info->vm.mtrr_def);
   rd_msr_ia32_mtrr_cap(info->vm.mtrr_cap);

   info->vm.cpu.skillz.pg_2M = info->vm.vmx_ept_cap.pg_2m;
   info->vm.cpu.skillz.pg_1G = info->vm.vmx_ept_cap.pg_1g;

#ifdef CONFIG_VMX_FEAT_VPID
   if(info->vm.vmx_ept_cap.invvpid_s && info->vm.vmx_ept_cap.invvpid_r)
   {
      info->vm.cpu.skillz.flush_tlb     = VMCS_VPID_INV_SINGLE;
      info->vm.cpu.skillz.flush_tlb_glb = VMCS_VPID_INV_SINGLE_ALL;
   }
   else if(info->vm.vmx_ept_cap.invvpid_a)
   {
      info->vm.cpu.skillz.flush_tlb     = VMCS_VPID_INV_ALL;
      info->vm.cpu.skillz.flush_tlb_glb = VMCS_VPID_INV_ALL;
   }
   else
      panic("no valid invvpid type found");
#endif

   debug(VMX_CPU,
	 "\n- vm cpu features\n"
	 "1GB pages support   : %s\n"
	 "2MB pages support   : %s\n"
	 "max physical addr   : 0x%X\n"
	 "max linear addr     : 0x%X\n"
	 "mtrr variable count : %d\n"
	 ,info->vm.cpu.skillz.pg_1G?"yes":"no"
	 ,info->vm.cpu.skillz.pg_2M?"yes":"no"
	 ,info->vm.cpu.max_paddr, info->vm.cpu.max_vaddr
	 ,info->vm.mtrr_cap.vcnt);
}