WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Xen-devel] Clock Interrupt not occurring. hypervisor_callback not being called. (more info)
From: "Ivan Kelly" <ivanbkelly@xxxxxxxxx>
Date: Wed, 1 Mar 2006 16:17:21 +0000
Delivery-date: Wed, 01 Mar 2006 16:17:53 +0000
Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=ZKhTBA0jFIHt9rBP2vTOWVHZDCC3uOy5t/QKfBUc/BaQweuNV5sP4BSdLsOTirfoYtWNL5Ks2aQHWBMtVbaxCIUi3Hnh+PeRyJJ3wZor+57AYwl97vz/2axBC1iV9MXHOicrYVP8rhbpyhFd3ejLOR4QZ/nczCHxXj6u7AqjVB4=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Some more info on this problem.
The problem seems to be that evtchn_pending[0] is not being updated
fast enough after the callback is made. Therefore the callback is
running and seeing nothing as pending and discarding anything that
happens.
If i put in something that delays before the start of the inner loop
somewhere, it will work fine. It doesn't have to be a printf, can be a
for(i=0;i<100000;i++) or something similar.
evtchn_pending is set as volatile. Im not sure if this is actually
helping at all though, since I have to use the ACK compiler which is
the only thing that minix will compile with.

Does anyone have any idea on how i can get evtchn_pending to update on time?
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