Re: [PATCH 4/5] x86/kernel: Provide a means to disable TSC ART

From: Thomas Gleixner
Date: Wed Oct 04 2017 - 14:51:06 EST


On Wed, 4 Oct 2017, Mike Travis wrote:
> On 10/4/2017 2:27 AM, Peter Zijlstra wrote:
> > On Mon, Oct 02, 2017 at 10:12:18AM -0500, mike.travis@xxxxxxx wrote:
> > > static void detect_art(void)
> > > {
> > > unsigned int unused[2];
> > > - if (boot_cpu_data.cpuid_level < ART_CPUID_LEAF)
> > > + if (boot_cpu_data.cpuid_level < ART_CPUID_LEAF || tsc_art_disabled)
> > > return;
> > > /* Don't enable ART in a VM, non-stop TSC and TSC_ADJUST
> > > required */
> >
> >
> > So why can't we use is_uv_system() here an for the tsc_adjust thing?
>
> I could. I just thought that there may be future system arches that
> need the same facility?
> >
> > Also (and I hate the name) tsc_multi_sync_resets is the reason you
> > cannot use ART, I don't think it makes sense to introduce yet another
> > knob.
> >
> Okay. I wasn't sure if there might be different causes for wanting one
> condition over the other. So does this mean change this later test to
> use is_uv_system() or tsc_multi_sync_resets?

tsc_multi_sync_resets because that's the reason to disable ART as not all
sockets have the same TSC <-> ART offset.

Btw, your changelog is slightly wrong here:

> On systems where multiple chassis are reset asynchronously there is not a
> constant ratio between the ART frequency and the TSC time that can be
> provided by the boot cpu.

The ratio is actually the same as the frequencies should be the
same. Though the offset in that equation:

n
TSC = offset + ART * ---
d

is different because that offset is basically TSC_ADJUST.

Thanks,

tglx