On 5 October 2016 at 12:38, Laurent Vivier <lviv...@redhat.com> wrote: > Since commit 42ecaba ("target-i386: Call cpu_exec_init() on realize"), > , commit 6dd0f83 ("target-ppc: Move cpu_exec_init() call to realize > function"), > and commit c6644fc ("s390x/cpu: Get rid of side effects when creating a > vcpu"), > cpu_exec_init() has been moved to realize function for some architectures > to implement CPU htoplug. This allows any failures from cpu_exec_init() to be > handled appropriately. > > This series tries to do the same work for all the other CPUs. > > But as the ARM Virtual Machine ("virt") needs the "memory" property of the CPU > in the machine init function (the "memory" property is created in > cpu_exec_init() we want to move to the realize part), split cpu_exec_init() in > two parts: a realize part (cpu_exec_realize(), adding the CPU in the > environment) and an init part (cpu_exec_init(), initializing the CPU, like > adding the "memory" property). > > For target-i386, target-s390 and target-ppc, we move back the cpu_exec_init() > into the init part, and put the cpu_exec_realize() into the realize part. > For all the other CPUs, we add the cpu_exec_realize() function into the > realize part. > > This also allows to remove all the "cannot_destroy_with_object_finalize_yet" > properties from the CPU device class.
At some point following this we should remove the Error** argument from cpu_exec_init() : init isn't permitted to fail and indeed cpu_exec_init() never does, so the argument is unneeded. If realize fails do we correctly release the reference we take on cpu->memory in cpu_exec_init()? thanks -- PMM