qemu-cr16/stubs
Peter Maydell 300a87c502 physmem: Destroy all CPU AddressSpaces on unrealize
When we unrealize a CPU object (which happens on vCPU hot-unplug), we
should destroy all the AddressSpace objects we created via calls to
cpu_address_space_init() when the CPU was realized.

Commit 24bec42f3d added a function to do this for a specific
AddressSpace, but did not add any places where the function was
called.

Since we always want to destroy all the AddressSpaces on unrealize,
regardless of the target architecture, we don't need to try to keep
track of how many are still undestroyed, or make the target
architecture code manually call a destroy function for each AS it
created.  Instead we can adjust the function to always completely
destroy the whole cpu->ases array, and arrange for it to be called
during CPU unrealize as part of the common code.

Without this fix, AddressSanitizer will report a leak like this
from a run where we hot-plugged and then hot-unplugged an x86 KVM
vCPU:

Direct leak of 416 byte(s) in 1 object(s) allocated from:
    #0 0x5b638565053d in calloc (/data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/qemu-system-x86_64+0x1ee153d) (BuildId: c1cd6022b195142106e1bffeca23498c2b752bca)
    #1 0x7c28083f77b1 in g_malloc0 (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x637b1) (BuildId: 1eb6131419edb83b2178b682829a6913cf682d75)
    #2 0x5b6386999c7c in cpu_address_space_init /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../system/physmem.c:797:25
    #3 0x5b638727f049 in kvm_cpu_realizefn /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../target/i386/kvm/kvm-cpu.c:102:5
    #4 0x5b6385745f40 in accel_cpu_common_realize /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../accel/accel-common.c:101:13
    #5 0x5b638568fe3c in cpu_exec_realizefn /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../hw/core/cpu-common.c:232:10
    #6 0x5b63874a2cd5 in x86_cpu_realizefn /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../target/i386/cpu.c:9321:5
    #7 0x5b6387a0469a in device_set_realized /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../hw/core/qdev.c:494:13
    #8 0x5b6387a27d9e in property_set_bool /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../qom/object.c:2375:5
    #9 0x5b6387a2090b in object_property_set /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../qom/object.c:1450:5
    #10 0x5b6387a35b05 in object_property_set_qobject /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../qom/qom-qobject.c:28:10
    #11 0x5b6387a21739 in object_property_set_bool /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../qom/object.c:1520:15
    #12 0x5b63879fe510 in qdev_realize /data_nvme1n1/linaro/qemu-from-laptop/qemu/build/x86-tgts-asan/../../hw/core/qdev.c:276:12

Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2517
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/r/20250929144228.1994037-4-peter.maydell@linaro.org
Signed-off-by: Peter Xu <peterx@redhat.com>
2025-10-03 09:48:02 -04:00
..
bdrv-next-monitor-owned.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
blk-commit-all.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
blk-exp-close-all.c meson: Drop the .fa library suffix 2024-07-03 18:41:26 +02:00
blockdev-close-all-bdrv-states.c
change-state-handler.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
cmos.c stubs/cmos: Use correct include 2020-09-01 09:10:58 +02:00
cpu-destroy-address-spaces.c physmem: Destroy all CPU AddressSpaces on unrealize 2025-10-03 09:48:02 -04:00
cpu-get-clock.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
cpu-synchronize-state.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
cpus-virtual-clock.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
dump.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
error-printf.c Move error_printf_unless_qmp() with monitor unit 2022-04-21 17:09:09 +04:00
fdset.c monitor: Report errors from monitor_fdset_dup_fd_add 2024-06-21 09:47:21 -03:00
fw_cfg.c hw/nvram/fw_cfg: Add fw_cfg_arch_key_name() 2019-05-23 14:10:31 +02:00
gdbstub.c gdbstub: Introduce GDBFeature structure 2023-10-11 08:46:33 +01:00
get-vm-name.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
graph-lock.c async: Register/unregister aiocontext in graph lock list 2022-12-15 16:07:43 +01:00
hotplug-stubs.c hw/core: Move system emulation files to system_ss 2024-04-18 11:17:27 +02:00
icount.c include/exec: Split out icount.h 2025-04-23 14:08:44 -07:00
io_uring.c stubs: add stubs for io_uring interface 2020-01-30 20:59:41 +00:00
iothread-lock-block.c main-loop.h: introduce qemu_in_main_thread() 2022-03-04 18:18:15 +01:00
iothread-lock.c bql: add a "mock" BQL for Rust unit tests 2024-12-19 19:36:37 +01:00
is-daemonized.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
linux-aio.c linux-aio: properly bubble up errors from initialization 2018-06-27 13:06:34 +01:00
meson.build physmem: Destroy all CPU AddressSpaces on unrealize 2025-10-03 09:48:02 -04:00
migr-blocker.c migration: per-mode blockers 2023-11-01 16:13:59 +01:00
monitor-arm-gic.c qapi: expose query-gic-capability command unconditionally 2025-05-28 18:54:18 +02:00
monitor-core.c stubs: remove obsolete stubs 2024-04-18 11:17:27 +02:00
monitor-cpu-s390x-kvm.c qapi: make s390x specific CPU commands unconditionally available 2025-05-28 18:56:08 +02:00
monitor-cpu-s390x.c qapi: make most CPU commands unconditionally available 2025-05-28 18:55:50 +02:00
monitor-cpu.c qapi: make most CPU commands unconditionally available 2025-05-28 18:55:50 +02:00
monitor-i386-rtc.c qapi: expose rtc-reset-reinjection command unconditionally 2025-05-28 18:26:23 +02:00
monitor-i386-sev.c qapi: make SEV commands unconditionally available 2025-05-28 18:54:16 +02:00
monitor-i386-sgx.c qapi: make SGX commands unconditionally available 2025-05-28 18:54:18 +02:00
monitor-i386-xen.c qapi: make Xen event commands unconditionally available 2025-05-28 18:54:18 +02:00
monitor-internal.c stubs: move monitor_fdsets_cleanup with other fdset stubs 2024-04-18 11:17:27 +02:00
physmem.c stubs: add qemu_ram_block_from_host() and qemu_ram_get_fd() 2022-10-26 14:56:42 -04:00
qdev.c stubs: remove obsolete stubs 2024-04-18 11:17:27 +02:00
qemu-timer-notify-cb.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
qmp-command-available.c qapi: Move and rename qapi/qmp/dispatch.h to qapi/qmp-registry.h 2025-02-10 15:33:29 +01:00
qmp-quit.c qapi: Move and rename qapi/qmp/dispatch.h to qapi/qmp-registry.h 2025-02-10 15:33:29 +01:00
qtest.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
ram-block.c include/system: Move exec/memory.h to system/memory.h 2025-04-23 14:08:21 -07:00
replay-mode.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
replay-tools.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
replay.c stubs: split record/replay stubs further 2024-04-18 11:17:27 +02:00
runstate-check.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
sysbus.c
target-get-monitor-def.c Clean up includes some more 2016-03-22 22:20:16 +01:00
target-monitor-defs.c monitor: remove MonitorDef from typedefs.h 2024-05-03 15:47:48 +02:00
trace-control.c trace: remove code that depends on setting vcpu 2023-06-01 11:05:05 -04:00
uuid.c qapi: Restrict query-uuid command to machine code 2020-09-29 15:41:35 +02:00
vm-stop.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
vmstate.c migration: cpr-transfer mode 2025-01-29 11:56:24 -03:00
win32-kbd-hook.c ui/win32-kbd-hook: handle AltGr in a hook procedure 2020-05-19 09:06:44 +02:00
xen-hw-stub.c hw/xen: Remove unnecessary xen_hvm_inject_msi() stub 2024-03-09 18:51:45 +01:00