cpu.c | 63 +++++++++++++++++++++++++++++------- hw/core/qdev-prop-internal.h | 2 ++ hw/core/qdev-properties.c | 7 ++++ include/exec/cpu-common.h | 3 ++ include/hw/core/cpu.h | 11 +++++++ include/hw/qdev-properties.h | 8 +++++ linux-user/main.c | 10 ++++++ softmmu/vl.c | 11 +++++++ target/riscv/cpu.c | 30 +++++++++++++---- target/riscv/cpu.h | 2 ++ 10 files changed, 128 insertions(+), 19 deletions(-)
Some times we want to know what is the really mean of one cpu option. For example, in RISC-V, we usually specify a cpu in this way: -cpu rv64,v=on If we don't look into the source code, we can't get the ISA extensions of this -cpu command line. In this patch set, we add one list_cpu_props API for common cores. It will output the enabled ISA extensions. In the near future, I will also list all possible user configurable options and all possible extensions for this cpu. In order to reuse the options parse code, I also add a QemuOptsList for cpu. After this patch, we can output the extensions for cpu, """ ./qemu-system-riscv64 -cpu rv64,help Enabled extensions: rv64imafdch_zicbom_zicboz_zicsr_zifencei_zihintpause_zawrs_zfa_zba_zbb_zbc_zbs_sstc_svadu To get all configuable options for this cpu, use -device rv64-riscv-cpu,help """ v1->v2: 1) Give a hint to use -device cpu,help for configualbe options on cpu 2) Support list_cpu_props for linux user mode 3) Add default to some properties to make -device cpu,help output better Todo: 1) Fix Daniel comments on KVM and cpu option check 2) Add support for other archs 3) Move qdev help function from qdev-monitor to qdev-property LIU Zhiwei (6): cpu: Add new API cpu_type_by_name target/riscv: Add API list_cpu_props softmmu/vl: Add qemu_cpu_opts QemuOptsList target/riscv: Add default value for misa property target/riscv: Add defalut value for string property linux-user: Move qemu_cpu_opts to cpu.c cpu.c | 63 +++++++++++++++++++++++++++++------- hw/core/qdev-prop-internal.h | 2 ++ hw/core/qdev-properties.c | 7 ++++ include/exec/cpu-common.h | 3 ++ include/hw/core/cpu.h | 11 +++++++ include/hw/qdev-properties.h | 8 +++++ linux-user/main.c | 10 ++++++ softmmu/vl.c | 11 +++++++ target/riscv/cpu.c | 30 +++++++++++++---- target/riscv/cpu.h | 2 ++ 10 files changed, 128 insertions(+), 19 deletions(-) -- 2.17.1
On Mon, 28 Aug 2023 16:45:30 +0800 LIU Zhiwei <zhiwei_liu@linux.alibaba.com> wrote: > Some times we want to know what is the really mean of one cpu option. > For example, in RISC-V, we usually specify a cpu in this way: > -cpu rv64,v=on > > If we don't look into the source code, we can't get the ISA extensions > of this -cpu command line. > > In this patch set, we add one list_cpu_props API for common cores. It > will output the enabled ISA extensions. > > In the near future, I will also list all possible user configurable > options and all possible extensions for this cpu. > > In order to reuse the options parse code, I also add a QemuOptsList > for cpu. > > After this patch, we can output the extensions for cpu, > """ > ./qemu-system-riscv64 -cpu rv64,help > Enabled extensions: > rv64imafdch_zicbom_zicboz_zicsr_zifencei_zihintpause_zawrs_zfa_zba_zbb_zbc_zbs_sstc_svadu It's not that easy to get features with values in general. (many factors influence defaults, which may include: * properties set and/or added at realize time * defaults amended by machine type version * defaults amended by -global CLI options ) To do that consensus was to query features after CPU object is realized. Typically that implies starting dummy QEMU with needed CPU model and then using query-cpu-model-expansion command to get actual property values. The task is solved by implementing query-cpu-model-expansion command so that user (mainly management layer) could get defaults via QMP. So if your goal is to get the given cpu defaults to mgmt layer it is sufficient to implement query-cpu-model-expansion command for riscv. (CC-ing libvirt folks to see if it picks up the command automatically for every target or some more work would be needed on their side as well) PS: no one cared about making -cpu name,help working till this moment and certainly not for linux-user part. To make this option work reliably it's would be necessary to make sure that query-cpu-model-expansion work in user mode as well. Also the timing when 'help' is processed should ensure that machine is available/initialized (i.e. compat properties are in effect) Once you have working query-cpu-model-expansion, your new -cpu foo,help handler can translate json to human readable format that everyone would agree upon. > To get all configuable options for this cpu, use -device rv64-riscv-cpu,help > """ > > > v1->v2: > > 1) Give a hint to use -device cpu,help for configualbe options on cpu > 2) Support list_cpu_props for linux user mode > 3) Add default to some properties to make -device cpu,help output better > > > Todo: > 1) Fix Daniel comments on KVM and cpu option check > 2) Add support for other archs > 3) Move qdev help function from qdev-monitor to qdev-property > > LIU Zhiwei (6): > cpu: Add new API cpu_type_by_name > target/riscv: Add API list_cpu_props > softmmu/vl: Add qemu_cpu_opts QemuOptsList > target/riscv: Add default value for misa property > target/riscv: Add defalut value for string property > linux-user: Move qemu_cpu_opts to cpu.c > > cpu.c | 63 +++++++++++++++++++++++++++++------- > hw/core/qdev-prop-internal.h | 2 ++ > hw/core/qdev-properties.c | 7 ++++ > include/exec/cpu-common.h | 3 ++ > include/hw/core/cpu.h | 11 +++++++ > include/hw/qdev-properties.h | 8 +++++ > linux-user/main.c | 10 ++++++ > softmmu/vl.c | 11 +++++++ > target/riscv/cpu.c | 30 +++++++++++++---- > target/riscv/cpu.h | 2 ++ > 10 files changed, 128 insertions(+), 19 deletions(-) >
On 2023/8/28 21:58, Igor Mammedov wrote: > On Mon, 28 Aug 2023 16:45:30 +0800 > LIU Zhiwei <zhiwei_liu@linux.alibaba.com> wrote: > >> Some times we want to know what is the really mean of one cpu option. >> For example, in RISC-V, we usually specify a cpu in this way: >> -cpu rv64,v=on >> >> If we don't look into the source code, we can't get the ISA extensions >> of this -cpu command line. >> >> In this patch set, we add one list_cpu_props API for common cores. It >> will output the enabled ISA extensions. >> >> In the near future, I will also list all possible user configurable >> options and all possible extensions for this cpu. >> >> In order to reuse the options parse code, I also add a QemuOptsList >> for cpu. >> >> After this patch, we can output the extensions for cpu, >> """ >> ./qemu-system-riscv64 -cpu rv64,help >> Enabled extensions: >> rv64imafdch_zicbom_zicboz_zicsr_zifencei_zihintpause_zawrs_zfa_zba_zbb_zbc_zbs_sstc_svadu > It's not that easy to get features with values in general. > (many factors influence defaults, which may include: > * properties set and/or added at realize time > * defaults amended by machine type version > * defaults amended by -global CLI options > ) > > To do that consensus was to query features after CPU object is realized. > Typically that implies starting dummy QEMU with needed CPU model and > then using query-cpu-model-expansion command to get actual property values. I agree query-cpu-model-expansion command is necessary. But for users that manually run qemu command line, it is difficult to for them to give a json-based input. > > The task is solved by implementing query-cpu-model-expansion > command so that user (mainly management layer) could get defaults via QMP. > So if your goal is to get the given cpu defaults to mgmt layer > it is sufficient to implement query-cpu-model-expansion command for riscv. > (CC-ing libvirt folks to see if it picks up the command > automatically for every target or some more work would be needed > on their side as well) > > PS: > no one cared about making -cpu name,help working till this moment > and certainly not for linux-user part. > > To make this option work reliably it's would be necessary to make sure > that query-cpu-model-expansion work in user mode as well. > > Also the timing when 'help' is processed should ensure that > machine is available/initialized (i.e. compat properties are in effect) Agree. I can defer the helper handler process to the machine initialized stage. Thanks, Zhiwei > > Once you have working query-cpu-model-expansion, your new -cpu foo,help handler > can translate json to human readable format that everyone would agree upon. > >> To get all configuable options for this cpu, use -device rv64-riscv-cpu,help >> """ >> >> >> v1->v2: >> >> 1) Give a hint to use -device cpu,help for configualbe options on cpu >> 2) Support list_cpu_props for linux user mode >> 3) Add default to some properties to make -device cpu,help output better >> >> >> Todo: >> 1) Fix Daniel comments on KVM and cpu option check >> 2) Add support for other archs >> 3) Move qdev help function from qdev-monitor to qdev-property >> >> LIU Zhiwei (6): >> cpu: Add new API cpu_type_by_name >> target/riscv: Add API list_cpu_props >> softmmu/vl: Add qemu_cpu_opts QemuOptsList >> target/riscv: Add default value for misa property >> target/riscv: Add defalut value for string property >> linux-user: Move qemu_cpu_opts to cpu.c >> >> cpu.c | 63 +++++++++++++++++++++++++++++------- >> hw/core/qdev-prop-internal.h | 2 ++ >> hw/core/qdev-properties.c | 7 ++++ >> include/exec/cpu-common.h | 3 ++ >> include/hw/core/cpu.h | 11 +++++++ >> include/hw/qdev-properties.h | 8 +++++ >> linux-user/main.c | 10 ++++++ >> softmmu/vl.c | 11 +++++++ >> target/riscv/cpu.c | 30 +++++++++++++---- >> target/riscv/cpu.h | 2 ++ >> 10 files changed, 128 insertions(+), 19 deletions(-) >>
On 8/28/23 10:58, Igor Mammedov wrote: > On Mon, 28 Aug 2023 16:45:30 +0800 > LIU Zhiwei <zhiwei_liu@linux.alibaba.com> wrote: > >> Some times we want to know what is the really mean of one cpu option. >> For example, in RISC-V, we usually specify a cpu in this way: >> -cpu rv64,v=on >> >> If we don't look into the source code, we can't get the ISA extensions >> of this -cpu command line. >> >> In this patch set, we add one list_cpu_props API for common cores. It >> will output the enabled ISA extensions. >> >> In the near future, I will also list all possible user configurable >> options and all possible extensions for this cpu. >> >> In order to reuse the options parse code, I also add a QemuOptsList >> for cpu. >> >> After this patch, we can output the extensions for cpu, >> """ >> ./qemu-system-riscv64 -cpu rv64,help >> Enabled extensions: >> rv64imafdch_zicbom_zicboz_zicsr_zifencei_zihintpause_zawrs_zfa_zba_zbb_zbc_zbs_sstc_svadu > > It's not that easy to get features with values in general. > (many factors influence defaults, which may include: > * properties set and/or added at realize time > * defaults amended by machine type version > * defaults amended by -global CLI options > ) > > To do that consensus was to query features after CPU object is realized. > Typically that implies starting dummy QEMU with needed CPU model and > then using query-cpu-model-expansion command to get actual property values. FWIW I have a working prototype of the query-cpu-model-expansion for RISC-V. I'll send it to the ML when I'm done smoothing the rough edges (hopefully end of this week). > > The task is solved by implementing query-cpu-model-expansion > command so that user (mainly management layer) could get defaults via QMP. > So if your goal is to get the given cpu defaults to mgmt layer > it is sufficient to implement query-cpu-model-expansion command for riscv. > (CC-ing libvirt folks to see if it picks up the command > automatically for every target or some more work would be needed > on their side as well) > > PS: > no one cared about making -cpu name,help working till this moment > and certainly not for linux-user part. > > To make this option work reliably it's would be necessary to make sure > that query-cpu-model-expansion work in user mode as well. I can take a look into how much extra code we need to support query-cpu-model-expansion for user mode, but no promises. If it's too much work I'd rather implement the API as is (like ARM and x86 already does) and worry about supporting it for user-mode later. Thanks, Daniel > > Also the timing when 'help' is processed should ensure that > machine is available/initialized (i.e. compat properties are in effect) > > Once you have working query-cpu-model-expansion, your new -cpu foo,help handler > can translate json to human readable format that everyone would agree upon. > >> To get all configuable options for this cpu, use -device rv64-riscv-cpu,help >> """ >> >> >> v1->v2: >> >> 1) Give a hint to use -device cpu,help for configualbe options on cpu >> 2) Support list_cpu_props for linux user mode >> 3) Add default to some properties to make -device cpu,help output better >> >> >> Todo: >> 1) Fix Daniel comments on KVM and cpu option check >> 2) Add support for other archs >> 3) Move qdev help function from qdev-monitor to qdev-property >> >> LIU Zhiwei (6): >> cpu: Add new API cpu_type_by_name >> target/riscv: Add API list_cpu_props >> softmmu/vl: Add qemu_cpu_opts QemuOptsList >> target/riscv: Add default value for misa property >> target/riscv: Add defalut value for string property >> linux-user: Move qemu_cpu_opts to cpu.c >> >> cpu.c | 63 +++++++++++++++++++++++++++++------- >> hw/core/qdev-prop-internal.h | 2 ++ >> hw/core/qdev-properties.c | 7 ++++ >> include/exec/cpu-common.h | 3 ++ >> include/hw/core/cpu.h | 11 +++++++ >> include/hw/qdev-properties.h | 8 +++++ >> linux-user/main.c | 10 ++++++ >> softmmu/vl.c | 11 +++++++ >> target/riscv/cpu.c | 30 +++++++++++++---- >> target/riscv/cpu.h | 2 ++ >> 10 files changed, 128 insertions(+), 19 deletions(-) >> >
© 2016 - 2024 Red Hat, Inc.