218e99
From 9baf8dbaac5707b25f9126a5ba06716efe6793d5 Mon Sep 17 00:00:00 2001
218e99
From: Miroslav Rezanina <mrezanin@redhat.com>
218e99
Date: Thu, 17 Oct 2013 10:38:42 +0200
218e99
Subject: [PATCH 05/25] target-i386: Set model=6 on qemu64 & qemu32 CPU models
218e99
MIME-Version: 1.0
218e99
Content-Type: text/plain; charset=UTF-8
218e99
Content-Transfer-Encoding: 8bit
218e99
218e99
Message-id: <1379363997-11783-2-git-send-email-ehabkost@redhat.com>
218e99
Patchwork-id: 54398
218e99
O-Subject: [RHEL7 PATCH 1/4] target-i386: Set model=6 on qemu64 & qemu32 CPU models
218e99
Bugzilla: 1004290
218e99
RH-Acked-by: Bandan Das <bsd@redhat.com>
218e99
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
218e99
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
218e99
218e99
Bugzilla: 1004290
218e99
Upstream status: commit f8e6a11aecc96e9d8a84f17d7c07019471714e20.
218e99
Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6290888
218e99
218e99
There's no Intel CPU with family=6,model=2, and Linux and Windows guests
218e99
disable SEP when seeing that combination due to Pentium Pro erratum #82.
218e99
218e99
In addition to just having SEP ignored by guests, Skype (and maybe other
218e99
applications) runs sysenter directly without passing through ntdll on
218e99
Windows, and crashes because Windows ignored the SEP CPUID bit.
218e99
218e99
So, having model > 2 is a better default on qemu64 and qemu32 for two
218e99
reasons: making SEP really available for guests, and avoiding crashing
218e99
applications that work on bare metal.
218e99
218e99
model=3 would fix the problem, but it causes CPU enumeration problems
218e99
for Windows guests[1]. So let's set model=6, that matches "Athlon
218e99
(PM core)" on AMD and "P2 with on-die L2 cache" on Intel and it allows
218e99
Windows to use all CPUs as well as fixing sysenter.
218e99
218e99
[1] https://bugzilla.redhat.com/show_bug.cgi?id=508623
218e99
218e99
Cc: Andrea Arcangeli <aarcange@redhat.com>
218e99
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
218e99
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
218e99
Signed-off-by: Andreas Färber <afaerber@suse.de>
218e99
(cherry picked from commit 5cb6eb263d92972b54f84e0acf75e7159de20498)
218e99
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
218e99
218e99
Conflicts:
218e99
	include/hw/i386/pc.h
218e99
218e99
Backport notes:
218e99
 * PC_COMPAT_1_6 does not exist on the RHEL-7 tree
218e99
 * RHEL-6 already have model=6 on qemu64 since RHEL-6.0, but not on
218e99
   qemu32, so PC_RHEL6_5_COMPAT includes only the qemu32 compat change
218e99
218e99
Maintainer's notes:
218e99
 * Cherry-picked from Andreas Färber's qom-cpu tree
218e99
 * Upstream status valid for qemu tree
218e99
---
218e99
 hw/i386/pc_piix.c | 4 ++++
218e99
 target-i386/cpu.c | 4 ++--
218e99
 2 files changed, 6 insertions(+), 2 deletions(-)
218e99
---
218e99
 hw/i386/pc_piix.c |    4 ++++
218e99
 target-i386/cpu.c |    4 ++--
218e99
 2 files changed, 6 insertions(+), 2 deletions(-)
218e99
218e99
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
218e99
index a19f155..39be127 100644
218e99
--- a/hw/i386/pc_piix.c
218e99
+++ b/hw/i386/pc_piix.c
218e99
@@ -861,6 +861,10 @@ static QEMUMachine pc_machine_rhel700 = {
218e99
         .property = "level",\
218e99
         .value = stringify(0),\
218e99
     },{\
218e99
+        .driver   = "qemu32-" TYPE_X86_CPU,\
218e99
+        .property = "model",\
218e99
+        .value    = stringify(3),\
218e99
+    },{\
218e99
         .driver   = "usb-ccid",\
218e99
         .property = "serial",\
218e99
         .value    = "1",\
218e99
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
218e99
index a0358c0..170a46c 100644
218e99
--- a/target-i386/cpu.c
218e99
+++ b/target-i386/cpu.c
218e99
@@ -434,7 +434,7 @@ static x86_def_t builtin_x86_defs[] = {
218e99
         .level = 4,
218e99
         .vendor = CPUID_VENDOR_AMD,
218e99
         .family = 6,
218e99
-        .model = 2,
218e99
+        .model = 6,
218e99
         .stepping = 3,
218e99
         .features[FEAT_1_EDX] =
218e99
             PPRO_FEATURES |
218e99
@@ -537,7 +537,7 @@ static x86_def_t builtin_x86_defs[] = {
218e99
         .level = 4,
218e99
         .vendor = CPUID_VENDOR_INTEL,
218e99
         .family = 6,
218e99
-        .model = 3,
218e99
+        .model = 6,
218e99
         .stepping = 3,
218e99
         .features[FEAT_1_EDX] =
218e99
             PPRO_FEATURES,
218e99
-- 
218e99
1.7.1
218e99