Re: [RFC PATCH v2 0/6] Add API for list cpu extensions

2023-08-28 Thread LIU Zhiwei



On 2023/8/28 21:58, Igor Mammedov wrote:

On Mon, 28 Aug 2023 16:45:30 +0800
LIU Zhiwei  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(-)





Re: [RFC PATCH v2 0/6] Add API for list cpu extensions

2023-08-28 Thread Daniel Henrique Barboza




On 8/28/23 10:58, Igor Mammedov wrote:

On Mon, 28 Aug 2023 16:45:30 +0800
LIU Zhiwei  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(-)







Re: [RFC PATCH v2 0/6] Add API for list cpu extensions

2023-08-28 Thread Igor Mammedov
On Mon, 28 Aug 2023 16:45:30 +0800
LIU Zhiwei  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(-)
> 




[RFC PATCH v2 0/6] Add API for list cpu extensions

2023-08-28 Thread LIU Zhiwei
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