From: Gavin Shan <gshan@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Richard Henderson <richard.henderson@linaro.org>,
qemu-arm@nongnu.org, qemu-devel@nongnu.org,
qemu-riscv@nongnu.org, peter.maydell@linaro.org,
b.galvani@gmail.com, strahinja.p.jankovic@gmail.com,
sundeep.lkml@gmail.com, kfting@nuvoton.com, wuhaotsh@google.com,
nieklinnenbank@gmail.com, rad@semihalf.com,
quic_llindhol@quicinc.com, marcin.juszkiewicz@linaro.org,
eduardo@habkost.net, marcel.apfelbaum@gmail.com,
philmd@linaro.org, wangyanan55@huawei.com, laurent@vivier.eu,
vijai@behindbytes.com, palmer@dabbelt.com,
alistair.francis@wdc.com, bin.meng@windriver.com,
liweiwei@iscas.ac.cn, dbarboza@ventanamicro.com,
zhiwei_liu@linux.alibaba.com, cohuck@redhat.com,
pbonzini@redhat.com, shan.gavin@gmail.com, qemu-ppc@nongnu.org
Subject: Re: [PATCH v2 3/8] machine: Print supported CPU models instead of typenames
Date: Mon, 31 Jul 2023 15:07:30 +1000 [thread overview]
Message-ID: <5f26299e-f1e0-a2ab-db83-87011fe524d5@redhat.com> (raw)
In-Reply-To: <20230727110010.648b61a6@imammedo.users.ipa.redhat.com>
On 7/27/23 19:00, Igor Mammedov wrote:
> On Thu, 27 Jul 2023 15:16:18 +1000
> Gavin Shan <gshan@redhat.com> wrote:
>
>> On 7/27/23 09:08, Richard Henderson wrote:
>>> On 7/25/23 17:32, Gavin Shan wrote:
>>>> -static const char *q800_machine_valid_cpu_types[] = {
>>>> +static const char * const q800_machine_valid_cpu_types[] = {
>>>> M68K_CPU_TYPE_NAME("m68040"),
>>>> NULL
>>>> };
>>>> +static const char * const q800_machine_valid_cpu_models[] = {
>>>> + "m68040",
>>>> + NULL
>>>> +};
>>>
>>> I really don't like this replication.
>>>
>>
>> Right, it's going to be lots of replications, but gives much flexibility.
>> There are 21 targets and we don't have fixed pattern for the mapping between
>> CPU model name and CPU typename. I'm summarizing the used patterns like below.
>>
>> 1 All CPU model names are mappinged to fixed CPU typename;
>
> plainly spelled it would be: cpu_model name ignored and
> a cpu type is returned anyways.
>
> I'd make this hard error right away, as "junk in => error out"
> it's clearly user error. I think we don't even have to follow
> deprecation process for that.
>
Right, It's not expected behavior to map ambiguous CPU model names to
the fixed CPU typename.
>> 2 CPU model name is same to CPU typename;
>> 3 CPU model name is alias to CPU typename;
>> 4 CPU model name is prefix of CPU typename;
>
> and some more:
> 5. cpu model names aren't names at all sometimes, and some other
> CPU property is used. (ppc)
> This one I'd prefer to get rid of and ppc handling more consistent
> with other targets, which would need PPC folks to persuaded to drop
> PVR lookup.
>
I put this into class 3, meaning the PVRs are regarded as aliases to CPU
typenames.
>>
>> Target Categories suffix-of-CPU-typename
>> -------------------------------------------------------
>> alpha -234 -alpha-cpu
>> arm ---4 -arm-cpu
>> avr -2--
>> cris --34 -cris-cpu
>> hexagon ---4 -hexagon-cpu
>> hppa 1---
>> i386 ---4 -i386-cpu
>> loongarch -2-4 -loongarch-cpu
>> m68k ---4 -m68k-cpu
>> microblaze 1---
>> mips ---4 -mips64-cpu -mips-cpu
>> nios2 1---
>> openrisc ---4 -or1k-cpu
>> ppc --34 -powerpc64-cpu -powerpc-cpu
>> riscv ---4 -riscv-cpu
>> rx -2-4 -rx-cpu
>> s390x ---4 -s390x-cpu
>> sh4 --34 -superh-cpu
>> sparc -2--
>> tricore ---4 -tricore-cpu
>> xtensa ---4 -xtensa-cpu
>>
>> There are several options as below. Please let me know which one or something
>> else is the best.
>>
>> (a) Keep what we have and use mc->valid_{cpu_types, cpu_models}[] to track
>> the valid CPU typenames and CPU model names.
>>
>> (b) Introduce CPUClass::model_name_by_typename(). Every target has their own
>> implementation to convert CPU typename to CPU model name. The CPU model name
>> is parsed from mc->valid_cpu_types[i].
>>
>> char *CPUClass::model_by_typename(const char *typename);
>>
>> (c) As we discussed before, use mc->valid_cpu_type_suffix and mc->valid_cpu_models
>> because the CPU type check is currently needed by target arm/m68k/riscv where we
>> do have fixed pattern to convert CPU model names to CPU typenames. The CPU typename
>> is comprised of CPU model name and suffix. However, it won't be working when the CPU
>> type check is required by other target where we have patterns other than this.
>
> none of above is really good, that's why I was objecting to introducing
> reverse type->name mapping. That ends up with increased amount junk,
> and it's not because your patches are bad, but because you are trying
> to deal with cpu model names (which is a historically evolved mess).
> The best from engineering POV would be replacing CPU models with
> type names.
>
> Even though it's a bit radical, I very much prefer replacing
> cpu_model names with '-cpu type'usage directly. Making it
> consistent with -device/other interfaces and coincidentally that
> obsoletes need in reverse name mapping.
>
> It's painful for end users who will need to change configs/scripts,
> but it's one time job. Additionally from QEMU pov, codebase
> will be less messy => more maintainable which benefits not only
> developers but end-users in the end.
>
I have to clarify the type->model mapping has been existing since the
model->type mapping was introduced with the help of CPU_RESOLVING_TYPE.
I mean the logic has been existing since the existence of CPU_RESOLVING_TYPE,
even the code wasn't there.
I'm not sure about the idea to switch to '-cpu <cpu-type-name>' since
it was rejected by Peter Maydell before. Hope Peter can double confirm
for this. For me, the shorter name is beneficial. For example, users
needn't to have '-cpu host-arm-cpu' for '-cpu host'.
> [rant:
> It's the same story repeating over and over, when it comes to
> changing QEMU CLI, which hits resistance wall. But with QEMU
> deprecation process we've changed CLI behavior before,
> despite of that world didn't cease to exist and users
> have adapted to new QEMU and arguably QEMU became a tiny
> bit more maintainable since we don't have to deal some
> legacy behavior.
> ]
>
I need more context about 'deprecation process' here. My understanding
is both CPU typename and model name will be accepted for a fixed period
of time. However, a warning message will be given to indicate that the
model name will be obsoleted soon. Eventually, we switch to CPU typename
completely. Please correct me if there are anything wrong.
> Another idea back in the days was (as a compromise),
> 1. keep using keep valid_cpu_types
> 2. instead of introducing yet another way to do reverse mapping,
> clean/generalize/make it work everywhere list_cpus (which
> already does that mapping) and then use that to do your thing.
> It will have drawbacks you've listed above, but hopefully
> that will clean up and reuse existing list_cpus.
> (only this time, I'd build it around query-cpu-model-expansion,
> which output is used by generic list_cpus)
> [and here I'm asking to rewrite directly unrelated QEMU part yet again]
>
I'm afraid that list_cpus() is hard to be reused. All available CPU model names
are listed by list_cpus(). mc->valid_cpu_types[] are just part of them and variable
on basis of boards. Generally speaking, we need a function to do reverse things
as to CPUClass::class_by_name(). So I would suggest to introduce CPUClass::model_from_type(),
as below. Could you please suggest if it sounds reasonable to you?
- CPUClass::class_by_name() is modified to
char *CPUClass::model_to_type(const char *model)
- char *CPUClass::type_to_model(const char *type)
- CPUClass::type_to_model() is used in cpu_list() for every target when CPU
model name, fetched from CPU type name, is printed in xxx_cpu_list_entry()
- CPUClass::type_to_model() is reused in hw/core/machine.c to get the CPU
model name from CPU type names in mc->valid_cpu_types[].
Thanks,
Gavin
next prev parent reply other threads:[~2023-07-31 5:08 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-26 0:31 [PATCH v2 0/8] machine: Unified CPU type check Gavin Shan
2023-07-26 0:31 ` [PATCH v2 1/8] machine: Use error handling when CPU type is checked Gavin Shan
2023-07-26 0:31 ` [PATCH v2 2/8] machine: Introduce helper is_cpu_type_supported() Gavin Shan
2023-07-26 23:03 ` Richard Henderson
2023-07-26 0:32 ` [PATCH v2 3/8] machine: Print supported CPU models instead of typenames Gavin Shan
2023-07-26 23:08 ` Richard Henderson
2023-07-27 5:16 ` Gavin Shan
2023-07-27 9:00 ` Igor Mammedov
2023-07-31 5:07 ` Gavin Shan [this message]
2023-08-28 14:46 ` Igor Mammedov
2023-08-29 6:28 ` Gavin Shan
2023-08-29 9:03 ` Igor Mammedov
2023-08-30 7:34 ` Gavin Shan
2023-08-31 9:02 ` Igor Mammedov
2023-07-27 14:27 ` Richard Henderson
2023-07-31 5:33 ` Gavin Shan
2023-07-26 0:32 ` [PATCH v2 4/8] hw/arm/virt: Check CPU type in machine_run_board_init() Gavin Shan
2023-07-26 0:32 ` [PATCH v2 5/8] hw/arm/virt: Unsupported host CPU model on TCG Gavin Shan
2023-07-26 0:32 ` [PATCH v2 6/8] hw/arm/sbsa-ref: Check CPU type in machine_run_board_init() Gavin Shan
2023-07-26 0:32 ` [PATCH v2 7/8] hw/arm: " Gavin Shan
2023-07-26 0:32 ` [PATCH v2 8/8] hw/riscv/shakti_c: " Gavin Shan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5f26299e-f1e0-a2ab-db83-87011fe524d5@redhat.com \
--to=gshan@redhat.com \
--cc=alistair.francis@wdc.com \
--cc=b.galvani@gmail.com \
--cc=bin.meng@windriver.com \
--cc=cohuck@redhat.com \
--cc=dbarboza@ventanamicro.com \
--cc=eduardo@habkost.net \
--cc=imammedo@redhat.com \
--cc=kfting@nuvoton.com \
--cc=laurent@vivier.eu \
--cc=liweiwei@iscas.ac.cn \
--cc=marcel.apfelbaum@gmail.com \
--cc=marcin.juszkiewicz@linaro.org \
--cc=nieklinnenbank@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=quic_llindhol@quicinc.com \
--cc=rad@semihalf.com \
--cc=richard.henderson@linaro.org \
--cc=shan.gavin@gmail.com \
--cc=strahinja.p.jankovic@gmail.com \
--cc=sundeep.lkml@gmail.com \
--cc=vijai@behindbytes.com \
--cc=wangyanan55@huawei.com \
--cc=wuhaotsh@google.com \
--cc=zhiwei_liu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).