|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] mini-os: x86: virtual-timer interrupt and get_time_values_from_xen
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?
Thanks,
--
Dr Thomas Leonard http://0install.net/
GPG: 9242 9807 C985 3C07 44A6 8B9A AE07 8280 59A5 3CC1
GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |