|
Pablo Greco |
e6a3ae |
From 766a7ab6a7ebb9e819f6ec9a9b109ec4659388d4 Mon Sep 17 00:00:00 2001
|
|
Pablo Greco |
e6a3ae |
From: Eduardo Habkost <ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
Date: Thu, 9 May 2019 23:21:08 +0100
|
|
Pablo Greco |
e6a3ae |
Subject: [PATCH 2/2] i386: Disable OSPKE on CPU model definitions
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
RH-Author: Eduardo Habkost <ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
Message-id: <20190509232108.25675-3-ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
Patchwork-id: 87254
|
|
Pablo Greco |
e6a3ae |
O-Subject: [RHEL-8.1.0 qemu-kvm PATCH 2/2] i386: Disable OSPKE on CPU model definitions
|
|
Pablo Greco |
e6a3ae |
Bugzilla: 1561761
|
|
Pablo Greco |
e6a3ae |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Pablo Greco |
e6a3ae |
RH-Acked-by: Igor Mammedov <imammedo@redhat.com>
|
|
Pablo Greco |
e6a3ae |
RH-Acked-by: Danilo de Paula <ddepaula@redhat.com>
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
Currently, the Cascadelake-Server, Icelake-Client, and
|
|
Pablo Greco |
e6a3ae |
Icelake-Server are always generating the following warning:
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
qemu-system-x86_64: warning: \
|
|
Pablo Greco |
e6a3ae |
host doesn't support requested feature: CPUID.07H:ECX [bit 4]
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
This happens because OSPKE was never returned by
|
|
Pablo Greco |
e6a3ae |
GET_SUPPORTED_CPUID or x86_cpu_get_supported_feature_word().
|
|
Pablo Greco |
e6a3ae |
OSPKE is a runtime flag automatically set by the KVM module or by
|
|
Pablo Greco |
e6a3ae |
TCG code, was always cleared by x86_cpu_filter_features(), and
|
|
Pablo Greco |
e6a3ae |
was not supposed to appear on the CPU model table.
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
Remove the OSPKE flag from the CPU model table entries, to avoid
|
|
Pablo Greco |
e6a3ae |
the bogus warning and avoid returning invalid feature data on
|
|
Pablo Greco |
e6a3ae |
query-cpu-* QMP commands. As OSPKE was always cleared by
|
|
Pablo Greco |
e6a3ae |
x86_cpu_filter_features(), this won't have any guest-visible
|
|
Pablo Greco |
e6a3ae |
impact.
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
Include a test case that should detect the problem if we introduce
|
|
Pablo Greco |
e6a3ae |
a similar bug again.
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
Fixes: c7a88b52f62b ("i386: Add new model of Cascadelake-Server")
|
|
Pablo Greco |
e6a3ae |
Fixes: 8a11c62da914 ("i386: Add new CPU model Icelake-{Server,Client}")
|
|
Pablo Greco |
e6a3ae |
Cc: Tao Xu <tao3.xu@intel.com>
|
|
Pablo Greco |
e6a3ae |
Cc: Robert Hoo <robert.hu@linux.intel.com>
|
|
Pablo Greco |
e6a3ae |
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
Message-Id: <20190319200515.14999-1-ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
(cherry picked from commit bb4928c7cafe50ab2137a0034e350ef1bfa044d9)
|
|
Pablo Greco |
e6a3ae |
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
Pablo Greco |
e6a3ae |
---
|
|
Pablo Greco |
e6a3ae |
target/i386/cpu.c | 4 ++--
|
|
Pablo Greco |
e6a3ae |
tests/acceptance/cpu_queries.py | 33 +++++++++++++++++++++++++++++++++
|
|
Pablo Greco |
e6a3ae |
2 files changed, 35 insertions(+), 2 deletions(-)
|
|
Pablo Greco |
e6a3ae |
create mode 100644 tests/acceptance/cpu_queries.py
|
|
Pablo Greco |
e6a3ae |
|
|
Pablo Greco |
e6a3ae |
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|
Pablo Greco |
e6a3ae |
index c56d7e7..8ff6c38 100644
|
|
Pablo Greco |
e6a3ae |
--- a/target/i386/cpu.c
|
|
Pablo Greco |
e6a3ae |
+++ b/target/i386/cpu.c
|
|
Pablo Greco |
e6a3ae |
@@ -2518,7 +2518,7 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX,
|
|
Pablo Greco |
e6a3ae |
.features[FEAT_7_0_ECX] =
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_VBMI | CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_PKU |
|
|
Pablo Greco |
e6a3ae |
- CPUID_7_0_ECX_OSPKE | CPUID_7_0_ECX_VBMI2 | CPUID_7_0_ECX_GFNI |
|
|
Pablo Greco |
e6a3ae |
+ CPUID_7_0_ECX_VBMI2 | CPUID_7_0_ECX_GFNI |
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_VAES | CPUID_7_0_ECX_VPCLMULQDQ |
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_AVX512VNNI | CPUID_7_0_ECX_AVX512BITALG |
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_AVX512_VPOPCNTDQ,
|
|
Pablo Greco |
e6a3ae |
@@ -2576,7 +2576,7 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_EBX_AVX512VL | CPUID_7_0_EBX_CLFLUSHOPT,
|
|
Pablo Greco |
e6a3ae |
.features[FEAT_7_0_ECX] =
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_VBMI | CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_PKU |
|
|
Pablo Greco |
e6a3ae |
- CPUID_7_0_ECX_OSPKE | CPUID_7_0_ECX_VBMI2 | CPUID_7_0_ECX_GFNI |
|
|
Pablo Greco |
e6a3ae |
+ CPUID_7_0_ECX_VBMI2 | CPUID_7_0_ECX_GFNI |
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_VAES | CPUID_7_0_ECX_VPCLMULQDQ |
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_AVX512VNNI | CPUID_7_0_ECX_AVX512BITALG |
|
|
Pablo Greco |
e6a3ae |
CPUID_7_0_ECX_AVX512_VPOPCNTDQ | CPUID_7_0_ECX_LA57,
|
|
Pablo Greco |
e6a3ae |
diff --git a/tests/acceptance/cpu_queries.py b/tests/acceptance/cpu_queries.py
|
|
Pablo Greco |
e6a3ae |
new file mode 100644
|
|
Pablo Greco |
e6a3ae |
index 0000000..e71edec
|
|
Pablo Greco |
e6a3ae |
--- /dev/null
|
|
Pablo Greco |
e6a3ae |
+++ b/tests/acceptance/cpu_queries.py
|
|
Pablo Greco |
e6a3ae |
@@ -0,0 +1,33 @@
|
|
Pablo Greco |
e6a3ae |
+# Sanity check of query-cpu-* results
|
|
Pablo Greco |
e6a3ae |
+#
|
|
Pablo Greco |
e6a3ae |
+# Copyright (c) 2019 Red Hat, Inc.
|
|
Pablo Greco |
e6a3ae |
+#
|
|
Pablo Greco |
e6a3ae |
+# Author:
|
|
Pablo Greco |
e6a3ae |
+# Eduardo Habkost <ehabkost@redhat.com>
|
|
Pablo Greco |
e6a3ae |
+#
|
|
Pablo Greco |
e6a3ae |
+# This work is licensed under the terms of the GNU GPL, version 2 or
|
|
Pablo Greco |
e6a3ae |
+# later. See the COPYING file in the top-level directory.
|
|
Pablo Greco |
e6a3ae |
+
|
|
Pablo Greco |
e6a3ae |
+import logging
|
|
Pablo Greco |
e6a3ae |
+
|
|
Pablo Greco |
e6a3ae |
+from avocado_qemu import Test
|
|
Pablo Greco |
e6a3ae |
+
|
|
Pablo Greco |
e6a3ae |
+class QueryCPUModelExpansion(Test):
|
|
Pablo Greco |
e6a3ae |
+ """
|
|
Pablo Greco |
e6a3ae |
+ Run query-cpu-model-expansion for each CPU model, and validate results
|
|
Pablo Greco |
e6a3ae |
+ """
|
|
Pablo Greco |
e6a3ae |
+
|
|
Pablo Greco |
e6a3ae |
+ def test(self):
|
|
Pablo Greco |
e6a3ae |
+ self.vm.set_machine('none')
|
|
Pablo Greco |
e6a3ae |
+ self.vm.add_args('-S')
|
|
Pablo Greco |
e6a3ae |
+ self.vm.launch()
|
|
Pablo Greco |
e6a3ae |
+
|
|
Pablo Greco |
e6a3ae |
+ cpus = self.vm.command('query-cpu-definitions')
|
|
Pablo Greco |
e6a3ae |
+ for c in cpus:
|
|
Pablo Greco |
e6a3ae |
+ print(repr(c))
|
|
Pablo Greco |
e6a3ae |
+ self.assertNotIn('', c['unavailable-features'], c['name'])
|
|
Pablo Greco |
e6a3ae |
+
|
|
Pablo Greco |
e6a3ae |
+ for c in cpus:
|
|
Pablo Greco |
e6a3ae |
+ model = {'name': c['name']}
|
|
Pablo Greco |
e6a3ae |
+ e = self.vm.command('query-cpu-model-expansion', model=model, type='full')
|
|
Pablo Greco |
e6a3ae |
+ self.assertEquals(e['model']['name'], c['name'])
|
|
Pablo Greco |
e6a3ae |
--
|
|
Pablo Greco |
e6a3ae |
1.8.3.1
|
|
Pablo Greco |
e6a3ae |
|