aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Mammedov <imammedo@redhat.com>2017-08-24 18:31:24 +0200
committerEduardo Habkost <ehabkost@redhat.com>2017-09-01 11:54:24 -0300
commit3e2cf187eb3954fc406f81247a3fa598437ce1de (patch)
tree5cbca1f303d81ec5d85dc05f097ee1529615cebd
parent2e2efc7dbe2b0adc1200b5aa286cdbed729f6751 (diff)
downloadqemu-3e2cf187eb3954fc406f81247a3fa598437ce1de.zip
qemu-3e2cf187eb3954fc406f81247a3fa598437ce1de.tar.gz
qemu-3e2cf187eb3954fc406f81247a3fa598437ce1de.tar.bz2
qom: cpu: fix parsed feature string length
since commit ( 9262685b cpu: Factor out cpu_generic_init() ) features parsed by it were truncated only to the 1st feature after CPU name due to fact that featurestr = strtok(NULL, ","); cc->parse_features(cpu, featurestr, &err); would extract exactly one feature and parse_features() callback would parse it and only it leaving the rest of features ignored. Reuse approach from x86 custom impl. i.e. replace strtok() token parsing with g_strsplit(), which would split feature string in 2 parts name and features list and pass the later to parse_features() callback. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <1503592308-93913-2-git-send-email-imammedo@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
-rw-r--r--qom/cpu.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/qom/cpu.c b/qom/cpu.c
index e6210d5..deb8880 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -55,28 +55,26 @@ bool cpu_exists(int64_t id)
CPUState *cpu_generic_init(const char *typename, const char *cpu_model)
{
- char *str, *name, *featurestr;
CPUState *cpu = NULL;
ObjectClass *oc;
CPUClass *cc;
Error *err = NULL;
+ gchar **model_pieces;
- str = g_strdup(cpu_model);
- name = strtok(str, ",");
+ model_pieces = g_strsplit(cpu_model, ",", 2);
- oc = cpu_class_by_name(typename, name);
+ oc = cpu_class_by_name(typename, model_pieces[0]);
if (oc == NULL) {
- g_free(str);
+ g_strfreev(model_pieces);
return NULL;
}
cc = CPU_CLASS(oc);
- featurestr = strtok(NULL, ",");
/* TODO: all callers of cpu_generic_init() need to be converted to
* call parse_features() only once, before calling cpu_generic_init().
*/
- cc->parse_features(object_class_get_name(oc), featurestr, &err);
- g_free(str);
+ cc->parse_features(object_class_get_name(oc), model_pieces[1], &err);
+ g_strfreev(model_pieces);
if (err != NULL) {
goto out;
}