From patchwork Fri Nov 2 05:38:21 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hao, Xudong" X-Patchwork-Id: 1687211 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 05F6CDFABE for ; Fri, 2 Nov 2012 05:33:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751857Ab2KBFdo (ORCPT ); Fri, 2 Nov 2012 01:33:44 -0400 Received: from mga02.intel.com ([134.134.136.20]:5365 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751409Ab2KBFdo (ORCPT ); Fri, 2 Nov 2012 01:33:44 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 01 Nov 2012 22:33:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.80,696,1344236400"; d="scan'208";a="214290411" Received: from xhao-dev.sh.intel.com (HELO localhost.localdomain) ([10.239.48.48]) by orsmga001.jf.intel.com with ESMTP; 01 Nov 2012 22:33:42 -0700 From: Xudong Hao To: qemu-devel@nongnu.org Cc: avi@redhat.com, kvm@vger.kernel.org, Xudong Hao Subject: [PATCH 1/2] qemu-kvm/cpuid: fix a emulation of guest physical address space Date: Fri, 2 Nov 2012 13:38:21 +0800 Message-Id: <1351834702-25937-1-git-send-email-xudong.hao@intel.com> X-Mailer: git-send-email 1.5.5 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org 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 --- 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 */