英特尔处理器:“如果 CPUID.06H:EAX.[7] = 1”是什么意思?

2023-12-23

英特尔处理器数据表中的以下注释是什么意思?如何在 Linux 中的驱动程序代码中检查这一点?

如果CPUID.06H:EAX.[7] = 1

我在英特尔处理器的软件开发人员手册的寄存器描述表的注释栏中遇到了这种类型的语句。

Ref: https://software.intel.com/sites/default/files/management/22/0d/335592-sdm-vol-4.pdf https://software.intel.com/sites/default/files/managed/22/0d/335592-sdm-vol-4.pdf

请帮助我理解处理器的描述。

Thanks.


CPUID.06H:EAX。[7]允许发现 Intel 处理器中的 HWP(硬件控制性能状态)支持。

如果未设置该功能位,则该功能不存在。访问 HWP MSR 将导致 #GP 异常。对于其他功能位,结果可能更糟:没有故障,但稍后会导致难以调试的问题。


这意味着您应该检查一下eax注册(特别是eax & (1<<7))运行后the cpuid操作说明 http://felixcloutier.com/x86/CPUID.html with eax=0x6在指令之前。

要发现 Linux 内核中的 CPUID 值,您可以使用中的一个cpuid函数,与op=6 http://elixir.free-electrons.com/linux/v4.12.9/source/arch/x86/include/asm/processor.h#L580:

#include  <asm/processor.h>   // defines the following:

void cpuid(unsigned int op,
             unsigned int *eax, unsigned int *ebx,
             unsigned int *ecx, unsigned int *edx);
void cpuid_count(unsigned int op, int count,
                   unsigned int *eax, unsigned int *ebx,
                   unsigned int *ecx, unsigned int *edx);

或者对于您只想要一个注册结果的情况:

unsigned int cpuid_eax(unsigned int op);

并屏蔽 EAX 返回值。

一个小注意事项:引用 SDM 时最好指定一个部分 - 毕竟这是一本大书......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

英特尔处理器:“如果 CPUID.06H:EAX.[7] = 1”是什么意思? 的相关文章

随机推荐