2017-08-25 77 views
1

以下評論在「英特爾處理器數據手冊」中有何含義?我怎樣才能在Linux的驅動程序代碼中檢查?Intel處理器:「如果CPUID.06H:EAX。[7] = 1」含義?

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

我碰到過這種類型的SW開發商對英特爾處理器在寄存器描述表comments列手工報表..

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

請幫助我理解處理器說明。

謝謝。

+1

在Linux內核中有檢查CPUID和匹配與你期待什麼樣的API。例如'x86_match_cpu()'可能會完成一項工作。 OTOH還有其他幫助程序可用於檢查運行CPU上的標誌。 – 0andriy

回答

2

CPUID.06H:EAX。[7]可以在英特爾處理器中發現HWP(硬件控制的性能狀態)支持。

如果該功能位未設置,則該功能不存在。訪問HWP MSR將導致#GP異常。對於其他特徵位,結果可能更糟糕:沒有錯誤,但後來會導致難以調試的問題。


這意味着你應該指令之前eax=0x6運行the cpuid instruction後的eax寄存器檢查了一下(特別eax & (1<<7))。

要發現在Linux內核中的CPUID值可以使用one of the cpuid functions, with op=6

#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最好是指定段時 - 這是一本大書畢竟...

+1

當該位未設置時訪問HWP GPRs **將導致'#GP'並掛起Linux上的進程和內核,直到下一次重新啓動。在那裏,做到了這一點,在調查TurboBoost轉換懲罰下的性能計數差異的同時得到了疤痕。 –

2

問題1

什麼是下面的評論意味着英特爾處理器數據表?

If CPUID.06H:EAX.[7] = 1 

cpuid是用於發現處理器(檢查的一些不常見的特徵爲例如可用性)的詳細情況的特殊處理器指令。它隱式使用EAX寄存器作爲參數,並返回EAX,EBX,ECX,EDX中的結果。 在英特爾手冊中,一般格式爲:

CPUID.EAX_VALUE:RETURN_REGISTER.[BIT_NUMBER] = 1:就是說,如果你與EAX寄存器執行CPUID指令= EAX_VALUE,你會得到的結果RETURN_REGISTER。如果位編號爲BIT_NUMBER,那麼它在手冊中有一些特殊的含義。

CPUID.06H:EAX.[7]=1意味着如果您執行指令並將寄存器EAX = 06H(6進製爲16進制)作爲輸入,您將在EAX中得到結果。如果結果的第7位是1,所以它在手冊中有一些特殊的含義。例如。我手冊中讀取此:

狀況HWP基線資源和能力,的 CPUID.06H:EAX [位7]:如果該位被置位(即如果 CPUID.06H:EAX.[7]=1),HWP提供了幾個新的建築MSR: IA32_PM_ENABLE,IA32_HWP_CAPABILITIES, IA32_HWP_REQUEST,IA32_HWP_STATUS。

問題2

我怎麼能檢查在我的Linux驅動程序的代碼?

if(cpuid_eax(0x06) && (1<<7)){ 
    // Good news :features availlable, do your job 
}else{ 
    // Bad luck :: 
    return; 
}