qemu/tests/qtest
Fabiano Rosas 87d67fadb9 monitor: Stop removing non-duplicated fds
monitor_fdsets_cleanup() currently has three responsibilities:

1- Remove the fds that have been marked for removal(->removed=true) by
   qmp_remove_fd(). This is overly complicated, but ok.

2- Remove any file descriptors that have been passed into QEMU and
   never duplicated[1,2]. A file descriptor without duplicates
   indicates that no part of QEMU has made use of it. This is
   problematic because the current implementation does it only if the
   guest is not running and the monitor is closed.

3- Remove/free fdsets that have become empty due to the above
   removals. This is ok.

The scenario described in (2) is starting to show some cracks now that
we're trying to consume fds from the migration code:

- Doing cleanup every time the last monitor connection closes works to
  reap unused fds, but also has the side effect of forcing the
  management layer to pass the file descriptors again in case of a
  disconnect/re-connect, if that happened to be the only monitor
  connection.

  Another side effect is that removing an fd with qmp_remove_fd() is
  effectively delayed until the last monitor connection closes.

  The usage of mon_refcount is also problematic because it's racy.

- Checking runstate_is_running() skips the cleanup unless the VM is
  running and avoids premature cleanup of the fds, but also has the
  side effect of blocking the legitimate removal of an fd via
  qmp_remove_fd() if the VM happens to be in another state.

  This affects qmp_remove_fd() and qmp_query_fdsets() in particular
  because requesting a removal at a bad time (guest stopped) might
  cause an fd to never be removed, or to be removed at a much later
  point in time, causing the query command to continue showing the
  supposedly removed fd/fdset.

Note that file descriptors that *have* been duplicated are owned by
the code that uses them and will be removed after qemu_close() is
called. Therefore we've decided that the best course of action to
avoid the undesired side-effects is to stop managing non-duplicated
file descriptors.

1- efb87c1697 ("monitor: Clean up fd sets on monitor disconnect")
2- ebe52b592d ("monitor: Prevent removing fd from set during init")

Reviewed-by: Peter Xu <peterx@redhat.com>
[fix logic mistake: s/fdset_free/fdset_free_if_empty]
Signed-off-by: Fabiano Rosas <farosas@suse.de>
2024-06-21 09:44:53 -03:00
..
fuzz fuzz: specify audiodev for usb-audio 2024-05-29 12:41:56 +02:00
libqos tests/qtest: Move common define from libqos-spapr.h to new ppc-util.h 2024-06-14 14:00:46 -03:00
ac97-test.c tests/qtest/ac97-test: add up-/downsampling tests 2023-05-26 09:10:49 +02:00
acpi-utils.c
acpi-utils.h
adm1266-test.c tests/qtest: add tests for ADM1266 2023-11-07 13:08:49 +01:00
adm1272-test.c
ahci-test.c tests/qtest: ahci-test: add test exposing reset issue with pending callback 2023-11-07 13:08:48 +01:00
am53c974-test.c
arm-cpu-features.c tests/qtest: arm: fix operation in a build without any boards or devices 2024-05-10 15:45:15 +02:00
aspeed_fsi-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
aspeed_gpio-test.c hw/gpio/aspeed: Don't let guests modify input pins 2022-07-14 16:24:38 +02:00
aspeed_hace-test.c
aspeed_smc-test.c tests/qtest: aspeed_smc-test: Avoid using hardcoded /tmp 2022-09-27 20:51:20 +02:00
bcm2835-dma-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
bcm2835-i2c-test.c tests/qtest: Add testcase for BCM2835 BSC 2024-03-05 13:22:55 +00:00
bios-tables-test-allowed-diff.h tests: acpi: update expected SSDT.dimmpxm blob 2024-03-18 08:42:46 -04:00
bios-tables-test.c tests: smbios: add test for legacy mode CLI options 2024-03-18 08:42:45 -04:00
boot-order-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
boot-sector.c tests: boot_sector_test(): make it multi-shot 2023-01-28 06:21:29 -05:00
boot-sector.h
boot-serial-test.c tests/qtest: Move common define from libqos-spapr.h to new ppc-util.h 2024-06-14 14:00:46 -03:00
cdrom-test.c tests/cdrom-test: Add cdrom test for LoongArch virt machine 2024-02-23 08:13:52 +01:00
cmsdk-apb-dualtimer-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
cmsdk-apb-timer-test.c
cmsdk-apb-watchdog-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
cpu-plug-test.c
cxl-test.c tests/qtest/cxl-test: Clean up temporary directories after testing 2023-06-26 09:01:33 +02:00
dbus-display-test.c tests: skip dbus-display tests that need a console 2024-02-23 08:13:52 +01:00
dbus-vmstate-test.c tests/qtest: Use EXIT_FAILURE instead of magic number 2022-10-28 14:31:49 +02:00
device-introspect-test.c
device-plug-test.c target/ppc: Add POWER9 DD2.2 model 2023-05-28 13:25:11 -03:00
display-vga-test.c tests/qtest/display-vga-test: Add proper checks if a device is available 2023-01-31 09:05:26 +01:00
dm163-test.c tests/qtest : Add testcase for DM163 2024-04-30 16:05:08 +01:00
drive_del-test.c tests/qtest: s390x: fix operation in a build without any boards or devices 2024-05-10 15:45:15 +02:00
ds1338-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
e1000-test.c tests: Fix error strings 2022-09-20 11:23:02 +02:00
e1000e-test.c tests/qtest/e1000e-test: Fabricate ethernet header 2023-03-10 17:26:47 +08:00
eepro100-test.c
emc141x-test.c
endianness-test.c
erst-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
es1370-test.c tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
fdc-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
fuzz-e1000e-test.c
fuzz-lsi53c895a-test.c hw/scsi/lsi53c895a: Fix reentrancy issues in the LSI controller (CVE-2023-0330) 2023-05-26 09:37:04 +02:00
fuzz-megasas-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-sb16-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-sdcard-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-virtio-scsi-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-xlnx-dp-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fw_cfg-test.c
hd-geo-test.c tests/qtest/hd-geo-test: fix incorrect pcie-root-port usage and simplify test 2023-07-10 18:59:32 -04:00
hexloader-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
i440fx-test.c tests/qtest: i440fx-test: Rewrite create_blob_file() to be portable 2022-09-27 20:51:20 +02:00
i82801b11-test.c
ide-test.c tests/qtest/ide-test: Verify READ NATIVE MAX ADDRESS is not limited 2024-04-30 06:21:47 +02:00
igb-test.c igb: Introduce qtest for igb device 2023-03-10 17:26:47 +08:00
intel-hda-test.c tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
ioh3420-test.c
ipmi-bt-test.c ipmi-bt-test: force ipv4 2023-10-27 10:13:17 +02:00
ipmi-kcs-test.c
ipoctal232-test.c
isl_pmbus_vr-test.c
ivshmem-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
libqmp.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqmp.h
libqtest-single.h tests/qtest: libqtest: Adapt global_qtest declaration for win32 2022-09-27 20:51:21 +02:00
libqtest.c monitor: Stop removing non-duplicated fds 2024-06-21 09:44:53 -03:00
libqtest.h monitor: Stop removing non-duplicated fds 2024-06-21 09:44:53 -03:00
lpc-ich9-test.c
lsm303dlhc-mag-test.c
m48t59-test.c tests/qtest: skip m48t59-test if the machine is absent 2024-05-03 15:47:39 +02:00
machine-none-test.c target/nios2: Remove the deprecated Nios II target 2024-04-24 16:03:38 +02:00
max34451-test.c hw/i2c: pmbus: reset page register for out of range reads 2023-11-07 13:08:49 +01:00
megasas-test.c
meson.build tests/qtest: Add numa test for loongarch system 2024-06-06 11:56:45 +08:00
microbit-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
migration-helpers.c tests/qtest/migration: Fix typo for vsock in SocketAddress_to_str 2024-04-23 18:36:01 -04:00
migration-helpers.h tests/qtest/migration: Add channels parameter in migrate_qmp 2024-04-23 18:36:01 -04:00
migration-test.c monitor: Stop removing non-duplicated fds 2024-06-21 09:44:53 -03:00
modules-test.c blkio: add libblkio block driver 2022-10-26 14:56:42 -04:00
ne2000-test.c
netdev-socket.c qtest: ensure netdev-socket tests have non-overlapping names 2024-01-11 11:39:26 +01:00
npcm7xx_adc-test.c tests/npcm7xx_adc: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
npcm7xx_emc-test.c tests/qtest/npcm7xx_emc_test: Don't leak cmd_line 2024-03-25 10:40:59 +00:00
npcm7xx_gpio-test.c
npcm7xx_pwm-test.c tests/qtest/npcm7xx_pwm-test: Only do full testing in slow mode 2023-12-20 10:29:23 +01:00
npcm7xx_rng-test.c
npcm7xx_sdhci-test.c tests/qtest: Reduce npcm7xx_sdhci test image size 2022-06-10 14:32:35 +01:00
npcm7xx_smbus-test.c
npcm7xx_timer-test.c tests/qtest: Fix npcm7xx_timer-test.c flaky test 2023-10-12 14:11:44 +02:00
npcm7xx_watchdog_timer-test.c tests/qtest/npcm7xx_watchdog_timer: Only test the corner cases by default 2024-01-16 07:24:08 +01:00
npcm_gmac-test.c tests/qtest: Fix GMAC test to run on a machine in upstream QEMU 2024-02-15 11:44:07 +00:00
numa-test.c qtest/x86/numa-test: do not use the obsolete 'pentium' cpu 2024-06-12 10:19:57 +02:00
nvme-test.c misc: Use QEMU header path relative to include/ directory 2024-05-09 00:07:21 +02:00
pca9552-test.c misc/pca955*: Move models under hw/gpio 2024-03-25 15:05:38 +01:00
pci-test.c
pcnet-test.c
pflash-cfi02-test.c tests/qtest/pflash: Clean up local variable shadowing 2023-09-12 12:07:31 +02:00
pnv-host-i2c-test.c misc/pca955*: Move models under hw/gpio 2024-03-25 15:05:38 +01:00
pnv-xscom-test.c ppc/pnv: Test pnv i2c master and connected devices 2024-02-23 23:24:42 +10:00
pnv-xscom.h ppc/pnv: Test pnv i2c master and connected devices 2024-02-23 23:24:42 +10:00
ppc-util.h tests/qtest: Move common define from libqos-spapr.h to new ppc-util.h 2024-06-14 14:00:46 -03:00
prom-env-test.c tests/qtest: Move common define from libqos-spapr.h to new ppc-util.h 2024-06-14 14:00:46 -03:00
pvpanic-pci-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
pvpanic-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
pxe-test.c tests/qtest: Move common define from libqos-spapr.h to new ppc-util.h 2024-06-14 14:00:46 -03:00
q35-test.c
qmp-cmd-test.c qapi: Add HV_BALLOON_STATUS_REPORT event and its QMP query command 2023-11-06 14:08:10 +01:00
qmp-test.c tests/qtest: qmp-test: Avoid using hardcoded /tmp 2022-09-27 20:51:21 +02:00
qom-test.c tests/qtest/qom-test: Stop spamming the test log 2023-01-26 13:25:07 +01:00
qos-test.c tests/qtest: use qos_printf instead of g_test_message 2022-10-07 09:41:51 -04:00
qtest_aspeed.c qtest: Add functions for accessing devices on Aspeed I2C controller 2023-04-20 11:25:32 +02:00
qtest_aspeed.h aspeed: Clean up includes 2024-01-30 21:20:20 +03:00
readconfig-test.c tests/qtest/readconfig: Test the docs/config/q35-*.cfg files 2023-07-10 15:34:57 +02:00
rtas-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
rtc-test.c tests/qtest: Adapt {m48t59,rtc}-test cases for win32 2022-08-25 15:24:09 +02:00
rtl8139-test.c tests/rtl8139: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
sdhci-test.c
sifive-e-aon-watchdog-test.c tests/qtest: sifive-e-aon-watchdog-test.c: Add QTest of watchdog of sifive_e 2023-07-10 22:29:15 +10:00
spapr-phb-test.c
sse-timer-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
stm32l4x5_exti-test.c tests/qtest : Use g_assert_cmphex instead of g_assert_cmpuint 2024-04-25 07:03:04 +02:00
stm32l4x5_gpio-test.c hw/arm : Pass STM32L4x5 SYSCFG gpios to STM32L4x5 SoC 2024-04-30 16:05:08 +01:00
stm32l4x5_rcc-test.c tests/qtest/stm32l4x5_rcc-test.c: Add tests for the STM32L4x5_RCC 2024-03-05 13:22:56 +00:00
stm32l4x5_syscfg-test.c hw/arm : Pass STM32L4x5 SYSCFG gpios to STM32L4x5 SoC 2024-04-30 16:05:08 +01:00
stm32l4x5_usart-test.c tests/qtest: Add tests for the STM32L4x5 USART 2024-04-25 10:21:59 +01:00
tco-test.c hw: Move ich9.h to southbridge/ 2023-02-27 22:29:01 +01:00
test-arm-mptimer.c
test-filter-mirror.c tests/qtest: check the return value 2023-12-04 15:12:57 +01:00
test-filter-redirector.c tests/qtest: check the return value 2023-12-04 15:12:57 +01:00
test-hmp.c hmp: Remove deprecated 'singlestep' command 2024-01-19 11:38:32 +01:00
test-netfilter.c
test-x86-cpuid-compat.c tests/qtest/x86: check for availability of older cpu models before running tests 2024-06-12 10:21:44 +02:00
tmp105-test.c
tpm-crb-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-crb-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-emu.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-emu.h
tpm-tests.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tests.h tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-device-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-tis-device-test.c
tpm-tis-i2c-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-tis-test.c
tpm-tis-util.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-util.h qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-util.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-util.h qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tulip-test.c
ufs-test.c misc: Use QEMU header path relative to include/ directory 2024-05-09 00:07:21 +02:00
usb-hcd-ehci-test.c tests/qtest/usb-hcd-ehci-test: Check for EHCI and UHCI HCDs before using them 2023-05-26 09:10:49 +02:00
usb-hcd-ohci-test.c
usb-hcd-uhci-test.c tests/qtest/usb-hcd: Remove the empty "init" tests 2023-09-08 13:08:52 +03:00
usb-hcd-xhci-test.c tests/qtest/usb-hcd: Remove the empty "init" tests 2023-09-08 13:08:52 +03:00
vhost-user-blk-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
vhost-user-test.c tests/qtest: enable tests for virtio-scmi 2023-07-10 16:17:08 -04:00
virtio-9p-test.c qtest/virtio-9p-test.c: remove g_test_slow() gate 2024-03-28 09:54:47 +01:00
virtio-blk-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
virtio-ccw-test.c tests/qtest/virtio-ccw: Fix device presence checking 2024-01-11 11:39:26 +01:00
virtio-iommu-test.c hw/i386/q35: Set virtio-iommu aw-bits default value to 39 2024-03-12 17:59:03 -04:00
virtio-net-failover.c qtest: use correct boolean type for failover property 2024-01-11 11:39:26 +01:00
virtio-net-test.c tests/qtest: check the return value 2023-12-04 15:12:57 +01:00
virtio-rng-test.c
virtio-scsi-test.c tests/virtio-scsi: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
virtio-serial-test.c
virtio-test.c
vmgenid-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
vmxnet3-test.c
vnc-display-test.c qtest: enable vnc-display test on win32 2023-03-13 15:41:32 +04:00
wdt_ib700-test.c
xlnx-can-test.c
xlnx-canfd-test.c tests/qtest: xlnx-canfd-test: Fix code coverity issues 2023-07-06 13:26:43 +01:00
xlnx-versal-trng-test.c tests/qtest/xlnx-versal-trng-test.c: Drop use of variable length array 2024-02-02 13:51:58 +00:00