On Thu, Aug 24, 2023 at 07:14:37PM -0300, Daniel Henrique Barboza wrote: > If we want to make better decisions when auto-enabling extensions during > realize() we need a way to tell if an user set an extension manually. > The RISC-V KVM driver has its own solution via a KVMCPUConfig struct > that has an 'user_set' flag that is set during the Property set() > callback. The set() callback also does init() time validations based on > the current KVM driver capabilities. > > For TCG we would want a 'user_set' mechanic too, but we would look > ad-hoc via cpu_cfg_ext_auto_update() if a certain extension was user set > or not. If we copy what was made in the KVM side we would look for > 'user_set' for one into 60+ extension structs spreaded in 3 arrays > (riscv_cpu_extensions, riscv_cpu_experimental_exts, > riscv_cpu_vendor_exts). > > We'll still need an extension struct but we won't be using the > 'user_set' flag: > > - 'RISCVCPUMultiExtConfig' will be our specialized structure, similar to what > we're already doing with the MISA extensions in 'RISCVCPUMisaExtConfig'. > DEFINE_PROP_BOOL() for all 3 extensions arrays were replaced by > MULTI_EXT_CFG_BOOL(), a macro that will init our specialized struct; > > - the 'multi_ext_user_opts' hash will be used to store the offset of each > extension that the user set via the set() callback, cpu_set_multi_ext_cfg(). > For now we're just initializing and populating it - next patch will use > it to determine if a certain extension was user set; > > - cpu_add_multi_ext_prop() is a new helper that will replace the > qdev_property_add_static() calls that our macros are doing to populate > user properties. The macro was renamed to ADD_CPU_MULTIEXT_PROPS_ARRAY() > for clarity. Note that the non-extension properties in > riscv_cpu_options[] still need to be declared via qdev(). > > Signed-off-by: Daniel Henrique Barboza <dbarb...@ventanamicro.com> > Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> > --- > target/riscv/cpu.c | 257 ++++++++++++++++++++++++++++----------------- > 1 file changed, 158 insertions(+), 99 deletions(-) >
Reviewed-by: Andrew Jones <ajo...@ventanamicro.com>