Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/3] xen/arm: set the system time in Xen via the XENPF_settime hypercall
Date: Mon, 09 Nov 2015 17:10:13 +0100	[thread overview]
Message-ID: <22638556.UuzKE0hp21@wuerfel> (raw)
In-Reply-To: <alpine.DEB.2.02.1511061510190.23825@kaball.uk.xensource.com>

On Monday 09 November 2015 14:10:22 Stefano Stabellini wrote:
> On Thu, 5 Nov 2015, Arnd Bergmann wrote:
> > On Thursday 05 November 2015 17:09:45 Stefano Stabellini wrote:
> > > +	now = __current_kernel_time();
> > 
> > We don't have __current_kernel_time64() yet, but it is trivial
> > to add, just follow the example of
> > current_kernel_time()/current_kernel_time64() and convert the
> > existing __current_kernel_time() function into a static
> > inline wrapper for the new __current_kernel_time64().
> 
> All right. I guess something like:
> 
> struct timespec64 __current_kernel_time64(void)
> {
> 	struct timekeeper *tk = &tk_core.timekeeper;
> 
> 	return tk_xtime(tk);
> }

Yes, exactly.

Just to make sure that this is actually the correct interface
that you want to call:

__current_kernel_time{,64}() is the fastest interface we have
to get an approximation of the current time, while ignoring
all of the locking.

Is is possible that you instead want ktime_get_real_ts64(),
which gives you the time as precise as the kernel knows it,
but uses locking?

> > > +	/*
> > > +	 * We only take the expensive HV call when the clock was set
> > > +	 * or when the 11 minutes RTC synchronization time elapsed.
> > > +	 */
> > > +	if (!was_set && timespec_compare(&now, &next_sync) < 0)
> > > +		return NOTIFY_OK;
> > > +
> > > +	op.interface_version = XENPF_INTERFACE_VERSION;
> > > +	op.cmd = XENPF_settime;
> > > +	op.u.settime.secs = now.tv_sec;
> > > +	op.u.settime.nsecs = now.tv_nsec;
> > > +	op.u.settime.system_time = arch_timer_read_counter();
> > > +	printk("GTOD: Setting to %ld.%ld at %lld\n",
> > > +	       (long)op.u.settime.secs,
> > > +	       (long)op.u.settime.nsecs,
> > > +	       (long long)op.u.settime.system_time);
> > > +	(void)HYPERVISOR_dom0_op(&op);
> > 
> > I guess we will also need a XENPF_settime64 interface, but at
> > least we can get away with implementing only that one on ARM,
> > while x86 will have to support both the 32-bit and 64-bit
> > based variant.
> 
> We already have XENPF_settime64, I'll just use it instead.

Ok, great! Then we just need to find a volunteer who can
do the same thing on x86, with the fallback to XENPF_settime
that they need for older hosts.

	Arnd

  reply	other threads:[~2015-11-09 16:10 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-05 17:09 [PATCH 0/3] Xen wallclock on arm and arm64 Stefano Stabellini
2015-11-05 17:09 ` [PATCH 1/3] xen/arm: introduce xen_read_wallclock Stefano Stabellini
2015-11-05 18:53   ` Arnd Bergmann
2015-11-06 15:09     ` Stefano Stabellini
2015-11-06 15:56       ` Arnd Bergmann
2015-11-09 13:53         ` Stefano Stabellini
2015-11-09 16:16           ` Arnd Bergmann
2015-11-09 17:14             ` Stefano Stabellini
2015-11-09 20:42               ` Arnd Bergmann
2015-11-06 12:26   ` Mark Rutland
2015-11-06 14:34     ` Stefano Stabellini
2015-11-05 17:09 ` [PATCH 2/3] xen/arm: introduce HYPERVISOR_dom0_op on arm and arm64 Stefano Stabellini
2015-11-05 17:21   ` [Xen-devel] " Jan Beulich
2015-11-06 14:45     ` Stefano Stabellini
2015-11-05 17:09 ` [PATCH 3/3] xen/arm: set the system time in Xen via the XENPF_settime hypercall Stefano Stabellini
2015-11-05 17:45   ` [Xen-devel] " David Vrabel
2015-11-06 14:59     ` Stefano Stabellini
2015-11-05 18:58   ` Arnd Bergmann
2015-11-09 14:10     ` Stefano Stabellini
2015-11-09 16:10       ` Arnd Bergmann [this message]
2015-11-09 17:17         ` Stefano Stabellini
2015-11-09 17:42           ` Stefano Stabellini
2015-11-09 20:45             ` Arnd Bergmann

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=22638556.UuzKE0hp21@wuerfel \
    --to=arnd@arndb.de \
    --cc=linux-arm-kernel@lists.infradead.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