[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


 


Rackspace

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