[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 07/19] i386: cpu: extract parsing of feature strings t
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [RFC 07/19] i386: cpu: extract parsing of feature strings to separate function |
Date: |
Thu, 2 Aug 2012 23:59:14 -0300 |
Signed-off-by: Eduardo Habkost <address@hidden>
---
target-i386/cpu.c | 62 ++++++++++++++++++++++++++++++++++---------------------
1 file changed, 39 insertions(+), 23 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 7af80a0..dd2dc45 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1077,17 +1077,14 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor
*v, void *opaque,
cpu->env.tsc_khz = value / 1000;
}
-static int cpu_x86_build_from_name(x86_def_t *x86_cpu_def,
- const char *cpu_model)
+/* Extend a x86_def_t struct based on a +feature,-feature,feature=xyz string
+ *
+ * Returns 0 on success, -1 on error.
+ */
+static int cpu_x86_extend_features(x86_def_t *x86_cpu_def, char *featlist)
{
unsigned int i;
- x86_def_t *def;
-
- char *last;
- char *s = g_strdup(cpu_model);
- char *featurestr, *name = strtok_r(s, ",", &last);
- char *featlist = strtok_r(NULL, "", &last);
-
+ char *last, *featurestr;
/* Features to be added*/
uint32_t plus_features = 0, plus_ext_features = 0;
uint32_t plus_ext2_features = 0, plus_ext3_features = 0;
@@ -1098,20 +1095,6 @@ static int cpu_x86_build_from_name(x86_def_t
*x86_cpu_def,
uint32_t minus_kvm_features = 0, minus_svm_features = 0;
uint32_t numvalue;
- for (def = x86_defs; def; def = def->next) {
- if (name && !strcmp(name, def->name)) {
- break;
- }
- }
-
- if (kvm_enabled() && name && strcmp(name, "host") == 0) {
- cpu_x86_fill_host(x86_cpu_def);
- } else if (!def) {
- goto error;
- } else {
- memcpy(x86_cpu_def, def, sizeof(*def));
- }
-
plus_kvm_features = ~0; /* not supported bits will be filtered out later */
add_flagname_to_bitmaps("hypervisor", &plus_features,
@@ -1243,6 +1226,39 @@ static int cpu_x86_build_from_name(x86_def_t
*x86_cpu_def,
x86_cpu_def->ext3_features &= ~minus_ext3_features;
x86_cpu_def->kvm_features &= ~minus_kvm_features;
x86_cpu_def->svm_features &= ~minus_svm_features;
+ return 0;
+error:
+ return -1;
+}
+
+static int cpu_x86_build_from_name(x86_def_t *x86_cpu_def,
+ const char *cpu_model)
+{
+ x86_def_t *def;
+
+ char *last;
+ char *s = g_strdup(cpu_model);
+ char *name = strtok_r(s, ",", &last);
+ char *featlist = strtok_r(NULL, "", &last);
+
+ for (def = x86_defs; def; def = def->next) {
+ if (name && !strcmp(name, def->name)) {
+ break;
+ }
+ }
+
+ if (kvm_enabled() && name && strcmp(name, "host") == 0) {
+ cpu_x86_fill_host(x86_cpu_def);
+ } else if (!def) {
+ goto error;
+ } else {
+ memcpy(x86_cpu_def, def, sizeof(*def));
+ }
+
+ if (cpu_x86_extend_features(x86_cpu_def, featlist) < 0) {
+ goto error;
+ }
+
if (check_cpuid) {
if (check_features_against_host(x86_cpu_def) && enforce_cpuid) {
goto error;
--
1.7.11.2
- [Qemu-devel] [RFC 02/19] x86_cpudef_setup: coding style change, (continued)
- [Qemu-devel] [RFC 02/19] x86_cpudef_setup: coding style change, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 09/19] i386: reorder object setup on cpu_x86_init(), Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 16/19] kill cpu_x86_register(), Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 17/19] kill cpu_x86_build_from_name(), Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 19/19] HACK: late CPU class initialization, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 05/19] cpu_x86_build_from_name: use strtok_r(), Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 13/19] move X86CPUDefinition to cpu-qom.h, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 01/19] target-i386/cpu.c: coding style fixes, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 18/19] register a class for each CPU model, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 08/19] i386: extract CPU model lookup to a separate function, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 07/19] i386: cpu: extract parsing of feature strings to separate function,
Eduardo Habkost <=
- [Qemu-devel] [RFC 10/19] move CPU object creation to cpu.c, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 03/19] i386: x86_def_t: rename 'flags' field, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 11/19] rename x86_def_t to X86CPUDefinition, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 06/19] i386: cpu: extract the full feature list before parsing it, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 12/19] create struct X86CPUModelTableEntry, Eduardo Habkost, 2012/08/02
- [Qemu-devel] [RFC 04/19] rename cpu_x86_find_by_name to x86_cpu_build_from_name, Eduardo Habkost, 2012/08/02