On Fri, 14 Oct 2016 10:48:58 -0300
Eduardo Habkost <ehabk...@redhat.com> wrote:
> On Fri, Oct 14, 2016 at 03:34:17PM +0200, Laurent Vivier wrote:
> > On 14/10/2016 15:33, Eduardo Habkost wrote:
> > > On Thu, Oct 13, 2016 at 06:24:44PM +0200, Laurent Vivier wrote:
> > >> We have now the cpu_exec_realize() in realize,
> > >> so the init part must be in init.
> > >>
> > >> I've removed the cannot_destroy_with_object_finalize_yet field as
> > >> unsafe references have been moved to cpu_exec_realize().
> > >> (tested with QOM command provided by commit 4c315c27 with
> > >> "athlon-x86_64-cpu")
> > >>
> > >> CC: Eduardo Habkost <ehabk...@redhat.com>
> > >> Signed-off-by: Laurent Vivier <lviv...@redhat.com>
> > >
> > > Resending the question I asked in my reply to v1:
> > >
> > > Instead of creating requiring each subclass to manually call
> > > cpu_exec_init()) on instance_init, why don't we move parts of
> > > cpu_exec_init()/cpu_exec_realize() code to cpu_common_initfn()?
> > > (TYPE_CPU's instance_init)
> > >
> > > (And if there's any code that needs to be run after the
> > > subclasses instance_init functions, we can just add a
> > > instance_post_init function to TYPE_CPU).
> > >
> > It's done in PATCH 20/20.
> > Is that what you want?
> Yes (except that I would have inlined the the cpu_exec_init()
> code inside cpu_common_init()).
> I think I expected this to be done in a single step, that
> wouldn't require touching code for all architectures three times.
> Something like:
> 1) Move cpu->as, cpu->num_ases, cpu->thread_id, cpu->memory
> initialization, and "memory" property registration from
> cpu_exec_init() to cpu_common_init() (no architecture code
> 2) (optional) Rename cpu_exec_init() to cpu_exec_realize() (only
> trivial changes in architecture code)
I'd do all of it in 1 step
- split cpu_exec_init on init/realize parts
(comment in cpu_exec_init says that qom/cpu.c can't be used for
- call cpu_exec_init() from cpu_common_init()
- s/cpu_exec_init/cpu_exec_realize/ in target-*
Follow up patches
2) 1 patch, could move parts of split cpu_exec_init() to cpu_common_init()
if that makes sense.
3) 1 patch, could move cpu_exec_realize() into per target *_realizefn()
it would be not small patch but still trivial
4) 1 patch, do similar (#3) thing for unrealize
Perhaps #3,4 could be done in a more generic way in qom/cpu.c
but I don't have a good idea how to do it.