[lkml]   [2018]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH v12 09/11] x86/tsc: prepare for early sched_clock
On 18-06-29 09:30:10, Thomas Gleixner wrote:
> On Thu, 28 Jun 2018, Pavel Tatashin wrote:
> > On Thu, Jun 28, 2018 at 11:23 AM Thomas Gleixner <> wrote:
> > Hi Thomas,
> >
> > In addition to above, we have xen hvm:
> >
> > setup_arch()
> > ...
> > init_hypervisor_platform();
> > x86_init.hyper.init_platform();
> > xen_hvm_guest_init()
> > xen_hvm_init_time_ops();
> Duh. Missed that completely.
> > ...
> > tsc_early_delay_calibrate();
> > tsc_khz = x86_platform.calibrate_tsc(); == xen_tsc_khz()
> > ...
> >
> > Which works early.
> >
> > So, what should we do with xen, which seems to be the only platform
> > that would provide different tsc frequency early and late, because of
> > different calibration method?
> Fix it? I have no idea why XEN has two variants of the scheme and I neither
> have a clue why the KVM clock stuff is late.

kvm clock I have fixed in my series.

It was late because, it depended on memblock, which is initialized later,
after e820 ranges are read.

So, after my series kvm clock will work right after
init_hypervisor_platform, the same as with most other hypervisors.

With xen, it is a little more challenging: I do not have a hardware
configured to run xen to test it.

On the other hand, most likely that tsc_early_delay_calibrate() now
fails to calibrate tsc on xen, and calibrates correctly later in
tsc_init(). I doubt, that we can use CPUID method to determine tsc
frequency on xen cpu. Anyways, that would be accidental behavior.

To make xen clock available early, we need HYPERVISOR_shared_info. So, at
least that part of xen_setup_shared_info() must be called/available from

void xen_setup_shared_info(void)
set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info);

HYPERVISOR_shared_info =
(struct shared_info *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);


Which, I have no idea if it is possible, or safe to do.

For now, in my series, I would like check in tsc_early_init() if we are
running xen, and set tsc_khz to 0 if so. Later in tsc_init() we will get
a proper calibration. The question is how to make this check least


 \ /
  Last update: 2018-06-29 11:02    [W:0.352 / U:1.816 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site