x86 and machine queue, 2017-10-09
Includes x86, QOM, CPU, and option/config parsing patches. Highlights: * Deprecation of -nodefconfig option; * MachineClass::valid_cpu_types field. -----BEGIN PGP SIGNATURE----- iQIcBAABCAAGBQJZ3DEFAAoJECgHk2+YTcWmpt8P/i1kLznQXcan4XR5PBmxYbke klAzocUhm5ZP4sLJCTRXgvKgxvtLKigGO2J5X7NBdCYyyltDL1H2/UQcLtGgmvZH 0Kz8I+euGUCbjhWiwSsNlAj1YiNxCuiAlQp0ixRrA1wmATAx0sWZ9mAtSa73lQSz Sz1y1yskHBP4Z7TbIYnmdpk/z+ZyeeSG9jGA5+az9WBUKjunb7RIOr61rrNCrIzq fL69n9+RcG5lqGg4DcFSlsOIOOjUuC4n63rEXM8lFhjSRR2PFKiNulNlSFVIpV4O lPJCArM2bq+wOmDr4Llteq42W3zhESAR4oeIR2wBvr8CBxpGlX3Ubkxvi5J/+Z6m nImvTsRWO4FInBqrnueD80Tke0dPjIivUEs7NVmqQTKHHL6DZ1GlZiAepZxqYgWL S7SmPYD6Nfg6Quf+x1aPQ9RHbycDe1Y86gYCmS07RIczLGYEylAv4GgZ6Wnc8I6A xn3MvNGTxBOKikGJOVvO/jJ9BMq/LnOYLbOMHSNnUiJ40dB6d+AKsUN32yo5FLv8 HEkJcjKXsT6sV6UuKIZW1VLa0vkJ3oB0Z2WXL/vTn+BK6w/54rnxfr9D9glfOCDZ mvExz74L+rJOvONt1RIK3wQTZzfTV70mT3/Hx2A5W0XSWADaeGE4v+kxnX0yqqFh 1mFBBY64PrkTtLZeasqA =Tqiv -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/ehabkost/tags/x86-and-machine-pull-request' into staging x86 and machine queue, 2017-10-09 Includes x86, QOM, CPU, and option/config parsing patches. Highlights: * Deprecation of -nodefconfig option; * MachineClass::valid_cpu_types field. # gpg: Signature made Tue 10 Oct 2017 03:31:33 BST # gpg: using RSA key 0x2807936F984DC5A6 # gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>" # Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF D1AA 2807 936F 984D C5A6 * remotes/ehabkost/tags/x86-and-machine-pull-request: x86: Correct translation of some rdgsbase and wrgsbase encodings vl: exit if maxcpus is negative qom: update doc comment for type_register[_static]() config: qemu_config_parse() return number of config groups qemu-options: Deprecate -nodefconfig vl: Eliminate defconfig variable machine: Add a valid_cpu_types property qom/cpu: move cpu_model null check to cpu_class_by_name() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
						commit
						567d0a19c7
					
				@ -244,7 +244,6 @@ static int read_config(BDRVBlkdebugState *s, const char *filename,
 | 
			
		||||
        ret = qemu_config_parse(f, config_groups, filename);
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
            error_setg(errp, "Could not parse blkdebug config file");
 | 
			
		||||
            ret = -EINVAL;
 | 
			
		||||
            goto fail;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -758,6 +758,38 @@ void machine_run_board_init(MachineState *machine)
 | 
			
		||||
    if (nb_numa_nodes) {
 | 
			
		||||
        machine_numa_finish_init(machine);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* If the machine supports the valid_cpu_types check and the user
 | 
			
		||||
     * specified a CPU with -cpu check here that the user CPU is supported.
 | 
			
		||||
     */
 | 
			
		||||
    if (machine_class->valid_cpu_types && machine->cpu_type) {
 | 
			
		||||
        ObjectClass *class = object_class_by_name(machine->cpu_type);
 | 
			
		||||
        int i;
 | 
			
		||||
 | 
			
		||||
        for (i = 0; machine_class->valid_cpu_types[i]; i++) {
 | 
			
		||||
            if (object_class_dynamic_cast(class,
 | 
			
		||||
                                          machine_class->valid_cpu_types[i])) {
 | 
			
		||||
                /* The user specificed CPU is in the valid field, we are
 | 
			
		||||
                 * good to go.
 | 
			
		||||
                 */
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!machine_class->valid_cpu_types[i]) {
 | 
			
		||||
            /* The user specified CPU is not valid */
 | 
			
		||||
            error_report("Invalid CPU type: %s", machine->cpu_type);
 | 
			
		||||
            error_printf("The valid types are: %s",
 | 
			
		||||
                         machine_class->valid_cpu_types[0]);
 | 
			
		||||
            for (i = 1; machine_class->valid_cpu_types[i]; i++) {
 | 
			
		||||
                error_printf(", %s", machine_class->valid_cpu_types[i]);
 | 
			
		||||
            }
 | 
			
		||||
            error_printf("\n");
 | 
			
		||||
 | 
			
		||||
            exit(1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    machine_class->init(machine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -191,6 +191,7 @@ struct MachineClass {
 | 
			
		||||
    bool has_hotpluggable_cpus;
 | 
			
		||||
    bool ignore_memory_transaction_failures;
 | 
			
		||||
    int numa_mem_align_shift;
 | 
			
		||||
    const char **valid_cpu_types;
 | 
			
		||||
    void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes,
 | 
			
		||||
                                 int nb_nodes, ram_addr_t size);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -773,7 +773,7 @@ const char *object_get_typename(const Object *obj);
 | 
			
		||||
 * @info and all of the strings it points to should exist for the life time
 | 
			
		||||
 * that the type is registered.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: 0 on failure, the new #Type on success.
 | 
			
		||||
 * Returns: the new #Type.
 | 
			
		||||
 */
 | 
			
		||||
Type type_register_static(const TypeInfo *info);
 | 
			
		||||
 | 
			
		||||
@ -784,7 +784,7 @@ Type type_register_static(const TypeInfo *info);
 | 
			
		||||
 * Unlike type_register_static(), this call does not require @info or its
 | 
			
		||||
 * string members to continue to exist after the call returns.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: 0 on failure, the new #Type on success.
 | 
			
		||||
 * Returns: the new #Type.
 | 
			
		||||
 */
 | 
			
		||||
Type type_register(const TypeInfo *info);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -113,7 +113,7 @@ extern int win2k_install_hack;
 | 
			
		||||
extern int alt_grab;
 | 
			
		||||
extern int ctrl_grab;
 | 
			
		||||
extern int smp_cpus;
 | 
			
		||||
extern int max_cpus;
 | 
			
		||||
extern unsigned int max_cpus;
 | 
			
		||||
extern int cursor_hide;
 | 
			
		||||
extern int graphic_rotate;
 | 
			
		||||
extern int no_quit;
 | 
			
		||||
 | 
			
		||||
@ -2496,6 +2496,10 @@ would automatically enable USB support on the machine type.
 | 
			
		||||
If using the new syntax, USB support must be explicitly
 | 
			
		||||
enabled via the ``-machine usb=on'' argument.
 | 
			
		||||
 | 
			
		||||
@subsection -nodefconfig (since 2.11.0)
 | 
			
		||||
 | 
			
		||||
The ``-nodefconfig`` argument is a synonym for ``-no-user-config``.
 | 
			
		||||
 | 
			
		||||
@section qemu-img command line arguments
 | 
			
		||||
 | 
			
		||||
@subsection convert -s (since 2.0.0)
 | 
			
		||||
 | 
			
		||||
@ -4067,26 +4067,17 @@ Write device configuration to @var{file}. The @var{file} can be either filename
 | 
			
		||||
command line and device configuration into file or dash @code{-}) character to print the
 | 
			
		||||
output to stdout. This can be later used as input file for @code{-readconfig} option.
 | 
			
		||||
ETEXI
 | 
			
		||||
DEF("nodefconfig", 0, QEMU_OPTION_nodefconfig,
 | 
			
		||||
    "-nodefconfig\n"
 | 
			
		||||
    "                do not load default config files at startup\n",
 | 
			
		||||
    QEMU_ARCH_ALL)
 | 
			
		||||
STEXI
 | 
			
		||||
@item -nodefconfig
 | 
			
		||||
@findex -nodefconfig
 | 
			
		||||
Normally QEMU loads configuration files from @var{sysconfdir} and @var{datadir} at startup.
 | 
			
		||||
The @code{-nodefconfig} option will prevent QEMU from loading any of those config files.
 | 
			
		||||
ETEXI
 | 
			
		||||
HXCOMM Deprecated, same as -no-user-config
 | 
			
		||||
DEF("nodefconfig", 0, QEMU_OPTION_nodefconfig, "", QEMU_ARCH_ALL)
 | 
			
		||||
DEF("no-user-config", 0, QEMU_OPTION_nouserconfig,
 | 
			
		||||
    "-no-user-config\n"
 | 
			
		||||
    "                do not load user-provided config files at startup\n",
 | 
			
		||||
    "                do not load default user-provided config files at startup\n",
 | 
			
		||||
    QEMU_ARCH_ALL)
 | 
			
		||||
STEXI
 | 
			
		||||
@item -no-user-config
 | 
			
		||||
@findex -no-user-config
 | 
			
		||||
The @code{-no-user-config} option makes QEMU not load any of the user-provided
 | 
			
		||||
config files on @var{sysconfdir}, but won't make it skip the QEMU-provided config
 | 
			
		||||
files from @var{datadir}.
 | 
			
		||||
config files on @var{sysconfdir}.
 | 
			
		||||
ETEXI
 | 
			
		||||
DEF("trace", HAS_ARG, QEMU_OPTION_trace,
 | 
			
		||||
    "-trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
 | 
			
		||||
 | 
			
		||||
@ -316,7 +316,12 @@ static bool cpu_common_has_work(CPUState *cs)
 | 
			
		||||
 | 
			
		||||
ObjectClass *cpu_class_by_name(const char *typename, const char *cpu_model)
 | 
			
		||||
{
 | 
			
		||||
    CPUClass *cc = CPU_CLASS(object_class_by_name(typename));
 | 
			
		||||
    CPUClass *cc;
 | 
			
		||||
 | 
			
		||||
    if (!cpu_model) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    cc = CPU_CLASS(object_class_by_name(typename));
 | 
			
		||||
 | 
			
		||||
    return cc->class_by_name(cpu_model);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -127,14 +127,10 @@ static const AlphaCPUAlias alpha_cpu_aliases[] = {
 | 
			
		||||
 | 
			
		||||
static ObjectClass *alpha_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
{
 | 
			
		||||
    ObjectClass *oc = NULL;
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    oc = object_class_by_name(cpu_model);
 | 
			
		||||
    if (oc != NULL && object_class_dynamic_cast(oc, TYPE_ALPHA_CPU) != NULL &&
 | 
			
		||||
        !object_class_is_abstract(oc)) {
 | 
			
		||||
 | 
			
		||||
@ -939,10 +939,6 @@ static ObjectClass *arm_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    char *typename;
 | 
			
		||||
    char **cpuname;
 | 
			
		||||
 | 
			
		||||
    if (!cpu_model) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cpuname = g_strsplit(cpu_model, ",", 1);
 | 
			
		||||
    typename = g_strdup_printf(ARM_CPU_TYPE_NAME("%s"), cpuname[0]);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
 | 
			
		||||
@ -69,10 +69,6 @@ static ObjectClass *cris_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_USER_ONLY)
 | 
			
		||||
    if (strcasecmp(cpu_model, "any") == 0) {
 | 
			
		||||
        return object_class_by_name("crisv32-" TYPE_CRIS_CPU);
 | 
			
		||||
 | 
			
		||||
@ -8155,9 +8155,9 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case 0xc0 ... 0xc7: /* rdfsbase (f3 0f ae /0) */
 | 
			
		||||
        case 0xc8 ... 0xc8: /* rdgsbase (f3 0f ae /1) */
 | 
			
		||||
        case 0xc8 ... 0xcf: /* rdgsbase (f3 0f ae /1) */
 | 
			
		||||
        case 0xd0 ... 0xd7: /* wrfsbase (f3 0f ae /2) */
 | 
			
		||||
        case 0xd8 ... 0xd8: /* wrgsbase (f3 0f ae /3) */
 | 
			
		||||
        case 0xd8 ... 0xdf: /* wrgsbase (f3 0f ae /3) */
 | 
			
		||||
            if (CODE64(s)
 | 
			
		||||
                && (prefixes & PREFIX_REPZ)
 | 
			
		||||
                && !(prefixes & PREFIX_LOCK)
 | 
			
		||||
 | 
			
		||||
@ -246,10 +246,6 @@ static ObjectClass *lm32_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = g_strdup_printf("%s-" TYPE_LM32_CPU, cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -87,10 +87,6 @@ static ObjectClass *m68k_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = g_strdup_printf("%s-" TYPE_M68K_CPU, cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -166,10 +166,6 @@ static ObjectClass *mips_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = mips_cpu_type_name(cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -89,13 +89,7 @@ static void moxie_cpu_initfn(Object *obj)
 | 
			
		||||
 | 
			
		||||
static ObjectClass *moxie_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
{
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    oc = object_class_by_name(cpu_model);
 | 
			
		||||
    ObjectClass *oc = object_class_by_name(cpu_model);
 | 
			
		||||
    if (oc != NULL && (!object_class_dynamic_cast(oc, TYPE_MOXIE_CPU) ||
 | 
			
		||||
                       object_class_is_abstract(oc))) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
@ -108,10 +108,6 @@ static ObjectClass *openrisc_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = g_strdup_printf("%s-" TYPE_OPENRISC_CPU, cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -133,9 +133,6 @@ static ObjectClass *superh_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    GSList *list, *item;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    if (strcasecmp(cpu_model, "any") == 0) {
 | 
			
		||||
        return object_class_by_name(TYPE_SH7750R_CPU);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -730,10 +730,6 @@ static ObjectClass *sparc_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = sparc_cpu_type_name(cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -120,10 +120,6 @@ static ObjectClass *tricore_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (!cpu_model) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = g_strdup_printf("%s-" TYPE_TRICORE_CPU, cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -44,10 +44,6 @@ static ObjectClass *uc32_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = g_strdup_printf("%s-" TYPE_UNICORE32_CPU, cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -83,10 +83,6 @@ static ObjectClass *xtensa_cpu_class_by_name(const char *cpu_model)
 | 
			
		||||
    ObjectClass *oc;
 | 
			
		||||
    char *typename;
 | 
			
		||||
 | 
			
		||||
    if (cpu_model == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    typename = g_strdup_printf("%s-" TYPE_XTENSA_CPU, cpu_model);
 | 
			
		||||
    oc = object_class_by_name(typename);
 | 
			
		||||
    g_free(typename);
 | 
			
		||||
 | 
			
		||||
@ -385,6 +385,7 @@ void qemu_config_write(FILE *fp)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Returns number of config groups on success, -errno on error */
 | 
			
		||||
int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
 | 
			
		||||
{
 | 
			
		||||
    char line[1024], group[64], id[64], arg[64], value[1024];
 | 
			
		||||
@ -392,7 +393,8 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
 | 
			
		||||
    QemuOptsList *list = NULL;
 | 
			
		||||
    Error *local_err = NULL;
 | 
			
		||||
    QemuOpts *opts = NULL;
 | 
			
		||||
    int res = -1, lno = 0;
 | 
			
		||||
    int res = -EINVAL, lno = 0;
 | 
			
		||||
    int count = 0;
 | 
			
		||||
 | 
			
		||||
    loc_push_none(&loc);
 | 
			
		||||
    while (fgets(line, sizeof(line), fp) != NULL) {
 | 
			
		||||
@ -413,6 +415,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
 | 
			
		||||
                goto out;
 | 
			
		||||
            }
 | 
			
		||||
            opts = qemu_opts_create(list, id, 1, NULL);
 | 
			
		||||
            count++;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (sscanf(line, "[%63[^]]]", group) == 1) {
 | 
			
		||||
@ -423,6 +426,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
 | 
			
		||||
                goto out;
 | 
			
		||||
            }
 | 
			
		||||
            opts = qemu_opts_create(list, NULL, 0, &error_abort);
 | 
			
		||||
            count++;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        value[0] = '\0';
 | 
			
		||||
@ -447,7 +451,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
 | 
			
		||||
        error_report("error reading file");
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
    res = 0;
 | 
			
		||||
    res = count;
 | 
			
		||||
out:
 | 
			
		||||
    loc_pop(&loc);
 | 
			
		||||
    return res;
 | 
			
		||||
@ -464,12 +468,7 @@ int qemu_read_config_file(const char *filename)
 | 
			
		||||
 | 
			
		||||
    ret = qemu_config_parse(f, vm_config_groups, filename);
 | 
			
		||||
    fclose(f);
 | 
			
		||||
 | 
			
		||||
    if (ret == 0) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else {
 | 
			
		||||
        return -EINVAL;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								vl.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								vl.c
									
									
									
									
									
								
							@ -161,7 +161,7 @@ Chardev *sclp_hds[MAX_SCLP_CONSOLES];
 | 
			
		||||
int win2k_install_hack = 0;
 | 
			
		||||
int singlestep = 0;
 | 
			
		||||
int smp_cpus = 1;
 | 
			
		||||
int max_cpus = 1;
 | 
			
		||||
unsigned int max_cpus = 1;
 | 
			
		||||
int smp_cores = 1;
 | 
			
		||||
int smp_threads = 1;
 | 
			
		||||
int acpi_enabled = 1;
 | 
			
		||||
@ -3111,7 +3111,6 @@ int main(int argc, char **argv, char **envp)
 | 
			
		||||
    const char *qtest_log = NULL;
 | 
			
		||||
    const char *pid_file = NULL;
 | 
			
		||||
    const char *incoming = NULL;
 | 
			
		||||
    bool defconfig = true;
 | 
			
		||||
    bool userconfig = true;
 | 
			
		||||
    bool nographic = false;
 | 
			
		||||
    DisplayType display_type = DT_DEFAULT;
 | 
			
		||||
@ -3213,8 +3212,6 @@ int main(int argc, char **argv, char **envp)
 | 
			
		||||
            popt = lookup_opt(argc, argv, &optarg, &optind);
 | 
			
		||||
            switch (popt->index) {
 | 
			
		||||
            case QEMU_OPTION_nodefconfig:
 | 
			
		||||
                defconfig = false;
 | 
			
		||||
                break;
 | 
			
		||||
            case QEMU_OPTION_nouserconfig:
 | 
			
		||||
                userconfig = false;
 | 
			
		||||
                break;
 | 
			
		||||
@ -3222,7 +3219,7 @@ int main(int argc, char **argv, char **envp)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (defconfig && userconfig) {
 | 
			
		||||
    if (userconfig) {
 | 
			
		||||
        if (qemu_read_default_config_file() < 0) {
 | 
			
		||||
            exit(1);
 | 
			
		||||
        }
 | 
			
		||||
@ -4334,8 +4331,8 @@ int main(int argc, char **argv, char **envp)
 | 
			
		||||
 | 
			
		||||
    machine_class->max_cpus = machine_class->max_cpus ?: 1; /* Default to UP */
 | 
			
		||||
    if (max_cpus > machine_class->max_cpus) {
 | 
			
		||||
        error_report("Number of SMP CPUs requested (%d) exceeds max CPUs "
 | 
			
		||||
                     "supported by machine '%s' (%d)", max_cpus,
 | 
			
		||||
        error_report("Invalid SMP CPUs %d. The max CPUs "
 | 
			
		||||
                     "supported by machine '%s' is %d", max_cpus,
 | 
			
		||||
                     machine_class->name, machine_class->max_cpus);
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user