For 64 bit processor, emulate 40 bits physical address if the host physical address space >= 40bits, else guest physical is same as host. Signed-off-by: Xudong Hao <xudong.hao@xxxxxxxxx> --- target-i386/cpu.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 423e009..3a78881 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1584,7 +1584,10 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, if (env->cpuid_ext2_features & CPUID_EXT2_LM) { /* 64 bit processor */ /* XXX: The physical address space is limited to 42 bits in exec.c. */ - *eax = 0x00003028; /* 48 bits virtual, 40 bits physical */ +/* XXX: 40 bits physical if host physical address space >= 40 bits */ + uint32_t a, b, c, d; + host_cpuid(0x80000008, 0, &a, &b, &c, &d); + *eax = a < 0x00003028 ? a : 0x00003028; } else { if (env->cpuid_features & CPUID_PSE36) *eax = 0x00000024; /* 36 bits physical */ -- 1.5.5 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html