On 2/18/25 01:25, Alistair Francis wrote:
On Fri, Feb 7, 2025 at 4:28 AM Paolo Bonzini <pbonz...@redhat.com> wrote:

Hi Alastair,

the subject is a slightly underhanded description, in that what I really
wanted to achieve was removing RISC-V's use of .instance_post_init; that's
because RISC-V operate with an opposite conception of .instance_post_init
compared to everyone else: RISC-V wants to register properties there,
whereas x86 and hw/pci-bridge/pcie_root_port.c want to set them.
While it's possible to move RISC-V's code to instance_init, the others
have to run after global properties have been set by device_post_init().

However, I think the result is an improvement anyway, in that it makes
CPU definitions entirely declarative.  Previously, multiple instance_init
functions each override the properties that were set by the superclass,
and the code used a mix of subclassing and direct invocation of other
functions.  Now, instead, after .class_init all the settings for each
model are available in a RISCVCPUDef struct, and the result is copied
into the RISCVCPU at .instance_init time.  This is done with a single
function that starts from the parent's RISCVCPUDef and applies the delta
stored in the CPU's class_data.

That is nice!

I don't love the ifdef-ery around `#include "cpu_cfg_fields.h.inc"`
but overall the patches look fine.

No problem, if you're okay with the final "target/riscv: move SATP modes out of CPUConfig" I can move it earlier in the series and get rid of the #ifdefs in cpu_cfg_fields.h.inc. It's only needed because satp_modes are not merged by the class_init function (they're not even initialized in fact).

Do you think this is a good approach?

Seems fine to me :)

Ok, then I'll repost as soon as the patches for read-only class_data are ready.

Paolo


Reply via email to