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? ############################## # 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@lists.xen.org http://lists.xen.org/xen-devel
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, > ...
>>> On 28.03.13 at 15:40, Choonho Son <choonho.son@gmail.com> wrote: > 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?Of course it is - you just need to make use of the respective command line options to get those variable have other than their default (initial) values. It is intentional for the code to do nothing without command line option saying so. Jan
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@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, > > ... > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
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 > <mailto: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, > > ... > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel