Message ID | 20230907003553.1636896-28-gshan@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Unified CPU type check | expand |
On 7/9/23 02:35, Gavin Shan wrote: > The names of supported CPU models instead of CPU types should be > printed when the user specified CPU type isn't supported, to be > consistent with the output from '-cpu ?'. > > Correct the error messages to print CPU model names instead of CPU > type names. > > Signed-off-by: Gavin Shan <gshan@redhat.com> > --- > hw/core/machine.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > @@ -1373,11 +1374,18 @@ static void is_cpu_type_supported(MachineState *machine, Error **errp) > > /* The user specified CPU type isn't valid */ > if (!mc->valid_cpu_types[i]) { > - error_setg(errp, "Invalid CPU type: %s", machine->cpu_type); > - error_append_hint(errp, "The valid types are: %s", > - mc->valid_cpu_types[0]); > + model = cpu_model_from_type(machine->cpu_type); > + error_setg(errp, "Invalid CPU type: %s", model); > + g_free(model); > + > + model = cpu_model_from_type(mc->valid_cpu_types[0]); > + error_append_hint(errp, "The valid types are: %s", model); > + g_free(model); > + > for (i = 1; mc->valid_cpu_types[i]; i++) { > - error_append_hint(errp, ", %s", mc->valid_cpu_types[i]); > + model = cpu_model_from_type(mc->valid_cpu_types[i]); cpu_model_from_type() can return NULL: char *cpu_model_from_type(const char *typename) { const char *suffix = "-" CPU_RESOLVING_TYPE; if (!object_class_by_name(typename)) { return NULL; } Don't we want to skip that case? if (!model) { continue; } > + error_append_hint(errp, ", %s", model); > + g_free(model); > } > > error_append_hint(errp, "\n");
On 9/7/23 19:05, Philippe Mathieu-Daudé wrote: > On 7/9/23 02:35, Gavin Shan wrote: >> The names of supported CPU models instead of CPU types should be >> printed when the user specified CPU type isn't supported, to be >> consistent with the output from '-cpu ?'. >> >> Correct the error messages to print CPU model names instead of CPU >> type names. >> >> Signed-off-by: Gavin Shan <gshan@redhat.com> >> --- >> hw/core/machine.c | 16 ++++++++++++---- >> 1 file changed, 12 insertions(+), 4 deletions(-) > > >> @@ -1373,11 +1374,18 @@ static void is_cpu_type_supported(MachineState *machine, Error **errp) >> /* The user specified CPU type isn't valid */ >> if (!mc->valid_cpu_types[i]) { >> - error_setg(errp, "Invalid CPU type: %s", machine->cpu_type); >> - error_append_hint(errp, "The valid types are: %s", >> - mc->valid_cpu_types[0]); >> + model = cpu_model_from_type(machine->cpu_type); >> + error_setg(errp, "Invalid CPU type: %s", model); >> + g_free(model); >> + >> + model = cpu_model_from_type(mc->valid_cpu_types[0]); >> + error_append_hint(errp, "The valid types are: %s", model); >> + g_free(model); >> + >> for (i = 1; mc->valid_cpu_types[i]; i++) { >> - error_append_hint(errp, ", %s", mc->valid_cpu_types[i]); >> + model = cpu_model_from_type(mc->valid_cpu_types[i]); > > cpu_model_from_type() can return NULL: > > char *cpu_model_from_type(const char *typename) > { > const char *suffix = "-" CPU_RESOLVING_TYPE; > > if (!object_class_by_name(typename)) { > return NULL; > } > > Don't we want to skip that case? > > if (!model) { > continue; > } > No, it's intentional. "(null)" will be printed in this specific case so that it can be identified quickly and mc->valid_cpu_types[] need to be fixed by developers. >> + error_append_hint(errp, ", %s", model); >> + g_free(model); >> } >> error_append_hint(errp, "\n"); > Thanks, Gavin
On 8/9/23 01:49, Gavin Shan wrote: > On 9/7/23 19:05, Philippe Mathieu-Daudé wrote: >> On 7/9/23 02:35, Gavin Shan wrote: >>> The names of supported CPU models instead of CPU types should be >>> printed when the user specified CPU type isn't supported, to be >>> consistent with the output from '-cpu ?'. >>> >>> Correct the error messages to print CPU model names instead of CPU >>> type names. >>> >>> Signed-off-by: Gavin Shan <gshan@redhat.com> >>> --- >>> hw/core/machine.c | 16 ++++++++++++---- >>> 1 file changed, 12 insertions(+), 4 deletions(-) >> >> >>> @@ -1373,11 +1374,18 @@ static void >>> is_cpu_type_supported(MachineState *machine, Error **errp) >>> /* The user specified CPU type isn't valid */ >>> if (!mc->valid_cpu_types[i]) { >>> - error_setg(errp, "Invalid CPU type: %s", >>> machine->cpu_type); >>> - error_append_hint(errp, "The valid types are: %s", >>> - mc->valid_cpu_types[0]); >>> + model = cpu_model_from_type(machine->cpu_type); >>> + error_setg(errp, "Invalid CPU type: %s", model); >>> + g_free(model); >>> + >>> + model = cpu_model_from_type(mc->valid_cpu_types[0]); >>> + error_append_hint(errp, "The valid types are: %s", model); >>> + g_free(model); >>> + >>> for (i = 1; mc->valid_cpu_types[i]; i++) { >>> - error_append_hint(errp, ", %s", >>> mc->valid_cpu_types[i]); >>> + model = cpu_model_from_type(mc->valid_cpu_types[i]); >> >> cpu_model_from_type() can return NULL: >> >> char *cpu_model_from_type(const char *typename) >> { >> const char *suffix = "-" CPU_RESOLVING_TYPE; >> >> if (!object_class_by_name(typename)) { >> return NULL; >> } >> >> Don't we want to skip that case? >> >> if (!model) { >> continue; >> } >> > > No, it's intentional. "(null)" will be printed in this specific case so > that > it can be identified quickly and mc->valid_cpu_types[] need to be fixed by > developers. If you want to help developers, use g_assert().
On 9/8/23 17:56, Philippe Mathieu-Daudé wrote: > On 8/9/23 01:49, Gavin Shan wrote: >> On 9/7/23 19:05, Philippe Mathieu-Daudé wrote: >>> On 7/9/23 02:35, Gavin Shan wrote: >>>> The names of supported CPU models instead of CPU types should be >>>> printed when the user specified CPU type isn't supported, to be >>>> consistent with the output from '-cpu ?'. >>>> >>>> Correct the error messages to print CPU model names instead of CPU >>>> type names. >>>> >>>> Signed-off-by: Gavin Shan <gshan@redhat.com> >>>> --- >>>> hw/core/machine.c | 16 ++++++++++++---- >>>> 1 file changed, 12 insertions(+), 4 deletions(-) >>> >>> >>>> @@ -1373,11 +1374,18 @@ static void is_cpu_type_supported(MachineState *machine, Error **errp) >>>> /* The user specified CPU type isn't valid */ >>>> if (!mc->valid_cpu_types[i]) { >>>> - error_setg(errp, "Invalid CPU type: %s", machine->cpu_type); >>>> - error_append_hint(errp, "The valid types are: %s", >>>> - mc->valid_cpu_types[0]); >>>> + model = cpu_model_from_type(machine->cpu_type); >>>> + error_setg(errp, "Invalid CPU type: %s", model); >>>> + g_free(model); >>>> + >>>> + model = cpu_model_from_type(mc->valid_cpu_types[0]); >>>> + error_append_hint(errp, "The valid types are: %s", model); >>>> + g_free(model); >>>> + >>>> for (i = 1; mc->valid_cpu_types[i]; i++) { >>>> - error_append_hint(errp, ", %s", mc->valid_cpu_types[i]); >>>> + model = cpu_model_from_type(mc->valid_cpu_types[i]); >>> >>> cpu_model_from_type() can return NULL: >>> >>> char *cpu_model_from_type(const char *typename) >>> { >>> const char *suffix = "-" CPU_RESOLVING_TYPE; >>> >>> if (!object_class_by_name(typename)) { >>> return NULL; >>> } >>> >>> Don't we want to skip that case? >>> >>> if (!model) { >>> continue; >>> } >>> >> >> No, it's intentional. "(null)" will be printed in this specific case so that >> it can be identified quickly and mc->valid_cpu_types[] need to be fixed by >> developers. > > If you want to help developers, use g_assert(). > g_assert() wins. It will be included into v4 :) Thanks, Gavin
diff --git a/hw/core/machine.c b/hw/core/machine.c index 93a327927f..6b701526ae 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -1357,6 +1357,7 @@ static void is_cpu_type_supported(MachineState *machine, Error **errp) MachineClass *mc = MACHINE_GET_CLASS(machine); ObjectClass *oc = object_class_by_name(machine->cpu_type); CPUClass *cc; + char *model; int i; /* @@ -1373,11 +1374,18 @@ static void is_cpu_type_supported(MachineState *machine, Error **errp) /* The user specified CPU type isn't valid */ if (!mc->valid_cpu_types[i]) { - error_setg(errp, "Invalid CPU type: %s", machine->cpu_type); - error_append_hint(errp, "The valid types are: %s", - mc->valid_cpu_types[0]); + model = cpu_model_from_type(machine->cpu_type); + error_setg(errp, "Invalid CPU type: %s", model); + g_free(model); + + model = cpu_model_from_type(mc->valid_cpu_types[0]); + error_append_hint(errp, "The valid types are: %s", model); + g_free(model); + for (i = 1; mc->valid_cpu_types[i]; i++) { - error_append_hint(errp, ", %s", mc->valid_cpu_types[i]); + model = cpu_model_from_type(mc->valid_cpu_types[i]); + error_append_hint(errp, ", %s", model); + g_free(model); } error_append_hint(errp, "\n");
The names of supported CPU models instead of CPU types should be printed when the user specified CPU type isn't supported, to be consistent with the output from '-cpu ?'. Correct the error messages to print CPU model names instead of CPU type names. Signed-off-by: Gavin Shan <gshan@redhat.com> --- hw/core/machine.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)