From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: Unreachable code about cpu features Date: Thu, 28 Mar 2013 15:40:10 +0000 Message-ID: <5154645A.7000507@citrix.com> References: <51545D01.2000809@citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9148219759548235983==" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Choonho Son List-Id: xen-devel@lists.xenproject.org --===============9148219759548235983== Content-Type: multipart/alternative; boundary="------------040903080407010004020007" --------------040903080407010004020007 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit On 28/03/2013 15:30, Choonho Son wrote: > 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, Dropping xen-devel to bcc as this is a xen-users question http://xenbits.xen.org/docs/unstable/misc/xen-command-line.html >>From memory, you probably want cpuid_mask_ext_ecx=fffeffff ~Andrew > > > 2013/3/29 Andrew Cooper > > > 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, > > ... > > --------------040903080407010004020007 Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit
On 28/03/2013 15:30, Choonho Son wrote:
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,

Dropping xen-devel to bcc as this is a xen-users question

http://xenbits.xen.org/docs/unstable/misc/xen-command-line.html

From memory, you probably want

cpuid_mask_ext_ecx=fffeffff

~Andrew



2013/3/29 Andrew Cooper <andrew.cooper3@citrix.com>
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,
>          ...



--------------040903080407010004020007-- --===============9148219759548235983== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============9148219759548235983==--