diff options
Diffstat (limited to 'gitlab/issues/target_missing/host_missing/accel_missing/650.toml')
| -rw-r--r-- | gitlab/issues/target_missing/host_missing/accel_missing/650.toml | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gitlab/issues/target_missing/host_missing/accel_missing/650.toml b/gitlab/issues/target_missing/host_missing/accel_missing/650.toml new file mode 100644 index 00000000..97a0e095 --- /dev/null +++ b/gitlab/issues/target_missing/host_missing/accel_missing/650.toml @@ -0,0 +1,32 @@ +id = 650 +title = "Monitor device_add triggers deadlock when calling drain_call_rcu on QEMU >= 6.0.0" +state = "closed" +created_at = "2021-09-30T12:31:08.233Z" +closed_at = "2022-01-25T09:06:57.879Z" +labels = ["Regression", "Stable::to backport", "kind::Bug"] +url = "https://gitlab.com/qemu-project/qemu/-/issues/650" +host-os = "Debian bullseye/sid" +host-arch = "amd64" +qemu-version = "6.1.50 (v6.1.0-936-gba0fa56bc0)" +guest-os = "n/a" +guest-arch = "n/a" +description = """It hangs""" +reproduce = """1. Run the QEMU: + ``` + ./qemu-system-mips64 -nographic + ``` +2. Enter into the QEMU monitor: press ctrl-a c +3. Execute command `device_add` without arguments: +``` +(qemu) device_add +``` +4. It hangs so bad that only `kill -9` helps""" +additional = """I didn't test versions between 4.2.0 and 6.0.0, but I can confirm that 6.0.0, 6.1.0 and the latest master pull have this bug, while version 4.2.0 doesn't have it. + +I've tracked the problem and found this. + +1. Command `device_add` calls function `drain_call_rcu`. `drain_call_rcu` waits indefinitely for drain_complete_event. +2. Function `cpu_exec` in accel/tcg/cpu-exec.c calls `rcu_read_lock` but does not call `rcu_read_unlock()`. `cpu_exec` just spins in its inner loop. +3. Function `call_rcu_thread` hanged in calling the `synchronize_rcu` which calls `wait_for_readers`. + +If I execute `stop` command in QEMU monitor before calling `device_add` command, no hang happen.""" |