diff mbox

[16/19] target-tilegx: move cpu_exec_realize() to realize function

Message ID 1475696333-8706-17-git-send-email-lvivier@redhat.com
State New
Headers show

Commit Message

Laurent Vivier Oct. 5, 2016, 7:38 p.m. UTC
I've removed the cannot_destroy_with_object_finalize_yet field as
cpu_exec_init() is not called by tilegx_cpu_initfn() anymore
(not tested with QOM command as tilegx is only available in linux-user
 mode)

CC: Chen Gang <gang.chen.5i5j@gmail.com>
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
 target-tilegx/cpu.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Comments

Chen Gang Oct. 5, 2016, 11:57 p.m. UTC | #1
On 10/6/16 03:38, Laurent Vivier wrote:
> I've removed the cannot_destroy_with_object_finalize_yet field as
> cpu_exec_init() is not called by tilegx_cpu_initfn() anymore
> (not tested with QOM command as tilegx is only available in linux-user
>  mode)
> 


For master branch, I can not find cpu_exec_realize in total source code,
I am not quite sure whether it is ok or not.

And in honest, now, tilegx-linux-user is not implemented completely, the
floating point insns are not supported by our main branch (which should
be one of main feature for tilegx) -- which I should try.

Thanks.

> CC: Chen Gang <gang.chen.5i5j@gmail.com>
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
>  target-tilegx/cpu.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/target-tilegx/cpu.c b/target-tilegx/cpu.c
> index f7ec920..6be69ef 100644
> --- a/target-tilegx/cpu.c
> +++ b/target-tilegx/cpu.c
> @@ -92,6 +92,13 @@ static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp)
>  {
>      CPUState *cs = CPU(dev);
>      TileGXCPUClass *tcc = TILEGX_CPU_GET_CLASS(dev);
> +    Error *local_err = NULL;
> +
> +    cpu_exec_realize(cs, &local_err);
> +    if (local_err != NULL) {
> +        error_propagate(errp, local_err);
> +        return;
> +    }
>  
>      cpu_reset(cs);
>      qemu_init_vcpu(cs);
> @@ -108,7 +115,6 @@ static void tilegx_cpu_initfn(Object *obj)
>  
>      cs->env_ptr = env;
>      cpu_exec_init(cs, &error_abort);
> -    cpu_exec_realize(cs, &error_abort);
>  
>      if (tcg_enabled() && !tcg_initialized) {
>          tcg_initialized = true;
> @@ -163,13 +169,6 @@ static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
>      cc->set_pc = tilegx_cpu_set_pc;
>      cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
>      cc->gdb_num_core_regs = 0;
> -
> -    /*
> -     * Reason: tilegx_cpu_initfn() calls cpu_exec_init(), which saves
> -     * the object in cpus -> dangling pointer after final
> -     * object_unref().
> -     */
> -    dc->cannot_destroy_with_object_finalize_yet = true;
>  }
>  
>  static const TypeInfo tilegx_cpu_type_info = {
>
David Gibson Oct. 6, 2016, 5:04 a.m. UTC | #2
On Thu, Oct 06, 2016 at 07:57:34AM +0800, Chen Gang wrote:
> 
> On 10/6/16 03:38, Laurent Vivier wrote:
> > I've removed the cannot_destroy_with_object_finalize_yet field as
> > cpu_exec_init() is not called by tilegx_cpu_initfn() anymore
> > (not tested with QOM command as tilegx is only available in linux-user
> >  mode)
> > 
> 
> 
> For master branch, I can not find cpu_exec_realize in total source code,
> I am not quite sure whether it is ok or not.

It's a new function introduced in the first patch of this series.  The
old cpu_exec_init() was split into cpu_exec_init() which contains
things which are safe at init time, and cpu_exec_realize() which is
supposed to be called at realize() time.

> 
> And in honest, now, tilegx-linux-user is not implemented completely, the
> floating point insns are not supported by our main branch (which should
> be one of main feature for tilegx) -- which I should try.
> 
> Thanks.
> 
> > CC: Chen Gang <gang.chen.5i5j@gmail.com>
> > Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> > ---
> >  target-tilegx/cpu.c | 15 +++++++--------
> >  1 file changed, 7 insertions(+), 8 deletions(-)
> > 
> > diff --git a/target-tilegx/cpu.c b/target-tilegx/cpu.c
> > index f7ec920..6be69ef 100644
> > --- a/target-tilegx/cpu.c
> > +++ b/target-tilegx/cpu.c
> > @@ -92,6 +92,13 @@ static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp)
> >  {
> >      CPUState *cs = CPU(dev);
> >      TileGXCPUClass *tcc = TILEGX_CPU_GET_CLASS(dev);
> > +    Error *local_err = NULL;
> > +
> > +    cpu_exec_realize(cs, &local_err);
> > +    if (local_err != NULL) {
> > +        error_propagate(errp, local_err);
> > +        return;
> > +    }
> >  
> >      cpu_reset(cs);
> >      qemu_init_vcpu(cs);
> > @@ -108,7 +115,6 @@ static void tilegx_cpu_initfn(Object *obj)
> >  
> >      cs->env_ptr = env;
> >      cpu_exec_init(cs, &error_abort);
> > -    cpu_exec_realize(cs, &error_abort);
> >  
> >      if (tcg_enabled() && !tcg_initialized) {
> >          tcg_initialized = true;
> > @@ -163,13 +169,6 @@ static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
> >      cc->set_pc = tilegx_cpu_set_pc;
> >      cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
> >      cc->gdb_num_core_regs = 0;
> > -
> > -    /*
> > -     * Reason: tilegx_cpu_initfn() calls cpu_exec_init(), which saves
> > -     * the object in cpus -> dangling pointer after final
> > -     * object_unref().
> > -     */
> > -    dc->cannot_destroy_with_object_finalize_yet = true;
> >  }
> >  
> >  static const TypeInfo tilegx_cpu_type_info = {
> > 
>
Laurent Vivier Oct. 6, 2016, 6:55 a.m. UTC | #3
On 06/10/2016 01:57, Chen Gang wrote:
> 
> On 10/6/16 03:38, Laurent Vivier wrote:
>> I've removed the cannot_destroy_with_object_finalize_yet field as
>> cpu_exec_init() is not called by tilegx_cpu_initfn() anymore
>> (not tested with QOM command as tilegx is only available in linux-user
>>  mode)
>>
> 
> 
> For master branch, I can not find cpu_exec_realize in total source code,
> I am not quite sure whether it is ok or not.

See PATCH 1/19  exec: split cpu_exec_init()

Thanks,
Laurent
diff mbox

Patch

diff --git a/target-tilegx/cpu.c b/target-tilegx/cpu.c
index f7ec920..6be69ef 100644
--- a/target-tilegx/cpu.c
+++ b/target-tilegx/cpu.c
@@ -92,6 +92,13 @@  static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp)
 {
     CPUState *cs = CPU(dev);
     TileGXCPUClass *tcc = TILEGX_CPU_GET_CLASS(dev);
+    Error *local_err = NULL;
+
+    cpu_exec_realize(cs, &local_err);
+    if (local_err != NULL) {
+        error_propagate(errp, local_err);
+        return;
+    }
 
     cpu_reset(cs);
     qemu_init_vcpu(cs);
@@ -108,7 +115,6 @@  static void tilegx_cpu_initfn(Object *obj)
 
     cs->env_ptr = env;
     cpu_exec_init(cs, &error_abort);
-    cpu_exec_realize(cs, &error_abort);
 
     if (tcg_enabled() && !tcg_initialized) {
         tcg_initialized = true;
@@ -163,13 +169,6 @@  static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
     cc->set_pc = tilegx_cpu_set_pc;
     cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
     cc->gdb_num_core_regs = 0;
-
-    /*
-     * Reason: tilegx_cpu_initfn() calls cpu_exec_init(), which saves
-     * the object in cpus -> dangling pointer after final
-     * object_unref().
-     */
-    dc->cannot_destroy_with_object_finalize_yet = true;
 }
 
 static const TypeInfo tilegx_cpu_type_info = {