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

Reply via email to