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

[Xen-devel] Periodic timer interrupts in the Mini-OS (working?)



Hello!

I have a question about timer interrupts in the Mini-OS and
HYPERVISOR_set_timer_op. From printouts, it seems like the Mini-OS only
recieves timer events after calling block_domain:

void block_domain(u32 millisecs)
{
    struct timeval tv;
    gettimeofday(&tv);
    HYPERVISOR_set_timer_op(monotonic_clock() + 1000000LL * (s64) millisecs);
    HYPERVISOR_sched_op(SCHEDOP_block, 0);
}

i.e., not the "regular" 10ms periodic events (if I don't call block_domain(),
it will just sit idle). I'm trying to understand why this is the case.


>From looking in the Linux source code, I presume that the periodic ticker is
setup in setup_cpu0_timer_irq() on uniprocessors, and this simply does a
bind_virq_to_irqhandler(VIRQ_TIMER, ...), which is the same thing that the
mini-os does by calling bind_virq(VIRQ_TIMER, ...) in the init_time()
function. These two functions do the same things, including unmasking the
event channel.

The mini-os also does a __sti(), also taken from Linux, to enable event
delivery before init_time().


Is there anything else which needs to be done to deliver periodic timer
events?

-- 
// Simon

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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