On 2/4/21 11:23 AM, Claudio Fontana wrote: > On 2/3/21 5:51 PM, Alex Bennée wrote: >> >> Claudio Fontana <cfont...@suse.de> writes: >> >>> move the call to qemu_init_vcpu inside cpu_common_realizefn, >>> so it does not need to be done explicitly in each target cpu. >>> >>> Despite this, the way cpu realize is done continues to be not ideal; >>> >>> ideally the cpu_list_add would be done in common_cpu, >>> and in this case we could avoid even more redundant open coded >>> additional calls in target/xxx/cpu.c, >>> >>> but this cannot happen because target cpu code, plugins, etc >>> now all came to rely on cpu->index >>> (which is updated in cpu_list_add), since no particular order >>> was defined previously, so we are stuck with the freak call >>> order for the target cpu realizefn. >>> >>> After this patch the target/xxx/cpu.c realizefn body becomes: >>> >>> void mycpu_realizefn(DeviceState *dev, Error **errp) >>> { >>> /* ... */ >>> cpu_exec_realizefn(CPU_STATE(dev), errp); >>> >>> /* ... anything that needs done pre-qemu_vcpu_init */ >>> >>> xcc->parent_realize(dev, errp); /* does qemu_vcpu_init */ >>> >>> /* ... anything that needs to be done after qemu_vcpu_init */ >>> } >> >> Uggh, introducing a magic order seems like inviting trouble for later >> on. Is there anyway we can improve things? Paolo? >> > > > The magic order is there already. I call it "freak order" instead of "magic", > because this is more the result of uncontrolled code growth rather than the > work of magic :-)
Eventually related to this unsolved problem: cpu_reset() might modify architecture-specific fields allocated by qemu_init_vcpu(). To avoid bugs similar to the one fixed in commit 00d0f7cb66 when introducing new architectures, move the cpu_reset() calls after qemu_init_vcpu(). See discussion: https://www.mail-archive.com/qemu-devel@nongnu.org/msg686480.html > > This patch attempts to remove one degree of freedom, but the current > situation of cpu realizing is basically fubar. This patch attempts to improve > things slightly, > but as mentioned elsewhere it basically fails to achieve the goal, > > so I am tempted to just retire it. Maybe someone interested could look at the > situation with new eyes (possibly even me later on).