2017-08-25 14 views
1

インテルプロセッサーのデータシートで以下のコメントは何を意味しますか? Linuxでドライバのコードをチェックするにはどうすればいいですか?Intelプロセッサ: "CPUID.06Hの場合:EAX。[7] = 1"意味?

CPUID.06H:EAX [7] = 1

私はレジスタの説明テーブルのコメント欄におけるIntelプロセッサ用SW・デベロッパーズ・マニュアル中の文のこのタイプに遭遇..

参考: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]を使用すると、IntelプロセッサーでHWP(ハードウェア制御パフォーマンス状態)サポートを検出することができます。

フィーチャビットが設定されていない場合、このフィーチャは存在しません。 HWP MSRにアクセスすると#GP例外が発生します。他のフィーチャビットの場合、結果は悪化する可能性があります。フォルトはありませんが、後でデバッグするのが困難な問題の原因となります。


それはあなたが命令の前eax=0x6the 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); 

それとも、1つのレジスタのみ結果たい場合のために:

unsigned int cpuid_eax(unsigned int op); 

そして、EAXが値を返されたマスクを。

一つの小さなノート:SDMを引用するとき、セクションを指定することをお勧めします - それは結局大きな本です...

+1

そのビットがセットされていないときにHWP GPRにアクセスすると、次の再起動時まで** GPが実行され、そのプロセスとコアがLinux上でハングします。 _そこに行って、それを行い、TurboBoostの移行ペナルティの下でパフォーマンスカウンタの不一致を調査しながら、傷跡を取得しました。 –

2

質問1

以下のコメントは、Intelに何を意味しますプロセッサのデータシート?

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

cpuid(例えばためのいくつかの珍しい機能の可用性を確認してください)プロセッサの詳細を発見するために使用される特殊なプロセッサ命令です。暗黙的にEAXレジスタをパラメータとして使用し、EAX、EBX、ECX、EDXで結果を返します。インテルのマニュアルで は、一般的な形式は次のとおりです。

CPUID.EAX_VALUE:RETURN_REGISTER.[BIT_NUMBER] = 1:あなたはEAXレジスタ= EAX_VALUEとCPUID命令を実行した場合、あなたはRETURN_REGISTERで結果を得ることを意味します。ビット番号BIT_NUMBERが設定されている場合は、マニュアルにいくつか特別な意味があります。

CPUID.06H:EAX.[7]=1は、レジスタEAX = 06H(16進数の6)を入力としてCPUID命令を実行すると、EAXで結果を得ることになります。結果のビット番号7が1の場合、マニュアルには特別な意味があります。たとえば。私は手動でこれを読んで:HWP基線資源と能力の

状況、 CPUID.06H:EAX [ビット7]:このビットが設定されている場合(つまり、もし CPUID.06H:EAX.[7]=1ある)、HWPは、いくつかの新しいアーキテクチャを提供しますIA32_HWP_REQUEST IA32_HWP_STATUS。私は、Linuxでの私のドライバのコードでいることを確認するにはどうすればよい

質問2

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