[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v12 2/4] i386: Verify if topoext feature can be supp
From: |
Babu Moger |
Subject: |
[Qemu-devel] [PATCH v12 2/4] i386: Verify if topoext feature can be supported |
Date: |
Wed, 6 Jun 2018 10:36:44 -0400 |
topoext feature cannot be supported in certain cases
with large number of cores or threads. Add the check.
Signed-off-by: Babu Moger <address@hidden>
---
target/i386/cpu.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 86fb1a4..fc5c66d 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -509,6 +509,20 @@ static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU
*cpu,
}
/*
+ * Check if we can support this topology
+ * Fail if number of cores are beyond the supported config
+ * or nr_threads is more than 2
+ */
+static int topology_supports_topoext(int nr_cores, int nr_threads)
+{
+ if ((nr_cores > (MAX_CORES_IN_NODE * MAX_NODES_PER_SOCKET)) ||
+ (nr_threads > 2)) {
+ return 0;
+ }
+ return 1;
+}
+
+/*
* Definitions of the hardcoded cache entries we expose:
* These are legacy cache values. If there is a need to change any
* of these values please use builtin_x86_defs
@@ -4941,6 +4955,19 @@ static void x86_cpu_realizefn(DeviceState *dev, Error
**errp)
qemu_init_vcpu(cs);
+ /* On AMD systems, check if we can support topoext feature */
+ if (IS_AMD_CPU(env) &&
+ (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_TOPOEXT)) {
+ if (!topology_supports_topoext(cs->nr_cores, cs->nr_threads)) {
+ /* Cannot support topoext */
+ error_setg(errp, "CPU model does not support topoext feature "
+ "with number of cores(%d) and threads(%d). "
+ "Please configure -smp options properly.",
+ cs->nr_cores, cs->nr_threads);
+ return;
+ }
+ }
+
/* Only Intel CPUs support hyperthreading. Even though QEMU fixes this
* issue by adjusting CPUID_0000_0001_EBX and CPUID_8000_0008_ECX
* based on inputs (sockets,cores,threads), it is still better to gives
--
1.8.3.1
- [Qemu-devel] [PATCH v12 0/4] i386: Enable TOPOEXT to support hyperthreading on AMD CPU, Babu Moger, 2018/06/06
- [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Babu Moger, 2018/06/06
- Re: [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Eduardo Habkost, 2018/06/06
- Re: [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Moger, Babu, 2018/06/08
- Re: [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Eduardo Habkost, 2018/06/08
- Re: [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Moger, Babu, 2018/06/08
- Re: [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Eduardo Habkost, 2018/06/08
- Re: [Qemu-devel] [PATCH v12 3/4] i386: Enable TOPOEXT feature on AMD EPYC CPU, Moger, Babu, 2018/06/08