2007-12/17 Mon

_ 38bit

x86_64 CPUでのPhysical Addressの話。

昔のIntel石は36bits, AMD石は40bits だった。 それが拡張されたという話。

これは、どこで表示しているかと言うと、 arch/x86_64/kernel/setup.cのここらへん。

seq_printf(m, "address sizes\t: %u bits physical, %u bits virtual\n",
                  c->x86_phys_bits, c->x86_virt_bits);

そんでもって、x86_phys_bitsはどこから持ってくるかというと、

c->x86_phys_bits = eax & 0xff;
/* CPUID workaround for Intel 0F34 CPU */
if (c->x86_vendor == X86_VENDOR_INTEL &&
    c->x86 == 0xF && c->x86_model == 0x3 &&
    c->x86_mask == 0x4)
        c->x86_phys_bits = 36;

こんな風情なのでeaxから拾ってくる。

で、問題なのは、一部の石で拡張されていて、 36bitではなく、38bitのものがあるということだ。

Tags: Linux