On Thu, 18 Jan 2018 10:50:19 +0000 Peter Maydell <peter.mayd...@linaro.org> wrote:
> On 18 January 2018 at 10:43, Igor Mammedov <imamm...@redhat.com> wrote: > > Peter Maydell <peter.mayd...@linaro.org> wrote: > >> That usage must want a different name, though, surely? > >> For Arm the default CPU for linux-user is 'any' but that > >> is usermode only and won't work for system emulation so > >> null-machine.c will need to pick something else. > > > not really in general as boards set their own default types > > and secondly it applies only to null-machine. > > Though in both cases it work the same just fine because > > current API works like this (system emulation) > > vl.c: > > current_machine->cpu_type = machine_class->default_cpu_type; > > if (cpu_model) { > > current_machine->cpu_type = > > cpu_parse_cpu_model(machine_class->default_cpu_type, > > cpu_model); > > ... > > } > > > > which would result for null-machine (patch 20/24) in: > > > > cpu_parse_cpu_model(TARGET_DEFAULT_CPU_TYPE, cpu_model): > > oc = cpu_class_by_name(TARGET_DEFAULT_CPU_TYPE, cpu_model): > > cc = > > CPU_CLASS(object_class_by_name(TARGET_DEFAULT_CPU_TYPE)) > > cc->class_by_name(cpu_model) > > In system emulation we don't define the "any" cpu type > at all, so I would expect cpu_class_by_name() to always > return an error here. My bad, 'make check' was fine but it looks like we don't test null-machine with -cpu foo, I should add a patch for that along with series on respin. I've looked and such case is rather an exception, I can fix it up in 2 ways: 1st: target/arm/cpu.h +#if !defined(CONFIG_USER_ONLY) +#define TARGET_DEFAULT_CPU_TYPE TYPE_ARM_CPU +else +#define TARGET_DEFAULT_CPU_TYPE ARM_CPU_TYPE_NAME("any") +#endif or 2nd is to compile in "any" type in system mode (which most targets do), roughly it would amount to: target/arm/cpu.c @@ -1671,10 +1671,8 @@ static const ARMCPUInfo arm_cpus[] = { { .name = "pxa270-b1", .initfn = pxa270b1_initfn }, { .name = "pxa270-c0", .initfn = pxa270c0_initfn }, { .name = "pxa270-c5", .initfn = pxa270c5_initfn }, -#ifdef CONFIG_USER_ONLY { .name = "any", .initfn = arm_any_initfn }, #endif -#endif { .name = NULL } }; and it would allow us to drop/cleanup more ifdefs in target/arm/cpu.c I'd prefer 2nd approach, so code would be more consistent with other targets and as benefit with less ifdefs. > thanks > -- PMM