[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] Unreachable code about cpu features
 
 
Thanks for quick response.
 
 How can I overwrite values using command line? I want to hide AVX flag even though my CPU is sandybridge. 
 
 Thanks, 
2013/3/29 Andrew Cooper  <andrew.cooper3@xxxxxxxxxx>
On 28/03/2013 14:40, Choonho Son wrote: 
> Hi all, 
> 
> I still have some questions about cpu flags. 
> - 
> Reference:  http://lists.xen.org/archives/html/xen-devel/2013-03/msg00891.html
> 
> I printed the values about following code: 
>  if (!~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx & 
>                opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx & 
>                opt_cpuid_mask_xsave_eax)) 
>                 return; 
> 
> Above code is always true, so the next "switch" code is not reachable. 
> Is it correct code?
  No - these variables can be specified on the command line, as is the 
convention with variable beginning "opt_". 
 
The result is that if the user specifies any of them, we enter the 
switch statement and apply the appropriate feature masking. 
 
~Andrew 
 
> 
> ############################## 
> # Source: xen/arch/x86/cpu/intel.c 
> ############################## 
> 
> ################# 
> # debugging result 
> ################# 
> (XEN) opt_cpuid_mask_ecx:-1 opt_cpuid_mask_edx:-1 
> opt_cpuid_mask_ext_ecx:-1 opt_cpuid_mask_ext_edx:-1 
> opt_cpuid_mask_xsave_eax:-1 
> 
> /* 
>  * opt_cpuid_mask_ecx/edx: cpuid.1[ecx, edx] feature mask. 
>  * For example, E8400[Intel Core 2 Duo Processor series] ecx = 0x0008E3FD, 
>  * edx = 0xBFEBFBFF when executing CPUID.EAX = 1 normally. If you want to 
>  * 'rev down' to E8400, you can set these values in these Xen boot 
> parameters. 
>  */ 
> static void __devinit set_cpuidmask(const struct cpuinfo_x86 *c) 
> { 
>         u32 eax, edx; 
>         const char *extra = ""; 
> 
> 
>         printk(XENLOG_INFO  "opt_cpuid_mask_ecx:%d 
> opt_cpuid_mask_edx:%d opt_cpuid_mask_ext_ecx:%d 
> opt_cpuid_mask_ext_edx:%d opt_cpuid_mask_xsave_eax:%d\n", 
> opt_cpuid_mask_ecx, opt_cpuid_mask_edx, opt_cpuid_mask_ext_ecx, 
> opt_cpuid_mask_ext_edx,opt_cpuid_mask_xsave_eax); 
>         if (!~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx & 
>                opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx & 
>                opt_cpuid_mask_xsave_eax)) 
>                 return; 
> 
>         /************************** 
>          * Unreachable code (?) 
>          **************************/ 
> 
>         /* Only family 6 supports this feature  */ 
>         switch ((c->x86 == 6) * c->x86_model) { 
>         case 0x17: 
>                 if ((c->x86_mask & 0x0f) < 4) 
>                         break; 
>                 /* fall through */ 
>         case 0x1d: 
>                 wrmsr(MSR_INTEL_CPUID_FEATURE_MASK, 
>          ... 
 
   
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
 
 
    
     |