Patchwork [10/11] cpu: do not use object_delete

login
register
mail settings
Submitter Paolo Bonzini
Date Dec. 5, 2012, 8:44 p.m.
Message ID <1354740282-20679-11-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/203970/
State New
Headers show

Comments

Paolo Bonzini - Dec. 5, 2012, 8:44 p.m.
CPUs are never added to the composition tree, so delete is achieved
simply by removing the last references to them.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 linux-user/syscall.c | 2 +-
 target-i386/helper.c | 4 ++--
 target-sparc/cpu.c   | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)
Andreas Färber - Dec. 18, 2012, 9:07 p.m.
Am 05.12.2012 21:44, schrieb Paolo Bonzini:
> CPUs are never added to the composition tree, so delete is achieved
> simply by removing the last references to them.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Reviewed-by: Andreas Färber <afaerber@suse.de>

Note however that x86 is undergoing major changes and other targets are
growing needs to ... "deconstruct" :) CPUs, too. So this is very likely
to conflict. As I understand it, I can't just unparent a CPU today as it
would not get freed?

Andreas

> ---
>  linux-user/syscall.c | 2 +-
>  target-i386/helper.c | 4 ++--
>  target-sparc/cpu.c   | 2 +-
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index e4291ed..64b2610 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5188,7 +5188,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>                          NULL, NULL, 0);
>            }
>            thread_env = NULL;
> -          object_delete(OBJECT(ENV_GET_CPU(cpu_env)));
> +          object_unref(OBJECT(ENV_GET_CPU(cpu_env)));
>            g_free(ts);
>            pthread_exit(NULL);
>        }
> diff --git a/target-i386/helper.c b/target-i386/helper.c
> index bf206cf..d628352 100644
> --- a/target-i386/helper.c
> +++ b/target-i386/helper.c
> @@ -1251,14 +1251,14 @@ X86CPU *cpu_x86_init(const char *cpu_model)
>      env->cpu_model_str = cpu_model;
>  
>      if (cpu_x86_register(cpu, cpu_model) < 0) {
> -        object_delete(OBJECT(cpu));
> +        object_unref(OBJECT(cpu));
>          return NULL;
>      }
>  
>      x86_cpu_realize(OBJECT(cpu), &error);
>      if (error) {
>          error_free(error);
> -        object_delete(OBJECT(cpu));
> +        object_unref(OBJECT(cpu));
>          return NULL;
>      }
>      return cpu;
> diff --git a/target-sparc/cpu.c b/target-sparc/cpu.c
> index 882d306..b38641b 100644
> --- a/target-sparc/cpu.c
> +++ b/target-sparc/cpu.c
> @@ -119,7 +119,7 @@ SPARCCPU *cpu_sparc_init(const char *cpu_model)
>      }
>  
>      if (cpu_sparc_register(env, cpu_model) < 0) {
> -        object_delete(OBJECT(cpu));
> +        object_unref(OBJECT(cpu));
>          return NULL;
>      }
>      qemu_init_vcpu(env);
Paolo Bonzini - Dec. 18, 2012, 9:19 p.m.
Il 18/12/2012 22:07, Andreas Färber ha scritto:
>> > CPUs are never added to the composition tree, so delete is achieved
>> > simply by removing the last references to them.
>> > 
>> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Reviewed-by: Andreas Färber <afaerber@suse.de>
> 
> Note however that x86 is undergoing major changes and other targets are
> growing needs to ... "deconstruct" :) CPUs, too. So this is very likely
> to conflict. As I understand it, I can't just unparent a CPU today as it
> would not get freed?

Honestly I don't remember. :)

Paolo

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index e4291ed..64b2610 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5188,7 +5188,7 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                         NULL, NULL, 0);
           }
           thread_env = NULL;
-          object_delete(OBJECT(ENV_GET_CPU(cpu_env)));
+          object_unref(OBJECT(ENV_GET_CPU(cpu_env)));
           g_free(ts);
           pthread_exit(NULL);
       }
diff --git a/target-i386/helper.c b/target-i386/helper.c
index bf206cf..d628352 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -1251,14 +1251,14 @@  X86CPU *cpu_x86_init(const char *cpu_model)
     env->cpu_model_str = cpu_model;
 
     if (cpu_x86_register(cpu, cpu_model) < 0) {
-        object_delete(OBJECT(cpu));
+        object_unref(OBJECT(cpu));
         return NULL;
     }
 
     x86_cpu_realize(OBJECT(cpu), &error);
     if (error) {
         error_free(error);
-        object_delete(OBJECT(cpu));
+        object_unref(OBJECT(cpu));
         return NULL;
     }
     return cpu;
diff --git a/target-sparc/cpu.c b/target-sparc/cpu.c
index 882d306..b38641b 100644
--- a/target-sparc/cpu.c
+++ b/target-sparc/cpu.c
@@ -119,7 +119,7 @@  SPARCCPU *cpu_sparc_init(const char *cpu_model)
     }
 
     if (cpu_sparc_register(env, cpu_model) < 0) {
-        object_delete(OBJECT(cpu));
+        object_unref(OBJECT(cpu));
         return NULL;
     }
     qemu_init_vcpu(env);