Hello community,

here is the log from the commit of package xen for openSUSE:Leap:15.2 checked 
in at 2020-02-10 16:41:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/xen (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.xen.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xen"

Mon Feb 10 16:41:38 2020 rev:81 rq:768894 version:4.13.0_06

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/xen/xen.changes        2020-01-15 
16:30:10.692812759 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.xen.new.26092/xen.changes     2020-02-10 
16:41:56.355723879 +0100
@@ -1,0 +2,25 @@
+Tue Jan 28 14:10:38 UTC 2020 - oher...@suse.de
+
+- bsc#1159755 - use fixed qemu-3.1 machine type for HVM
+  qemu4 introduced incompatible changes in pc-i440fx, which revealed
+  a design bug in 'xenfv'. Live migration from domUs started with
+  qemu versions prior qemu4 can not be received with qemu4+. 
+  libxl.lock-qemu-machine-for-hvm.patch
+
+-------------------------------------------------------------------
+Tue Jan 14 09:19:31 MST 2020 - carn...@suse.com
+
+- Upstream bug fixes (bsc#1027519)
+  5de65f84-gnttab-map-always-do-IOMMU-part.patch
+  5de65fc4-x86-avoid-HPET-use-on-certain-Intel.patch
+  5e15e03d-sched-fix-S3-resume-with-smt=0.patch
+  5e16fb6a-x86-clear-per-cpu-stub-page-info.patch
+  5e1da013-IRQ-u16-is-too-narrow-for-evtchn.patch
+
+-------------------------------------------------------------------
+Wed Jan  8 11:43:04 UTC 2020 - Dominique Leuenberger <dims...@opensuse.org>
+
+- BuildRequire pkgconfig(libsystemd) instead of systemd-devel:
+  Allow OBS to shortcut through the -mini flavors.
+
+-------------------------------------------------------------------

New:
----
  5de65f84-gnttab-map-always-do-IOMMU-part.patch
  5de65fc4-x86-avoid-HPET-use-on-certain-Intel.patch
  5e15e03d-sched-fix-S3-resume-with-smt=0.patch
  5e16fb6a-x86-clear-per-cpu-stub-page-info.patch
  5e1da013-IRQ-u16-is-too-narrow-for-evtchn.patch
  libxl.lock-qemu-machine-for-hvm.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xen.spec ++++++
--- /var/tmp/diff_new_pack.ovxjuJ/_old  2020-02-10 16:41:57.775724880 +0100
+++ /var/tmp/diff_new_pack.ovxjuJ/_new  2020-02-10 16:41:57.775724880 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package xen
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -60,7 +60,7 @@
 %define with_gcc48 0
 %define _fwdefdir /etc/sysconfig/SuSEfirewall2.d/services
 %systemd_requires
-BuildRequires:  systemd-devel
+BuildRequires:  pkgconfig(libsystemd)
 %define with_systemd_modules_load %{_prefix}/lib/modules-load.d
 PreReq:         %fillup_prereq
 %ifarch %arm aarch64
@@ -108,8 +108,8 @@
 BuildRequires:  acpica
 BuildRequires:  openssl-devel
 BuildRequires:  python3-devel
-BuildRequires:  systemd
 BuildRequires:  xz-devel
+BuildRequires:  pkgconfig(systemd)
 %ifarch x86_64
 BuildRequires:  gcc-32bit
 BuildRequires:  gcc-c++
@@ -127,7 +127,7 @@
 BuildRequires:  pesign-obs-integration
 %endif
 
-Version:        4.13.0_04
+Version:        4.13.0_06
 Release:        0
 Summary:        Xen Virtualization: Hypervisor (aka VMM aka Microkernel)
 License:        GPL-2.0-only
@@ -162,6 +162,11 @@
 # For xen-libs
 Source99:       baselibs.conf
 # Upstream patches
+Patch1:         5de65f84-gnttab-map-always-do-IOMMU-part.patch
+Patch2:         5de65fc4-x86-avoid-HPET-use-on-certain-Intel.patch
+Patch3:         5e15e03d-sched-fix-S3-resume-with-smt=0.patch
+Patch4:         5e16fb6a-x86-clear-per-cpu-stub-page-info.patch
+Patch5:         5e1da013-IRQ-u16-is-too-narrow-for-evtchn.patch
 # Our platform specific patches
 Patch400:       xen-destdir.patch
 Patch401:       vif-bridge-no-iptables.patch
@@ -193,6 +198,7 @@
 Patch465:       xen.libxl.dmmd.patch
 Patch466:       libxl.set-migration-constraints-from-cmdline.patch
 Patch467:       xenstore-run-in-studomain.patch
+Patch468:       libxl.lock-qemu-machine-for-hvm.patch
 Patch469:       libxl.helper_done-crash.patch
 Patch470:       libxl.LIBXL_HOTPLUG_TIMEOUT.patch
 # python3 conversion patches
@@ -356,6 +362,11 @@
 %prep
 %setup -q -n %xen_build_dir -a 1 -a 5 -a 6 -a 57
 # Upstream patches
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 # Our platform specific patches
 %patch400 -p1
 %patch401 -p1
@@ -387,6 +398,7 @@
 %patch465 -p1
 %patch466 -p1
 %patch467 -p1
+%patch468 -p1
 %patch469 -p1
 %patch470 -p1
 # python3 conversion patches

++++++ 5de65f84-gnttab-map-always-do-IOMMU-part.patch ++++++
# Commit 921f1f42260c7967bf18f8a143d39511d163c421
# Date 2019-12-03 14:13:40 +0100
# Author Jan Beulich <jbeul...@suse.com>
# Committer Jan Beulich <jbeul...@suse.com>
gnttab: make sure grant map operations don't skip their IOMMU part

Two almost simultaneous mapping requests need to make sure that at the
completion of the earlier one IOMMU mappings (established explicitly
here in the PV case) have been put in place. Forever since the splitting
of the grant table lock a violation of this has been possible (using
simplified pin counts, as it doesn't matter whether we talk about read
or write mappings here):

initial state: act->pin = 0

vCPU A: progress the operation past the dropping of the locks after the
        act->pin updates (act->pin = 1, old_pin = 0, act_pin = 1)

vCPU B: progress the operation past the dropping of the locks after the
        act->pin updates (act->pin = 2, old_pin = 1, act_pin = 2)

vCPU B: (re-)acquire both gt locks, mapkind() returns 0, but both
        iommu_legacy_map() invocations get skipped due to non-zero
        old_pin

vCPU B: return to caller without IOMMU mapping

vCPU A: (re-)acquire both gt locks, mapkind() returns 0,
        iommu_legacy_map() gets invoked

With the locks dropped intermediately, whether to invoke
iommu_legacy_map() must depend on only the return value of mapkind()
and of course the kind of mapping request being processed, just like
is already the case in unmap_common().

Also fix the style of the adjacent comment, and correct a nearby one
still referring to a prior name of what is now mapkind().

Signed-off-by: Jan Beulich <jbeul...@suse.com>
Acked-by: Andrew Cooper <andrew.coop...@citrix.com>

--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -948,8 +948,6 @@ map_grant_ref(
     mfn_t mfn;
     struct page_info *pg = NULL;
     int            rc = GNTST_okay;
-    u32            old_pin;
-    u32            act_pin;
     unsigned int   cache_flags, clear_flags = 0, refcnt = 0, typecnt = 0;
     bool           host_map_created = false;
     struct active_grant_entry *act = NULL;
@@ -1058,7 +1056,6 @@ map_grant_ref(
         }
     }
 
-    old_pin = act->pin;
     if ( op->flags & GNTMAP_device_map )
         act->pin += (op->flags & GNTMAP_readonly) ?
             GNTPIN_devr_inc : GNTPIN_devw_inc;
@@ -1067,7 +1064,6 @@ map_grant_ref(
             GNTPIN_hstr_inc : GNTPIN_hstw_inc;
 
     mfn = act->mfn;
-    act_pin = act->pin;
 
     cache_flags = (shah->flags & (GTF_PAT | GTF_PWT | GTF_PCD) );
 
@@ -1175,27 +1171,22 @@ map_grant_ref(
     if ( need_iommu )
     {
         unsigned int kind;
-        int err = 0;
 
         double_gt_lock(lgt, rgt);
 
-        /* We're not translated, so we know that gmfns and mfns are
-           the same things, so the IOMMU entry is always 1-to-1. */
+        /*
+         * We're not translated, so we know that dfns and mfns are
+         * the same things, so the IOMMU entry is always 1-to-1.
+         */
         kind = mapkind(lgt, rd, mfn);
-        if ( (act_pin & (GNTPIN_hstw_mask|GNTPIN_devw_mask)) &&
-             !(old_pin & (GNTPIN_hstw_mask|GNTPIN_devw_mask)) )
-        {
-            if ( !(kind & MAPKIND_WRITE) )
-                err = iommu_legacy_map(ld, _dfn(mfn_x(mfn)), mfn, 0,
-                                       IOMMUF_readable | IOMMUF_writable);
-        }
-        else if ( act_pin && !old_pin )
-        {
-            if ( !kind )
-                err = iommu_legacy_map(ld, _dfn(mfn_x(mfn)), mfn, 0,
-                                       IOMMUF_readable);
-        }
-        if ( err )
+        if ( !(op->flags & GNTMAP_readonly) &&
+             !(kind & MAPKIND_WRITE) )
+            kind = IOMMUF_readable | IOMMUF_writable;
+        else if ( !kind )
+            kind = IOMMUF_readable;
+        else
+            kind = 0;
+        if ( kind && iommu_legacy_map(ld, _dfn(mfn_x(mfn)), mfn, 0, kind) )
         {
             double_gt_unlock(lgt, rgt);
             rc = GNTST_general_error;
@@ -1210,7 +1201,7 @@ map_grant_ref(
      * other fields so just ensure the flags field is stored last.
      *
      * However, if gnttab_need_iommu_mapping() then this would race
-     * with a concurrent mapcount() call (on an unmap, for example)
+     * with a concurrent mapkind() call (on an unmap, for example)
      * and a lock is required.
      */
     mt = &maptrack_entry(lgt, handle);
++++++ 5de65fc4-x86-avoid-HPET-use-on-certain-Intel.patch ++++++
# Commit d5294a302c8441191d47888452958aea25243723
# Date 2019-12-03 14:14:44 +0100
# Author Jan Beulich <jbeul...@suse.com>
# Committer Jan Beulich <jbeul...@suse.com>
x86: avoid HPET use on certain Intel platforms

Linux commit fc5db58539b49351e76f19817ed1102bf7c712d0 says

"Some Coffee Lake platforms have a skewed HPET timer once the SoCs entered
 PC10, which in consequence marks TSC as unstable because HPET is used as
 watchdog clocksource for TSC."

Follow this for Xen as well. Looking at its patch context made me notice
they have a pre-existing quirk for Bay Trail as well. The comment there,
however, points at a Cherry Trail document. Looking at the datasheets of
both, there appear to be similar issues, so go beyond Linux'es coverage
and exclude both. Also key the disable on the PCI IDs of the actual
affected devices, rather than those of 00:00.0.

Apply the workarounds only when the use of HPET was not explicitly
requested on the command line and when use of (deep) C-states was not
disabled.

Adjust a few types in touched or nearby code at the same time.

Signed-off-by: Jan Beulich <jbeul...@suse.com>
Acked-by: Andrew Cooper <andrew.coop...@citrix.com>

--- a/xen/arch/x86/time.c
+++ b/xen/arch/x86/time.c
@@ -18,6 +18,7 @@
 #include <xen/timer.h>
 #include <xen/smp.h>
 #include <xen/irq.h>
+#include <xen/pci_ids.h>
 #include <xen/softirq.h>
 #include <xen/efi.h>
 #include <xen/cpuidle.h>
@@ -367,12 +368,41 @@ static u64 read_hpet_count(void)
     return hpet_read32(HPET_COUNTER);
 }
 
-static s64 __init init_hpet(struct platform_timesource *pts)
+static int64_t __init init_hpet(struct platform_timesource *pts)
 {
-    u64 hpet_rate = hpet_setup(), start;
-    u32 count, target;
+    uint64_t hpet_rate, start;
+    uint32_t count, target;
 
-    if ( hpet_rate == 0 )
+    if ( hpet_address && strcmp(opt_clocksource, pts->id) &&
+         cpuidle_using_deep_cstate() )
+    {
+        if ( pci_conf_read16(PCI_SBDF(0, 0, 0x1f, 0),
+                             PCI_VENDOR_ID) == PCI_VENDOR_ID_INTEL )
+            switch ( pci_conf_read16(PCI_SBDF(0, 0, 0x1f, 0), PCI_DEVICE_ID) )
+            {
+            /* HPET on Bay Trail platforms will halt in deep C states. */
+            case 0x0f1c:
+            /* HPET on Cherry Trail platforms will halt in deep C states. */
+            case 0x229c:
+                hpet_address = 0;
+                break;
+            }
+
+        /*
+         * Some Coffee Lake platforms have a skewed HPET timer once the SoCs
+         * entered PC10.
+         */
+        if ( pci_conf_read16(PCI_SBDF(0, 0, 0, 0),
+                             PCI_VENDOR_ID) == PCI_VENDOR_ID_INTEL &&
+             pci_conf_read16(PCI_SBDF(0, 0, 0, 0),
+                             PCI_DEVICE_ID) == 0x3ec4 )
+            hpet_address = 0;
+
+        if ( !hpet_address )
+            printk("Disabling HPET for being unreliable\n");
+    }
+
+    if ( (hpet_rate = hpet_setup()) == 0 )
         return 0;
 
     pts->frequency = hpet_rate;
++++++ 5e15e03d-sched-fix-S3-resume-with-smt=0.patch ++++++
# Commit d7f3c76317108ee9989f00545d394fa495fba752
# Date 2020-01-08 14:59:25 +0100
# Author Juergen Gross <jgr...@suse.com>
# Committer Jan Beulich <jbeul...@suse.com>
sched: fix resuming from S3 with smt=0

When resuming from S3 and smt=0 or maxcpus= are specified we must not
do anything in cpu_schedule_callback(). This is not true today for
taking down a cpu during resume.

If anything goes wrong during resume all the scheduler related error
handling is in cpupool.c, so we can just bail out early from
cpu_schedule_callback() when suspending or resuming.

This fixes commit 0763cd2687897b55e7 ("xen/sched: don't disable
scheduler on cpus during suspend").

Reported-by: Marek Marczykowski-Górecki <marma...@invisiblethingslab.com>
Tested-by: Marek Marczykowski-Górecki <marma...@invisiblethingslab.com>
Signed-off-by: Juergen Gross <jgr...@suse.com>
Acked-by: George Dunlap <george.dun...@citrix.com>

--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -2562,6 +2562,13 @@ static int cpu_schedule_callback(
     unsigned int cpu = (unsigned long)hcpu;
     int rc = 0;
 
+    /*
+     * All scheduler related suspend/resume handling needed is done in
+     * cpupool.c.
+     */
+    if ( system_state > SYS_STATE_active )
+        return NOTIFY_DONE;
+
     rcu_read_lock(&sched_res_rculock);
 
     /*
@@ -2589,8 +2596,7 @@ static int cpu_schedule_callback(
     switch ( action )
     {
     case CPU_UP_PREPARE:
-        if ( system_state != SYS_STATE_resume )
-            rc = cpu_schedule_up(cpu);
+        rc = cpu_schedule_up(cpu);
         break;
     case CPU_DOWN_PREPARE:
         rcu_read_lock(&domlist_read_lock);
@@ -2598,13 +2604,10 @@ static int cpu_schedule_callback(
         rcu_read_unlock(&domlist_read_lock);
         break;
     case CPU_DEAD:
-        if ( system_state == SYS_STATE_suspend )
-            break;
         sched_rm_cpu(cpu);
         break;
     case CPU_UP_CANCELED:
-        if ( system_state != SYS_STATE_resume )
-            cpu_schedule_down(cpu);
+        cpu_schedule_down(cpu);
         break;
     default:
         break;
++++++ 5e16fb6a-x86-clear-per-cpu-stub-page-info.patch ++++++
# Commit 774901788c5614798931a1cb2e20dd8b885f97ab
# Date 2020-01-09 11:07:38 +0100
# Author Juergen Gross <jgr...@suse.com>
# Committer Jan Beulich <jbeul...@suse.com>
x86: clear per cpu stub page information in cpu_smpboot_free()

cpu_smpboot_free() removes the stubs for the cpu going offline, but it
isn't clearing the related percpu variables. This will result in
crashes when a stub page is released due to all related cpus gone
offline and one of those cpus going online later.

Fix that by clearing stubs.addr and stubs.mfn in order to allocate a
new stub page when needed, irrespective of whether the CPU gets parked
or removed.

Fixes: 2e6c8f182c9c50 ("x86: distinguish CPU offlining from CPU removal")
Signed-off-by: Juergen Gross <jgr...@suse.com>
Reviewed-by: Wei Liu <w...@xen.org>
Reviewed-by: Jan Beulich <jbeul...@suse.com>
Tested-by: Tao Xu <tao3...@intel.com>

--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -942,6 +942,8 @@ static void cpu_smpboot_free(unsigned in
         unmap_domain_page(stub_page);
         destroy_xen_mappings(per_cpu(stubs.addr, cpu) & PAGE_MASK,
                              (per_cpu(stubs.addr, cpu) | ~PAGE_MASK) + 1);
+        per_cpu(stubs.addr, cpu) = 0;
+        per_cpu(stubs.mfn, cpu) = 0;
         if ( i == STUBS_PER_PAGE )
             free_domheap_page(mfn_to_page(mfn));
     }
++++++ 5e1da013-IRQ-u16-is-too-narrow-for-evtchn.patch ++++++
# Commit 892b9dcebdb7f646657e11cfdd95a385107bbefa
# Date 2020-01-14 12:03:47 +0100
# Author Jan Beulich <jbeul...@suse.com>
# Committer Jan Beulich <jbeul...@suse.com>
IRQ: u16 is too narrow for an event channel number

FIFO event channels allow ports up to 2^17, so we need to use a wider
field in struct pirq. Move "masked" such that it may share the 8-byte
slot with struct arch_pirq on 64-bit arches, rather than leaving a
7-byte hole in all cases.

Take the opportunity and also add a comment regarding "arch" placement
within the structure.

Signed-off-by: Jan Beulich <jbeul...@suse.com>
Acked-by: Andrew Cooper <andrew.coop...@citrix.com>

--- a/xen/include/xen/irq.h
+++ b/xen/include/xen/irq.h
@@ -127,9 +127,10 @@ struct vcpu;
 
 struct pirq {
     int pirq;
-    u16 evtchn;
-    bool_t masked;
+    evtchn_port_t evtchn;
     struct rcu_head rcu_head;
+    bool masked;
+    /* Architectures may require this field to be last. */
     struct arch_pirq arch;
 };
 
++++++ libxl.lock-qemu-machine-for-hvm.patch ++++++
From: Olaf Hering <o...@aepfle.de>
Subject: libxl: lock qemu machine for hvm
References: bsc#1159755

libxl must not use 'xenfv' as qemu machine type because it maps just to
'pc', which means 'the latest variant of pc-i440fx'. Each new qemu
version will make slightly incompatible changes to this machine type,
which makes it impossible to migrate a domU from one qemu to another.
This happend to work until qemu-3, but broke with qemu-4:

With qemu.git commit 7fccf2a06890e3bc3b30e29827ad3fb93fe88fea a new
member smbus_no_migration_support was added, and enabled in two places.
With qemu.git commit 4ab2f2a8aabfea95cc53c64e13b3f67960b27fdf the
vmstate_acpi got new elements, which are conditionally filled. As a
result, an incoming migration expected smbus related data unless smbus
migration was disabled for a given MachineClass.

Since qemu commit 7fccf2a06890e3bc3b30e29827ad3fb93fe88fea forgot to
handle xenfv, live migration to receiving hosts using qemu-4.0 and later
is broken.

Start all new domUs with 'pc-i440fx-3.1' instead of 'xenfv'.

Signed-off-by: Olaf Hering <o...@aepfle.de>
---
 tools/libxl/libxl_dm.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -1751,23 +1751,20 @@ static int libxl__build_device_model_args_new(libxl__gc 
*gc,
     for (i = 0; b_info->extra && b_info->extra[i] != NULL; i++)
         flexarray_append(dm_args, b_info->extra[i]);
 
-    flexarray_append(dm_args, "-machine");
     switch (b_info->type) {
     case LIBXL_DOMAIN_TYPE_PVH:
     case LIBXL_DOMAIN_TYPE_PV:
+        flexarray_append(dm_args, "-machine");
         flexarray_append(dm_args, "xenpv");
         for (i = 0; b_info->extra_pv && b_info->extra_pv[i] != NULL; i++)
             flexarray_append(dm_args, b_info->extra_pv[i]);
         break;
     case LIBXL_DOMAIN_TYPE_HVM:
-        if (!libxl_defbool_val(b_info->u.hvm.xen_platform_pci)) {
-            /* Switching here to the machine "pc" which does not add
-             * the xen-platform device instead of the default "xenfv" machine.
-             */
-            machinearg = libxl__strdup(gc, "pc,accel=xen");
-        } else {
-            machinearg = libxl__strdup(gc, "xenfv");
+        if (libxl_defbool_val(b_info->u.hvm.xen_platform_pci)) {
+            flexarray_append(dm_args, "-device");
+            flexarray_append(dm_args, "xen-platform");
         }
+        machinearg = libxl__strdup(gc, "pc-i440fx-3.1,accel=xen");
         if (b_info->u.hvm.mmio_hole_memkb) {
             uint64_t max_ram_below_4g = (1ULL << 32) -
                 (b_info->u.hvm.mmio_hole_memkb << 10);
@@ -1798,6 +1795,7 @@ static int libxl__build_device_model_args_new(libxl__gc 
*gc,
             }
         }
 
+        flexarray_append(dm_args, "-machine");
         flexarray_append(dm_args, machinearg);
         for (i = 0; b_info->extra_hvm && b_info->extra_hvm[i] != NULL; i++)
             flexarray_append(dm_args, b_info->extra_hvm[i]);
++++++ xen.bug1026236.suse_vtsc_tolerance.patch ++++++
--- /var/tmp/diff_new_pack.ovxjuJ/_old  2020-02-10 16:41:58.015725050 +0100
+++ /var/tmp/diff_new_pack.ovxjuJ/_new  2020-02-10 16:41:58.015725050 +0100
@@ -10,7 +10,7 @@
 
 --- a/xen/arch/x86/time.c
 +++ b/xen/arch/x86/time.c
-@@ -42,6 +42,9 @@
+@@ -43,6 +43,9 @@
  static char __initdata opt_clocksource[10];
  string_param("clocksource", opt_clocksource);
  
@@ -20,7 +20,7 @@
  unsigned long __read_mostly cpu_khz;  /* CPU clock frequency in kHz. */
  DEFINE_SPINLOCK(rtc_lock);
  unsigned long pit0_ticks;
-@@ -2193,6 +2196,7 @@ int tsc_set_info(struct domain *d,
+@@ -2223,6 +2226,7 @@ int tsc_set_info(struct domain *d,
  
      switch ( tsc_mode )
      {
@@ -28,7 +28,7 @@
      case TSC_MODE_DEFAULT:
      case TSC_MODE_ALWAYS_EMULATE:
          d->arch.vtsc_offset = get_s_time() - elapsed_nsec;
-@@ -2206,8 +2210,26 @@ int tsc_set_info(struct domain *d,
+@@ -2236,8 +2240,26 @@ int tsc_set_info(struct domain *d,
           * When a guest is created, gtsc_khz is passed in as zero, making
           * d->arch.tsc_khz == cpu_khz. Thus no need to check incarnation.
           */
@@ -52,7 +52,7 @@
 +
          if ( tsc_mode == TSC_MODE_DEFAULT && host_tsc_is_safe() &&
 -             (d->arch.tsc_khz == cpu_khz ||
-+             ( disable_vtsc ||
++             (disable_vtsc ||
                (is_hvm_domain(d) &&
                 hvm_get_tsc_scaling_ratio(d->arch.tsc_khz))) )
          {


Reply via email to