svn commit: r298929 - head/sys/dev/xen/timer

Roger Pau Monné royger at FreeBSD.org
Tue May 3 08:07:42 UTC 2016


On Mon, May 02, 2016 at 11:46:31AM -0700, Ngie Cooper (yaneurabeya) wrote:
> 
> > On May 2, 2016, at 09:15, Roger Pau Monné <royger at FreeBSD.org> wrote:
> > 
> > Author: royger
> > Date: Mon May  2 16:15:28 2016
> > New Revision: 298929
> > URL: https://svnweb.freebsd.org/changeset/base/298929
> > 
> > Log:
> >  xen/time: allow Dom0 to set the host time
> > 
> >  Dom0 should be able to set the host time. This is implemented by first
> >  writing to the RTC (as would be done on bare metal), and then using the
> >  XENPF_settime64 hypercall in order to force Xen to update the wallclock
> >  shared page of all domains.
> > 
> >  Sponsored by: Citrix Systems R&D
> > 
> > Modified:
> >  head/sys/dev/xen/timer/timer.c
> > 
> > Modified: head/sys/dev/xen/timer/timer.c
> > ==============================================================================
> > --- head/sys/dev/xen/timer/timer.c	Mon May  2 16:14:55 2016	(r298928)
> > +++ head/sys/dev/xen/timer/timer.c	Mon May  2 16:15:28 2016	(r298929)
> > @@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$");
> > #include <xen/hypervisor.h>
> > #include <xen/interface/io/xenbus.h>
> > #include <xen/interface/vcpu.h>
> > +#include <xen/error.h>
> > 
> > #include <machine/cpu.h>
> > #include <machine/cpufunc.h>
> > @@ -63,6 +64,8 @@ __FBSDID("$FreeBSD$");
> > 
> > #include <dev/xen/timer/timer.h>
> > 
> > +#include <isa/rtc.h>
> > +
> > #include "clock_if.h"
> > 
> > static devclass_t xentimer_devclass;
> > @@ -211,11 +214,32 @@ xen_fetch_uptime(struct timespec *ts)
> > static int
> > xentimer_settime(device_t dev __unused, struct timespec *ts)
> > {
> > +	struct xen_platform_op settime;
> > +	int ret;
> > +
> > 	/*
> > 	 * Don't return EINVAL here; just silently fail if the domain isn't
> > 	 * privileged enough to set the TOD.
> > 	 */
> > -	return (0);
> > +	if (!xen_initial_domain())
> > +		return (0);
> > +
> > +	/* Set the native RTC. */
> > +	atrtc_set(ts);
> > +
> > +	settime.cmd = XENPF_settime64;
> > +	settime.u.settime64.mbz = 0;
> > +	settime.u.settime64.secs = ts->tv_sec;
> > +	settime.u.settime64.nsecs = ts->tv_nsec;
> > +	settime.u.settime64.system_time =
> > +		xen_fetch_vcpu_time(DPCPU_GET(vcpu_info));
> > +
> > +	ret = HYPERVISOR_platform_op(&settime);
> > +	ret = ret != 0 ? xen_translate_error(ret) : 0;
> > +	if (ret != 0 && bootverbose)
> > +		device_printf(dev, "failed to set Xen PV clock: %d\n", ret);
> > +
> > +	return (ret);
> > }
> 
> This broke the build on i386 with clang: https://jenkins.freebsd.org/job/FreeBSD_HEAD_i386/3028/

Should be fixed in 298971.

Roger.


More information about the svn-src-head mailing list