Hi Phil, > From: Philippe Mathieu-Daudé <[email protected]> > Sent: Tuesday, October 3, 2023 7:34 AM > To: Salil Mehta <[email protected]>; [email protected]; qemu- > [email protected] > Cc: [email protected]; [email protected]; Jonathan Cameron > <[email protected]>; [email protected]; > [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; [email protected]; zhukeqian > <[email protected]>; wangxiongfeng (C) <[email protected]>; > wangyanan (Y) <[email protected]>; [email protected]; > [email protected]; [email protected] > Subject: Re: [PATCH RFC V2 31/37] physmem,gdbstub: Common helping > funcs/changes to *unrealize* vCPU > > Hi Salil, > > On 26/9/23 12:04, Salil Mehta wrote: > > Supporting vCPU Hotplug for ARM arch also means introducing new > functionality of > > unrealizing the ARMCPU. This requires some new common functions. > > > > Defining them as part of architecture independent change so that this > code could > > be reused by other interested parties. > > > > Signed-off-by: Salil Mehta <[email protected]> > > --- > > gdbstub/gdbstub.c | 13 +++++++++++++ > > include/exec/cpu-common.h | 8 ++++++++ > > include/exec/gdbstub.h | 1 + > > include/hw/core/cpu.h | 1 + > > softmmu/physmem.c | 25 +++++++++++++++++++++++++ > > 5 files changed, 48 insertions(+) > > > > diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h > > index dab572c9bd..ffd815a0d8 100644 > > --- a/include/hw/core/cpu.h > > +++ b/include/hw/core/cpu.h > > @@ -366,6 +366,7 @@ struct CPUState { > > QSIMPLEQ_HEAD(, qemu_work_item) work_list; > > > > CPUAddressSpace *cpu_ases; > > + int cpu_ases_ref_count; > > int num_ases; > > AddressSpace *as; > > MemoryRegion *memory; > > diff --git a/softmmu/physmem.c b/softmmu/physmem.c > > index 3df73542e1..a93ae783af 100644 > > --- a/softmmu/physmem.c > > +++ b/softmmu/physmem.c > > @@ -762,6 +762,7 @@ void cpu_address_space_init(CPUState *cpu, int asidx, > > > > if (!cpu->cpu_ases) { > > cpu->cpu_ases = g_new0(CPUAddressSpace, cpu->num_ases); > > + cpu->cpu_ases_ref_count = cpu->num_ases; > > } > > > > newas = &cpu->cpu_ases[asidx]; > > @@ -775,6 +776,30 @@ void cpu_address_space_init(CPUState *cpu, int > asidx, > > } > > } > > > > +void cpu_address_space_destroy(CPUState *cpu, int asidx) > > +{ > > + CPUAddressSpace *cpuas; > > + > > + assert(asidx < cpu->num_ases); > > + assert(asidx == 0 || !kvm_enabled()); > > + assert(cpu->cpu_ases); > > + > > + cpuas = &cpu->cpu_ases[asidx]; > > + if (tcg_enabled()) { > > + memory_listener_unregister(&cpuas->tcg_as_listener); > > + } > > + > > + address_space_destroy(cpuas->as); > > + g_free_rcu(cpuas->as, rcu); > > + > > + if (cpu->cpu_ases_ref_count == 1) { > > + g_free(cpu->cpu_ases); > > + cpu->cpu_ases = NULL; > > + } > > + > > + cpu->cpu_ases_ref_count--; > > See Richard comment from: > https://lore.kernel.org/qemu-devel/594b2550-9a73-684f-6e54- > [email protected]/ > > "I think it would be better to destroy all address spaces at once, > "so that you don't need to invent a reference count that isn't used > "for anything else.
Yes, we can do that and remove the reference count. The only reason I did it was because I was not sure if it is safe to assume that all the AddressSpace will always be destroyed *together*. And now since this is being ported to other architectures will the same hold true everywhere? Thanks Salil.
