Index: sys/dev/xen/netfront/netfront.c =================================================================== --- sys/dev/xen/netfront/netfront.c +++ sys/dev/xen/netfront/netfront.c @@ -976,7 +976,6 @@ break; if (xn_connect(sc) != 0) break; - xenbus_set_state(dev, XenbusStateConnected); break; case XenbusStateClosing: xenbus_set_state(dev, XenbusStateClosed); @@ -1969,8 +1968,13 @@ * packets. */ netfront_carrier_on(np); + + /* Switch to connected state before kicking the rings. */ + xenbus_set_state(np->xbdev, XenbusStateConnected); + for (i = 0; i < np->num_queues; i++) { txq = &np->txq[i]; + rxq = &np->rxq[i]; xen_intr_signal(txq->xen_intr_handle); XN_TX_LOCK(txq); xn_txeof(txq); @@ -1978,6 +1982,7 @@ XN_RX_LOCK(rxq); xn_alloc_rx_buffers(rxq); XN_RX_UNLOCK(rxq); + taskqueue_enqueue(txq->tq, &txq->defrtask); } return (0);