1

コードは次のとおりです。

static int __init test3_init(void)
{
   uint64_t v,i;
   for (i=0;i<10;i++)
   {
       v= native_x2apic_icr_read();
       printk("v=%llx\n",v);
   }
   return 0;
}

結果は次のとおりです。

[ 6658.458919] v=9a557fd8
[ 6658.458925] v=1d
[ 6658.458928] v=17
[ 6658.458930] v=17
[ 6658.458932] v=17
[ 6658.458935] v=17
[ 6658.458937] v=17
[ 6658.458939] v=17
[ 6658.458942] v=17
[ 6658.458944] v=17

なぜこのレジスタの値を連続して読むとこんな感じになるのか。最初の 2 つは異なりますが、残りは同じです。

私の最終的な目標は、このレジスタの APIC_DM_NMI(0x00400) をリセットすることですが、値が一貫していない場合、ビットをリセットするポイントは何ですか? このビット APIC_DM_NMI をリセットすると、APIC から NMI を有効にできると誰かが教えてくれました。誰かがこの MSR に関する情報を提供できれば、それを正しく操作する方法を教えていただければ幸いです。

ありがとう。

4

1 に答える 1

1

どういうわけか、安定した値 (つまり 0x17) の方が「通常の」値のように思えます。これらの出力は繰り返すことができますか? つまり、最初の 2 つは常に異なり、安定して 3 から始まるということですか?

Pentium Processor System Architecture (page 395)の ICR レジスタの説明は次のとおりです。このレジスタの読み取りに関する注意事項は見当たりませんでした。 ここに画像の説明を入力

参考までに、講義ノートから見つけた ICR レジスタのビット仕様を次に示します。 ICR 上位 32 ビット ICR 下位 32 ビット

于 2012-07-06T10:26:29.363 に答える