[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 12 Dec 2022 14:05:19 -0800
From: Krister Johansen <kjlx@...pleofstupid.com>
To: Jan Beulich <jbeulich@...e.com>
Cc: Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>,
Dave Hansen <dave.hansen@...ux.intel.com>, x86@...nel.org,
"H. Peter Anvin" <hpa@...or.com>, xen-devel@...ts.xenproject.org,
linux-kernel@...r.kernel.org,
Marcelo Tosatti <mtosatti@...hat.com>,
Anthony Liguori <aliguori@...zon.com>,
David Reaver <me@...idreaver.com>,
Brendan Gregg <brendan@...el.com>,
Juergen Gross <jgross@...e.com>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>
Subject: Re: [PATCH linux-next v2] x86/xen/time: prefer tsc as clocksource
when it is invariant
On Mon, Dec 12, 2022 at 05:46:29PM +0100, Jan Beulich wrote:
> On 12.12.2022 17:05, Krister Johansen wrote:
> > Both the Intel SDM[4] and the Xen tsc documentation explain that marking
> > a tsc as invariant means that it should be considered stable by the OS
> > and is elibile to be used as a wall clock source. The Xen documentation
> > further clarifies that this is only reliable on HVM and PVH because PV
> > cannot intercept a cpuid instruction.
>
> Without meaning to express a view on the argumentation as a whole, this
> PV aspect is suspicious. Unless you open-code a use of the CPUID insn
> in the kernel, all uses of CPUID are going to be processed by Xen by
> virtue of the respective pvops hook. Documentation says what it says
> for environments where this might not be the case.
Thanks, appreciate the clarification here. Just restating this for my
own understanding: your advice would be to drop this check below?
> > + if (!(xen_hvm_domain() || xen_pvh_domain()))
> > + return 0;
And then update the commit message to dispense with the distinction
between HVM, PV, and PVH?
> > + cpuid(xen_cpuid_base() + 3, &eax, &ebx, &ecx, &edx);
>
> Xen leaf 3 has sub-leaves, so I think you need to set ecx to zero before
> this call.
The cpuid() inline in arch/x86/include/asm/processor.h assigns zero to
ecx prior to calling __cpuid. In arch/x86/boot/cpuflags.c the macros
are a little different, but it looks like there too, the macro passes 0
as an input argument to cpuid_count which ends up being %ecx. Happy to
fix this up if I'm looking at the wrong cpuid functions, though.
-K
Powered by blists - more mailing lists