From owner-svn-src-projects@FreeBSD.ORG Wed Dec 12 19:45:37 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A56E62CB; Wed, 12 Dec 2012 19:45:37 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 8A4F48FC08; Wed, 12 Dec 2012 19:45:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBCJjb5f032474; Wed, 12 Dec 2012 19:45:37 GMT (envelope-from grehan@svn.freebsd.org) Received: (from grehan@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBCJjbio032473; Wed, 12 Dec 2012 19:45:37 GMT (envelope-from grehan@svn.freebsd.org) Message-Id: <201212121945.qBCJjbio032473@svn.freebsd.org> From: Peter Grehan Date: Wed, 12 Dec 2012 19:45:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244160 - projects/bhyve/usr.sbin/bhyve X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Dec 2012 19:45:37 -0000 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;