mirror of https://gitee.com/openkylin/qemu.git
cputlb: destroy CPUTLB with tlb_destroy
I was after adding qemu_spin_destroy calls, but while at it I noticed that we are leaking some memory. Signed-off-by: Emilio G. Cota <cota@braap.org> Signed-off-by: Robert Foley <robert.foley@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20200609200738.445-5-robert.foley@linaro.org> Message-Id: <20200612190237.30436-8-alex.bennee@linaro.org>
This commit is contained in:
parent
4384a70d01
commit
816d9be5ea
|
@ -270,6 +270,21 @@ void tlb_init(CPUState *cpu)
|
|||
}
|
||||
}
|
||||
|
||||
void tlb_destroy(CPUState *cpu)
|
||||
{
|
||||
CPUArchState *env = cpu->env_ptr;
|
||||
int i;
|
||||
|
||||
qemu_spin_destroy(&env_tlb(env)->c.lock);
|
||||
for (i = 0; i < NB_MMU_MODES; i++) {
|
||||
CPUTLBDesc *desc = &env_tlb(env)->d[i];
|
||||
CPUTLBDescFast *fast = &env_tlb(env)->f[i];
|
||||
|
||||
g_free(fast->table);
|
||||
g_free(desc->iotlb);
|
||||
}
|
||||
}
|
||||
|
||||
/* flush_all_helper: run fn across all cpus
|
||||
*
|
||||
* If the wait flag is set then the src cpu's helper will be queued as
|
||||
|
|
1
exec.c
1
exec.c
|
@ -892,6 +892,7 @@ void cpu_exec_unrealizefn(CPUState *cpu)
|
|||
{
|
||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
||||
|
||||
tlb_destroy(cpu);
|
||||
cpu_list_remove(cpu);
|
||||
|
||||
if (cc->vmsd != NULL) {
|
||||
|
|
|
@ -124,6 +124,11 @@ void cpu_address_space_init(CPUState *cpu, int asidx,
|
|||
* @cpu: CPU whose TLB should be initialized
|
||||
*/
|
||||
void tlb_init(CPUState *cpu);
|
||||
/**
|
||||
* tlb_destroy - destroy a CPU's TLB
|
||||
* @cpu: CPU whose TLB should be destroyed
|
||||
*/
|
||||
void tlb_destroy(CPUState *cpu);
|
||||
/**
|
||||
* tlb_flush_page:
|
||||
* @cpu: CPU whose TLB should be flushed
|
||||
|
@ -284,6 +289,9 @@ void tlb_set_page(CPUState *cpu, target_ulong vaddr,
|
|||
static inline void tlb_init(CPUState *cpu)
|
||||
{
|
||||
}
|
||||
static inline void tlb_destroy(CPUState *cpu)
|
||||
{
|
||||
}
|
||||
static inline void tlb_flush_page(CPUState *cpu, target_ulong addr)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue