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>
This commit is contained in:
parent
2e2efc7dbe
commit
3e2cf187eb
14
qom/cpu.c
14
qom/cpu.c
@ -55,28 +55,26 @@ bool cpu_exists(int64_t id)
|
|||||||
|
|
||||||
CPUState *cpu_generic_init(const char *typename, const char *cpu_model)
|
CPUState *cpu_generic_init(const char *typename, const char *cpu_model)
|
||||||
{
|
{
|
||||||
char *str, *name, *featurestr;
|
|
||||||
CPUState *cpu = NULL;
|
CPUState *cpu = NULL;
|
||||||
ObjectClass *oc;
|
ObjectClass *oc;
|
||||||
CPUClass *cc;
|
CPUClass *cc;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
gchar **model_pieces;
|
||||||
|
|
||||||
str = g_strdup(cpu_model);
|
model_pieces = g_strsplit(cpu_model, ",", 2);
|
||||||
name = strtok(str, ",");
|
|
||||||
|
|
||||||
oc = cpu_class_by_name(typename, name);
|
oc = cpu_class_by_name(typename, model_pieces[0]);
|
||||||
if (oc == NULL) {
|
if (oc == NULL) {
|
||||||
g_free(str);
|
g_strfreev(model_pieces);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cc = CPU_CLASS(oc);
|
cc = CPU_CLASS(oc);
|
||||||
featurestr = strtok(NULL, ",");
|
|
||||||
/* TODO: all callers of cpu_generic_init() need to be converted to
|
/* TODO: all callers of cpu_generic_init() need to be converted to
|
||||||
* call parse_features() only once, before calling cpu_generic_init().
|
* call parse_features() only once, before calling cpu_generic_init().
|
||||||
*/
|
*/
|
||||||
cc->parse_features(object_class_get_name(oc), featurestr, &err);
|
cc->parse_features(object_class_get_name(oc), model_pieces[1], &err);
|
||||||
g_free(str);
|
g_strfreev(model_pieces);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user