- target/i386: csv: Release CSV3 shared pages after unmapping DMA - target/i386: Add new CPU model ClearwaterForest - target/i386: add sha512, sm3, sm4 feature bits - docs: Add GNR, SRF and CWF CPU models - target/i386: Export BHI_NO bit to guests - target/i386: Introduce SierraForest-v2 model - vdpa/iommufd:Implement DMA mapping through the iommufd interface - vdpa/iommufd:Introduce vdpa-iommufd module - vdpa/iommufd:support associating iommufd backend for vDPA devices - Kconfig/iommufd/VDPA: Update IOMMUFD module configuration dependencies The vDPA module can also use IOMMUFD like the VFIO module. - backends/iommufd: Get rid of qemu_open_old() - backends/iommufd: Make iommufd_backend_*() return bool - backends/iommufd: Fix missing ERRP_GUARD() for error_prepend() - backends/iommufd: Remove mutex - backends/iommufd: Remove check on number of backend users - hw/intc: Add extioi ability of 256 vcpu interrupt routing - hw/rtc: Fixed loongson rtc emulation errors - hw/loongarch/boot: Adjust the loading position of the initrd - target/loongarch: Fix the cpu unplug resource leak - target/loongarch: fix vcpu reset command word issue - vdpa:Fix dirty page bitmap synchronization not done after suspend for vdpa devices Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com> (cherry picked from commit a5212066e7516ff2a316e1b2feaa75dd5ee4d17a)
77 lines
2.7 KiB
Diff
77 lines
2.7 KiB
Diff
From 2a51f062a46c2e3fbd96a1d75f9d53cab449f4ac Mon Sep 17 00:00:00 2001
|
|
From: Xianglai Li <lixianglai@loongson.cn>
|
|
Date: Fri, 21 Mar 2025 20:40:37 +0800
|
|
Subject: [PATCH] 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>
|
|
---
|
|
target/loongarch/cpu.c | 2 +-
|
|
target/loongarch/cpu.h | 1 +
|
|
target/loongarch/kvm/kvm.c | 5 ++++-
|
|
3 files changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
|
|
index 570ce8be3b..561566f3a0 100644
|
|
--- a/target/loongarch/cpu.c
|
|
+++ b/target/loongarch/cpu.c
|
|
@@ -573,7 +573,7 @@ static void loongarch_cpu_reset_hold(Object *obj)
|
|
env->CSR_ECFG = FIELD_DP64(env->CSR_ECFG, CSR_ECFG, VS, 0);
|
|
env->CSR_ECFG = FIELD_DP64(env->CSR_ECFG, CSR_ECFG, LIE, 0);
|
|
|
|
- env->CSR_ESTAT = env->CSR_ESTAT & (~MAKE_64BIT_MASK(0, 2));
|
|
+ env->CSR_ESTAT = 0;
|
|
env->CSR_RVACFG = FIELD_DP64(env->CSR_RVACFG, CSR_RVACFG, RBITS, 0);
|
|
env->CSR_CPUID = cs->cpu_index;
|
|
env->CSR_TCFG = FIELD_DP64(env->CSR_TCFG, CSR_TCFG, EN, 0);
|
|
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
|
|
index 9af622aba5..6cc717c5ea 100644
|
|
--- a/target/loongarch/cpu.h
|
|
+++ b/target/loongarch/cpu.h
|
|
@@ -427,6 +427,7 @@ struct ArchCPU {
|
|
const char *dtb_compatible;
|
|
/* used by KVM_REG_LOONGARCH_COUNTER ioctl to access guest time counters */
|
|
uint64_t kvm_state_counter;
|
|
+ VMChangeStateEntry *vmsentry;
|
|
};
|
|
|
|
/**
|
|
diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
|
|
index 277210ca04..f6e008a517 100644
|
|
--- a/target/loongarch/kvm/kvm.c
|
|
+++ b/target/loongarch/kvm/kvm.c
|
|
@@ -905,9 +905,10 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
|
uint64_t val;
|
|
int ret;
|
|
Error *local_err = NULL;
|
|
+ LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
|
|
|
ret = 0;
|
|
- 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)) {
|
|
brk_insn = val;
|
|
@@ -928,6 +929,8 @@ int kvm_arch_init_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;
|
|
}
|
|
|
|
--
|
|
2.41.0.windows.1
|
|
|