| 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
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);
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);
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(-)