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

[Xen-devel] [BROKEN PATCH] Work around pvops lost event channel bug



Our automated tests are failing to push because, with some
probability, a lost event channel event makes xenconsoled, and the
domU get stuck.

We think this is going to be fixed by
  
http://xenbits.xen.org/gitweb?p=people/ianc/linux-2.6.git;a=commit;h=5d30cb2a85912ffb5f6556d55472c26801eef2ea
  http://lists.xensource.com/archives/html/xen-devel/2010-10/msg00370.html

But here is a workaround (against xen-4.0-testing) that in my tests
seemed to make dom0 xenconsoled unwedge.

Ian.

diff -r c32e9163328d tools/console/daemon/io.c
--- a/tools/console/daemon/io.c Mon Oct 04 12:53:03 2010 +0100
+++ b/tools/console/daemon/io.c Tue Oct 12 15:28:36 2010 +0100
@@ -891,8 +891,9 @@ static void handle_ring_read(struct doma
        if (dom->is_dead)
                return;
 
-       if ((port = xc_evtchn_pending(dom->xce_handle)) == -1)
-               return;
+//     if ((port = xc_evtchn_pending(dom->xce_handle)) == -1)
+//             return;
+       port = dom->local_port;
 
        dom->event_count++;
 
@@ -975,6 +976,7 @@ void handle_io(void)
 {
        fd_set readfds, writefds;
        int ret;
+       static struct timeval abs_max_timeout = { 10, 0 };
 
        if (log_hv) {
                xc_handle = xc_interface_open();
@@ -1076,7 +1078,7 @@ void handle_io(void)
                }
 
                ret = select(max_fd + 1, &readfds, &writefds, 0,
-                            next_timeout ? &timeout : NULL);
+                            next_timeout ? &timeout : &abs_max_timeout);
 
                if (log_reload) {
                        handle_log_reload();
@@ -1105,9 +1107,7 @@ void handle_io(void)
                for (d = dom_head; d; d = n) {
                        n = d->next;
                        if (d->event_count < RATE_LIMIT_ALLOWANCE) {
-                               if (d->xce_handle != -1 &&
-                                   FD_ISSET(xc_evtchn_fd(d->xce_handle),
-                                            &readfds))
+                               if (d->xce_handle != -1)
                                        handle_ring_read(d);
                        }
 

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