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 时最好指定一个部分 - 毕竟这是一本大书......