Commit f6750e95 authored by Eduardo Habkost's avatar Eduardo Habkost
Browse files

target-i386: Consolidate calls of object_property_parse() in x86_cpu_parse_featurestr

parent a57d0163
Loading
Loading
Loading
Loading
+45 −29
Original line number Diff line number Diff line
@@ -1966,18 +1966,39 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features,
    char *featurestr; /* Single 'key=value" string being parsed */
    Error *local_err = NULL;

    featurestr = features ? strtok(features, ",") : NULL;
    if (!features) {
        return;
    }

    while (featurestr) {
        char *val;
    for (featurestr = strtok(features, ",");
         featurestr  && !local_err;
         featurestr = strtok(NULL, ",")) {
        const char *name;
        const char *val = NULL;
        char *eq = NULL;

        /* Compatibility syntax: */
        if (featurestr[0] == '+') {
            add_flagname_to_bitmaps(featurestr + 1, plus_features, &local_err);
            continue;
        } else if (featurestr[0] == '-') {
            add_flagname_to_bitmaps(featurestr + 1, minus_features, &local_err);
        } else if ((val = strchr(featurestr, '='))) {
            *val = 0; val++;
            continue;
        }

        eq = strchr(featurestr, '=');
        if (eq) {
            *eq++ = 0;
            val = eq;
        } else {
            val = "on";
        }

        feat2prop(featurestr);
            if (!strcmp(featurestr, "tsc-freq")) {
        name = featurestr;

        /* Special case: */
        if (!strcmp(name, "tsc-freq")) {
            int64_t tsc_freq;
            char *err;
            char num[32];
@@ -1989,20 +2010,15 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features,
                return;
            }
            snprintf(num, sizeof(num), "%" PRId64, tsc_freq);
                object_property_parse(OBJECT(cpu), num, "tsc-frequency",
                                      &local_err);
            } else {
                object_property_parse(OBJECT(cpu), val, featurestr, &local_err);
            val = num;
            name = "tsc-frequency";
        }
        } else {
            feat2prop(featurestr);
            object_property_parse(OBJECT(cpu), "on", featurestr, &local_err);

        object_property_parse(OBJECT(cpu), val, name, &local_err);
    }

    if (local_err) {
        error_propagate(errp, local_err);
            return;
        }
        featurestr = strtok(NULL, ",");
    }
}