Module Name:    src
Committed By:   bouyer
Date:           Thu May 19 21:13:07 UTC 2011

Modified Files:
        src/sys/arch/xen/xen [netbsd-5]: if_xennet_xenbus.c xennetback_xenbus.c

Log Message:
Pull up following revision(s) (requested by jym in ticket #1609):
        sys/arch/xen/xen/if_xennet_xenbus.c: revision 1.50
        sys/arch/xen/xen/xennetback_xenbus.c: revision 1.43
Check that xvif(4) is not already connected before proceeding in the
XenbusStateConnected mode. Under rare occasions, the xenbus watcher
can fire multiple times, overwriting the I/O ring memory mappings with
invalid values. This will lead sooner or later to dom0 panic().
Will ask for pullup. FWIW, xbdback(4) is not affected.
Check status before proceeding further. Avoids spurious watch calls.


To generate a diff of this commit:
cvs rdiff -u -r1.29.2.5 -r1.29.2.6 src/sys/arch/xen/xen/if_xennet_xenbus.c
cvs rdiff -u -r1.24.4.3 -r1.24.4.4 src/sys/arch/xen/xen/xennetback_xenbus.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/xen/xen/if_xennet_xenbus.c
diff -u src/sys/arch/xen/xen/if_xennet_xenbus.c:1.29.2.5 src/sys/arch/xen/xen/if_xennet_xenbus.c:1.29.2.6
--- src/sys/arch/xen/xen/if_xennet_xenbus.c:1.29.2.5	Thu May 19 21:11:15 2011
+++ src/sys/arch/xen/xen/if_xennet_xenbus.c	Thu May 19 21:13:07 2011
@@ -1,4 +1,4 @@
-/*      $NetBSD: if_xennet_xenbus.c,v 1.29.2.5 2011/05/19 21:11:15 bouyer Exp $      */
+/*      $NetBSD: if_xennet_xenbus.c,v 1.29.2.6 2011/05/19 21:13:07 bouyer Exp $      */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.29.2.5 2011/05/19 21:11:15 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.29.2.6 2011/05/19 21:13:07 bouyer Exp $");
 
 #include "opt_xen.h"
 #include "opt_nfs_boot.h"
@@ -541,6 +541,8 @@
 		xenbus_switch_state(sc->sc_xbusd, NULL, XenbusStateClosed);
 		break;
 	case XenbusStateInitWait:
+		if (sc->sc_backend_status == BEST_CONNECTED)
+			break;
 		if (xennet_talk_to_backend(sc) == 0)
 			xenbus_switch_state(sc->sc_xbusd, NULL,
 			    XenbusStateConnected);

Index: src/sys/arch/xen/xen/xennetback_xenbus.c
diff -u src/sys/arch/xen/xen/xennetback_xenbus.c:1.24.4.3 src/sys/arch/xen/xen/xennetback_xenbus.c:1.24.4.4
--- src/sys/arch/xen/xen/xennetback_xenbus.c:1.24.4.3	Sat Jan 30 19:14:20 2010
+++ src/sys/arch/xen/xen/xennetback_xenbus.c	Thu May 19 21:13:07 2011
@@ -1,4 +1,4 @@
-/*      $NetBSD: xennetback_xenbus.c,v 1.24.4.3 2010/01/30 19:14:20 snj Exp $      */
+/*      $NetBSD: xennetback_xenbus.c,v 1.24.4.4 2011/05/19 21:13:07 bouyer Exp $      */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -444,6 +444,8 @@
 		break;
 
 	case XenbusStateConnected:
+		if (xneti->xni_status == CONNECTED)
+			break;
 		/* read comunication informations */
 		err = xenbus_read_ul(NULL, xbusd->xbusd_otherend,
 		    "tx-ring-ref", &tx_ring_ref, 10);

Reply via email to