> On May 2, 2016, at 09:15, Roger Pau Monné <roy...@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/
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to