[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] mini-os: x86: virtual-timer interrupt and get_time_values_from_xen



(adding some CCs, and not trimming quotes for their benefit)

On Fri, 2014-10-17 at 15:12 +0100, Thomas Leonard wrote:
> In Mini-OS on x86 we have:
> 
> static void timer_handler(evtchn_port_t ev, struct pt_regs *regs, void *ign)
> {
>     get_time_values_from_xen();
>     update_wallclock();
> }
> 
> static evtchn_port_t port;
> void init_time(void)
> {
>     printk("Initialising timer interface\n");
>     port = bind_virq(VIRQ_TIMER, &timer_handler, NULL);
>     unmask_evtchn(port);
> }
> 
> It seems that the timer values are only correct after the first timer
> interrupt occurs. For example, test.c can output this (if you remove
> xenbus_tester so it starts the timer test quickly enough):
> 
>     Periodic thread started.
>     T(s=8734 us=790808)
>     T(s=1413543796 us=487564)
>     T(s=1413543797 us=487867)
>     ...
> 
> I can fix this by getting it to read the values in init_time:
> 
> void init_time(void)
> {
>     printk("Initialising timer interface\n");
>     port = bind_virq(VIRQ_TIMER, &timer_handler, NULL);
>     unmask_evtchn(port);
> 
>     get_time_values_from_xen();
>     update_wallclock();
> }
> 
> But now I wonder whether the code in timer_handler is needed at all.
> It seems that all code that reads the timer already ensures these
> values are up-to-date by comparing the version number (presumably this
> doesn't work the first time because shadow isn't initialised). With
> the fix to init_time, is it safe to use an empty handler?

It seems like you might be right wrt get_time_values_from_xen(), since
the shadow struct is static to this file all users must be in there, and
on inspection it does seem like everything is always up to date.
(get_nsec_offset appears not, but it's only caller takes care of it).

However I think the update_wallclock is needed, since gettimeofday
doesn't force the update of shadow_ts (nb: different thing to shadow).
Essentially it uses the monotonic_clock to interpolate between timer
ticks.

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.