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

Re: [Xen-devel] Clock Interrupt not occurring. hypervisor_callback not being called.


  • To: "Dave Winchell" <dwinchell@xxxxxxxxxxxxxxx>
  • From: "Ivan Kelly" <ivanbkelly@xxxxxxxxx>
  • Date: Tue, 28 Feb 2006 23:48:42 +0000
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
  • Delivery-date: Tue, 28 Feb 2006 23:49:10 +0000
  • Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=hHboUqP8MtKVVmI8bG2mBke1rbWo54Q8CIH0Kcq6OBN/Fy8wFmy708OCx+fUz69YEk+h4JO2vG2rv9Uaq5jXQqBc3Qp1+4UU/MDlrJQWypNoEv7Ii1C65vvCJk5s56ipF79Zd3Stq/d3j5M6BITM5j2jAd46VoGA5i+yMoXb+jw=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

On 2/28/06, Dave Winchell <dwinchell@xxxxxxxxxxxxxxx> wrote:
> Have you tried making evtchn_pending and evtchn_mask volatile in
> shared_info_t?
I tried that. It's still showing the same behaviour.  The function is
as below. When the kprintf("l1 ... bit is uncommented, the clock
events seem to get fired fine, and the the main loop also continues to
run. When removed, it doesn't get called at all. It never gets as far
as do_event. kprintf is a function that calls hypervisor_console_io.
This is 2.0.7 btw.
Regards
Ivan

<SNIP>
PUBLIC void
do_hypervisor_callback(struct stackframe_s *regs)
{
        unsigned long  l1, l2;
        unsigned int   l1i, l2i, port;
        int            irq;
        shared_info_t *s = hypervisor_shared_info;

        s->vcpu_data[0].evtchn_upcall_pending = 0;

        l1 = x86_atomic_xchg(&s->evtchn_pending_sel, 0);

        while ( l1 != 0 )
        {
/*              kprintf("l1: %x\n");*/
                l1i = x86_scan_forward(l1);
                l1 &= ~(1 << l1i);

                l2 = s->evtchn_pending[l1i] & ~s->evtchn_mask[l1i];
                while ( l2 != 0 )
                {
                        kprintf("l2: %x\n", l2);
                        l2i = x86_scan_forward(l2);
                        l2 &= ~(1 << l2i);

                        port = (l1i << 5) + l2i;

                        if ( (irq = event_to_action[port]) != -1 ) {
                                do_event(irq, regs);
                        }
                }
        }
}
<ENDSNIP>

_______________________________________________
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®.