From patchwork Mon May 27 20:23:54 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eduardo Habkost X-Patchwork-Id: 246656 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id A6C3A2C02C8 for ; Tue, 28 May 2013 06:24:55 +1000 (EST) Received: from localhost ([::1]:53243 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uh3yP-0003XV-RF for incoming@patchwork.ozlabs.org; Mon, 27 May 2013 16:24:53 -0400 Received: from eggs.gnu.org ([208.118.235.92]:41206) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uh3xr-0003P1-0k for qemu-devel@nongnu.org; Mon, 27 May 2013 16:24:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uh3xg-00032d-L8 for qemu-devel@nongnu.org; Mon, 27 May 2013 16:24:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23802) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uh3xg-00032T-E9 for qemu-devel@nongnu.org; Mon, 27 May 2013 16:24:08 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4RKO73Y026322 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 27 May 2013 16:24:07 -0400 Received: from localhost (vpn1-5-26.gru2.redhat.com [10.97.5.26]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4RKO6ls032398; Mon, 27 May 2013 16:24:07 -0400 From: Eduardo Habkost To: qemu-devel@nongnu.org, =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Mon, 27 May 2013 17:23:54 -0300 Message-Id: <1369686235-11090-3-git-send-email-ehabkost@redhat.com> In-Reply-To: <1369686235-11090-1-git-send-email-ehabkost@redhat.com> References: <1369686235-11090-1-git-send-email-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: Igor Mammedov , Gleb Natapov Subject: [Qemu-devel] [PATCH qom-cpu 2/3] target-i386: update model values on Conroe/Penryn/Nehalem CPU models X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The CPUID model values on Conroe, Penryn, and Nehalem are too conservative and don't reflect the values found on real Conroe, Penryn, and Nehalem CPUs. This causes at least one known problems: Windows XP disables sysenter when (family == 6 && model <= 2), but Skype tries to use the sysenter instruction anyway because it is reported as available on CPUID, making it crash. This patch sets appropriate model values that correspond to real Conroe, Penryn, and Nehalem CPUs. Signed-off-by: Eduardo Habkost --- Testing: those family/model values have been in use on Red Hat Enterprise Linux since version 6.0 (released in 2010). The fix wasn't submitted to QEMU earlier because we didn't have a good mechanism and clear procedure to update CPUID values of existing CPU models in QEMU. --- hw/i386/pc_piix.c | 4 ++++ hw/i386/pc_q35.c | 4 ++++ include/hw/i386/pc.h | 16 ++++++++++++++++ target-i386/cpu.c | 6 +++--- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index c4e0391..b3c835e 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -345,6 +345,10 @@ static QEMUMachine pc_i440fx_machine_v1_5 = { .init = pc_init_pci, .hot_add_cpu = pc_hot_add_cpu, .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_COMPAT_1_5, + { /* end of list */ } + }, DEFAULT_MACHINE_OPTIONS, }; diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index db5c46e..bb0ce6a 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -231,6 +231,10 @@ static QEMUMachine pc_q35_machine_v1_5 = { .init = pc_q35_init, .hot_add_cpu = pc_hot_add_cpu, .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_COMPAT_1_5, + { /* end of list */ } + }, DEFAULT_MACHINE_OPTIONS, }; diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 663426c..8883b37 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -182,7 +182,23 @@ int pvpanic_init(ISABus *bus); int e820_add_entry(uint64_t, uint64_t, uint32_t); +#define PC_COMPAT_1_5 \ + {\ + .driver = "Conroe-" TYPE_X86_CPU,\ + .property = "model",\ + .value = stringify(2),\ + },{\ + .driver = "Penryn-" TYPE_X86_CPU,\ + .property = "model",\ + .value = stringify(2),\ + },{\ + .driver = "Nehalem-" TYPE_X86_CPU,\ + .property = "model",\ + .value = stringify(2),\ + } + #define PC_COMPAT_1_4 \ + PC_COMPAT_1_5, \ {\ .driver = "scsi-hd",\ .property = "discard_granularity",\ diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 1a501d9..6b48562 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -672,7 +672,7 @@ static x86_def_t builtin_x86_defs[] = { .level = 2, .vendor = CPUID_VENDOR_INTEL, .family = 6, - .model = 2, + .model = 15, .stepping = 3, .features[FEAT_1_EDX] = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | @@ -694,7 +694,7 @@ static x86_def_t builtin_x86_defs[] = { .level = 2, .vendor = CPUID_VENDOR_INTEL, .family = 6, - .model = 2, + .model = 23, .stepping = 3, .features[FEAT_1_EDX] = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | @@ -717,7 +717,7 @@ static x86_def_t builtin_x86_defs[] = { .level = 2, .vendor = CPUID_VENDOR_INTEL, .family = 6, - .model = 2, + .model = 26, .stepping = 3, .features[FEAT_1_EDX] = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |