Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Dec 2012 19:45:37 +0000 (UTC)
From:      Peter Grehan <grehan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r244160 - projects/bhyve/usr.sbin/bhyve
Message-ID:  <201212121945.qBCJjbio032473@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: grehan
Date: Wed Dec 12 19:45:36 2012
New Revision: 244160
URL: http://svnweb.freebsd.org/changeset/base/244160

Log:
  Properly reset the tx/rx rings when a guest requests a device reset.
  
  Obtained from:	NetApp

Modified:
  projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c

Modified: projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c
==============================================================================
--- projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c	Wed Dec 12 19:25:48 2012	(r244159)
+++ projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c	Wed Dec 12 19:45:36 2012	(r244160)
@@ -178,10 +178,29 @@ pci_vtnet_qsize(int qnum)
 }
 
 static void
+pci_vtnet_ring_reset(struct pci_vtnet_softc *sc, int ring)
+{
+	struct vring_hqueue *hq;
+
+	assert(ring < VTNET_MAXQ);
+
+	hq = &sc->vsc_hq[ring];
+
+	/*
+	 * Reset all soft state
+	 */
+	hq->hq_cur_aidx = 0;
+}
+
+static void
 pci_vtnet_update_status(struct pci_vtnet_softc *sc, uint32_t value)
 {
+
 	if (value == 0) {
 		DPRINTF(("vtnet: device reset requested !\n"));
+		pci_vtnet_ring_reset(sc, VTNET_RXQ);
+		pci_vtnet_ring_reset(sc, VTNET_TXQ);
+		sc->vsc_rx_ready = 0;
 	}
 
 	sc->vsc_status = value;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212121945.qBCJjbio032473>