target/loongarch: Fix the cpu unplug resource leak
When the cpu is created, qemu_add_vm_change_state_handler is called in the kvm_arch_init_vcpu function to create the VMChangeStateEntry resource. However, the resource is not released when the cpu is destroyed. This results in a qemu process segment error when the virtual machine restarts after the cpu is unplugged. This patch solves the problem by adding the corresponding resource release process to the kvm_arch_destroy_vcpu function. Signed-off-by: Xianglai Li <lixianglai@loongson.cn> Reviewed-by: Bibo Mao <maobibo@loongson.cn> Message-Id: <20250324123328.518076-1-lixianglai@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>
This commit is contained in:
parent
b876e721f1
commit
0c346576e4
@ -426,6 +426,7 @@ struct ArchCPU {
|
|||||||
const char *dtb_compatible;
|
const char *dtb_compatible;
|
||||||
/* used by KVM_REG_LOONGARCH_COUNTER ioctl to access guest time counters */
|
/* used by KVM_REG_LOONGARCH_COUNTER ioctl to access guest time counters */
|
||||||
uint64_t kvm_state_counter;
|
uint64_t kvm_state_counter;
|
||||||
|
VMChangeStateEntry *vmsentry;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1080,8 +1080,10 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
|||||||
uint64_t val;
|
uint64_t val;
|
||||||
int ret;
|
int ret;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
||||||
|
|
||||||
qemu_add_vm_change_state_handler(kvm_loongarch_vm_stage_change, cs);
|
cpu->vmsentry = qemu_add_vm_change_state_handler(
|
||||||
|
kvm_loongarch_vm_stage_change, cs);
|
||||||
|
|
||||||
if (!kvm_get_one_reg(cs, KVM_REG_LOONGARCH_DEBUG_INST, &val)) {
|
if (!kvm_get_one_reg(cs, KVM_REG_LOONGARCH_DEBUG_INST, &val)) {
|
||||||
brk_insn = val;
|
brk_insn = val;
|
||||||
@ -1197,6 +1199,9 @@ void kvm_loongarch_cpu_post_init(LoongArchCPU *cpu)
|
|||||||
|
|
||||||
int kvm_arch_destroy_vcpu(CPUState *cs)
|
int kvm_arch_destroy_vcpu(CPUState *cs)
|
||||||
{
|
{
|
||||||
|
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
||||||
|
|
||||||
|
qemu_del_vm_change_state_handler(cpu->vmsentry);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user