Re: [PATCH v5] KVM x86/xen: add an override for PVCLOCK_TSC_STABLE_BIT

From: David Woodhouse
Date: Thu Nov 30 2023 - 14:42:58 EST


On Thu, 2023-11-30 at 16:41 +0000, Paul Durrant wrote:
> On 30/11/2023 16:36, Sean Christopherson wrote:
> > +Andrew
> >
> > On Thu, Nov 02, 2023, Paul Durrant wrote:
> > > From: Paul Durrant <pdurrant@xxxxxxxxxx>
> > >
> > > Unless explicitly told to do so (by passing 'clocksource=tsc' and
> > > 'tsc=stable:socket', and then jumping through some hoops concerning
> > > potential CPU hotplug) Xen will never use TSC as its clocksource.
> > > Hence, by default, a Xen guest will not see PVCLOCK_TSC_STABLE_BIT set
> > > in either the primary or secondary pvclock memory areas. This has
> > > led to bugs in some guest kernels which only become evident if
> > > PVCLOCK_TSC_STABLE_BIT *is* set in the pvclocks. Hence, to support
> > > such guests, give the VMM a new Xen HVM config flag to tell KVM to
> > > forcibly clear the bit in the Xen pvclocks.
> >
> > ...
> >
> > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
> > > index 7025b3751027..a9bdd25826d1 100644
> > > --- a/Documentation/virt/kvm/api.rst
> > > +++ b/Documentation/virt/kvm/api.rst
> > > @@ -8374,6 +8374,7 @@ PVHVM guests. Valid flags are::
> > >     #define KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL            (1 << 4)
> > >     #define KVM_XEN_HVM_CONFIG_EVTCHN_SEND              (1 << 5)
> > >     #define KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG     (1 << 6)
> > > +  #define KVM_XEN_HVM_CONFIG_PVCLOCK_TSC_UNSTABLE      (1 << 7)
> >
> > Does Xen actually support PVCLOCK_TSC_STABLE_BIT?  I.e. do we need new uAPI to
> > fix this, or can/should KVM simply _never_ set PVCLOCK_TSC_STABLE_BIT for Xen
> > clocks?  At a glance, PVCLOCK_TSC_STABLE_BIT looks like it was added as a purely
> > Linux/KVM-only thing.
>
> It's certainly tested in arch/x86/xen/time.c, in
> xen_setup_vsyscall_time_info() and xen_time_init(), so I'd guess it is
> considered to be supported.

And yes, Xen does set it, if you jump through the right hoops to make
Xen actually use the TSC as its clocksource.

The new uAPI is just a single bit in the KVM_XEN_HVM_CONFIG
capabilities; I think it's reasonable enough.

Attachment: smime.p7s
Description: S/MIME cryptographic signature