Public bug reported: Description: Some versions of Windows hang on reboot if their TSC value is greater than 2^54. The calibration of the Hyper-V reference time overflows and fails; as a result the processors' clock sources are out of sync.
The issue is that the TSC _should_ be reset to 0 on CPU reset and QEMU tries to do that. However, KVM special cases writing 0 to the TSC and thinks that QEMU is trying to hot-plug a CPU, which is correct the first time through but not later. Thwart this valiant effort and reset the TSC to 1 instead, but only if the CPU has been run once. For this to work, env->tsc has to be moved to the part of CPUArchState that is not zeroed at the beginning of x86_cpu_reset. Solution: [PATCH] target/i386: properly reset TSC on reset I created and tested a ppa ubuntu package already. The patch fixes this issue. Link to ppa: https://launchpad.net/~bhinz83/+archive/ubuntu/openstack-rds/+packages It affects only jammy 22.04 package: qemu - 1:6.2+dfsg-2ubuntu6.19 ** Affects: qemu (Ubuntu) Importance: Undecided Status: New ** Tags: jammy ** Patch added: "Patch imported from RHEL 8" https://bugs.launchpad.net/bugs/2064914/+attachment/5775431/+files/kvm-target-i386-properly-reset-TSC-on-reset.patch.txt ** Description changed: Description: Some versions of Windows hang on reboot if their TSC value is greater than 2^54. The calibration of the Hyper-V reference time overflows and fails; as a result the processors' clock sources are out of sync. The issue is that the TSC _should_ be reset to 0 on CPU reset and QEMU tries to do that. However, KVM special cases writing 0 to the TSC and thinks that QEMU is trying to hot-plug a CPU, which is correct the first time through but not later. Thwart this valiant effort and reset the TSC to 1 instead, but only if the CPU has been run once. For this to work, env->tsc has to be moved to the part of CPUArchState that is not zeroed at the beginning of x86_cpu_reset. Solution: [PATCH] target/i386: properly reset TSC on reset I created und tested a ppa ubuntu package already. The patch fixes this issue. Link to ppa: https://launchpad.net/~bhinz83/+archive/ubuntu/openstack-rds/+packages + + It affects only jammy 22.04 package: qemu - 1:6.2+dfsg-2ubuntu6.19 ** Description changed: Description: Some versions of Windows hang on reboot if their TSC value is greater than 2^54. The calibration of the Hyper-V reference time overflows and fails; as a result the processors' clock sources are out of sync. The issue is that the TSC _should_ be reset to 0 on CPU reset and QEMU tries to do that. However, KVM special cases writing 0 to the TSC and thinks that QEMU is trying to hot-plug a CPU, which is correct the first time through but not later. Thwart this valiant effort and reset the TSC to 1 instead, but only if the CPU has been run once. For this to work, env->tsc has to be moved to the part of CPUArchState that is not zeroed at the beginning of x86_cpu_reset. Solution: [PATCH] target/i386: properly reset TSC on reset - I created und tested a ppa ubuntu package already. The patch fixes this issue. + I created and tested a ppa ubuntu package already. The patch fixes this issue. Link to ppa: https://launchpad.net/~bhinz83/+archive/ubuntu/openstack-rds/+packages It affects only jammy 22.04 package: qemu - 1:6.2+dfsg-2ubuntu6.19 -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2064914 Title: Windows guest hangs after reboot from the guest OS To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/2064914/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs