mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Denis Plotnikov <dplotnikov@virtuozzo.com>,
	rkrcmar@redhat.com, kvm@vger.kernel.org, john.stultz@linaro.org,
	mingo@redhat.com, hpa@zytor.com, linux-kernel@vger.kernel.org,
	x86@kernel.org, rkagan@virtuozzo.com, den@virtuozzo.com
Subject: Re: [PATCH v5 1/6] timekeeper: introduce extended clocksource reading callback
Date: Wed, 27 Sep 2017 13:53:50 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.20.1709271339020.2027@nanos> (raw)
In-Reply-To: <7f73ec16-7262-329c-d2c3-d5481142c370@redhat.com>

On Wed, 27 Sep 2017, Paolo Bonzini wrote:
> The definitions do fit KVM, and indeed there is ptp-kvm that does
> something very similar to what you describe in the other mail.  We have:
> 
> 	#1 is host time
> 	#2 is host TSC
> 	#3 is guest TSC
> 
> We know that #2 and #3 have a fixed ratio and offset.  The point is
> whether #1 and #2 can be captured atomically.
> 
> For PTP-KVM, the host tells the guest; if capturing the two is
> impossible, it fails the hypercall and ioctl(PTP_SYS_OFFSET_PRECISE)
> fails too.
> 
> Right now, the hypercall fails if the host clocksource is not the TSC
> clocksource, which is safe.
> 
> These patches are about ascertaining whether #1 and #2 can be captured
> atomically in a more generic way.  In the read_with_stamp case:
> 
> - if it returns true, it gives an atomic reading of #1 and #2
> 
> - if it returns false, it gives a reading of #1 only.
> 
> 
> I think the hook should be specific to x86.  For example it could be an
> array of function pointers, indexed by vclock_mode, with the same
> semantics as read_with_stamp.

I don't think you need that.

The get_time_fn() which is handed in to get_device_system_crossstamp() can
convey that information:

                /*
                 * Try to synchronously capture device time and a system
                 * counter value calling back into the device driver
                 */
                ret = get_time_fn(&xtstamp->device, &system_counterval, ctx);
                if (ret)
                        return ret;

So in your case get_time_fn() would be kvmclock or hyperv clock specific
and the actual hypercall implementation can return a failure code if the
requirements are not met:

   1) host clock source is TSC
   2) capturing of host time and TSC is atomic

The host side of the hypercall can use ktime_get_snapshot() with the boot
time extension and the extra bits I posted yesterday and fail if the
snapshot is not valid for that purpose, i.e. host clocksource is not valid
for guest correlation.

The hypercall side on the guest can then do:

	if (hypercall(hypercalldata))
		return -ENODEV;
	system_counterval->cs = tsc_clocksource;
       	system_counterval->data = hypercalldata;
	return 0;

Then the following check in get_device_system_crossstamp() will do the
last sanity check:

		/*
		 * Verify that the clocksource associated with the captured
		 * system counter value is the same as the currently installed
		 * timekeeper clocksource
		 */
		if (tk->tkr_mono.clock != system_counterval.cs)
			return -ENODEV;

which catches the case where the guest side clock source is !TSC.

Thanks,

	tglx

  reply	other threads:[~2017-09-27 11:54 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-30 15:23 [PATCH v5 0/6] KVM: x86: get rid of pvclock_gtod_copy Denis Plotnikov
2017-08-30 15:23 ` [PATCH v5 1/6] timekeeper: introduce extended clocksource reading callback Denis Plotnikov
2017-09-25 22:00   ` Thomas Gleixner
2017-09-26 16:51     ` Paolo Bonzini
2017-09-27  8:52       ` Thomas Gleixner
2017-09-27 10:43         ` Paolo Bonzini
2017-09-27 11:53           ` Thomas Gleixner [this message]
2017-09-27 12:14             ` Paolo Bonzini
2017-09-27 13:45               ` Thomas Gleixner
2017-09-27  9:18       ` Thomas Gleixner
2017-08-30 15:23 ` [PATCH v5 2/6] timekeeper: introduce boot field in system_time_snapshot Denis Plotnikov
2017-08-30 15:23 ` [PATCH v5 3/6] timekeeper: use the extended reading function on snapshot acquiring Denis Plotnikov
2017-08-30 15:23 ` [PATCH v5 4/6] tsc: implement the extended tsc reading function Denis Plotnikov
2017-08-30 15:23 ` [PATCH v5 5/6] KVM: x86: switch to masterclock update using timekeeper functionality Denis Plotnikov
2017-08-30 15:23 ` [PATCH v5 6/6] KVM: x86: remove not used pvclock_gtod_copy Denis Plotnikov
2017-09-11  9:24 ` [PATCH v5 0/6] KVM: x86: get rid of pvclock_gtod_copy Denis Plotnikov
2017-09-18  7:35   ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.20.1709271339020.2027@nanos \
    --to=tglx@linutronix.de \
    --cc=den@virtuozzo.com \
    --cc=dplotnikov@virtuozzo.com \
    --cc=hpa@zytor.com \
    --cc=john.stultz@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rkagan@virtuozzo.com \
    --cc=rkrcmar@redhat.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®