From owner-svn-src-all@freebsd.org Mon Jun 6 15:01:25 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65904B6D0D2; Mon, 6 Jun 2016 15:01:25 +0000 (UTC) (envelope-from royger@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1E0EF1A59; Mon, 6 Jun 2016 15:01:25 +0000 (UTC) (envelope-from royger@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u56F1Otw078807; Mon, 6 Jun 2016 15:01:24 GMT (envelope-from royger@FreeBSD.org) Received: (from royger@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u56F1OUT078806; Mon, 6 Jun 2016 15:01:24 GMT (envelope-from royger@FreeBSD.org) Message-Id: <201606061501.u56F1OUT078806@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: royger set sender to royger@FreeBSD.org using -f From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= Date: Mon, 6 Jun 2016 15:01:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r301512 - head/sys/dev/xen/netfront X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jun 2016 15:01:25 -0000 Author: royger Date: Mon Jun 6 15:01:24 2016 New Revision: 301512 URL: https://svnweb.freebsd.org/changeset/base/301512 Log: xen-netfront: fix initialization A couple of mostly cosmetic fixes for the final initialization of netfront: - Switch to "connected" state before starting to kick the rings. - Correctly use "rxq" in the initialization loop (previously rxq was not updated in the loop, and netfront would kick np->rxq[N] several times). - Declare and define xn_connect as static, it's not used outside of this file. Reviewed by: Wei Liu Sponsored by: Citrix Systems R&D Differential revision: https://reviews.freebsd.org/D6657 Modified: head/sys/dev/xen/netfront/netfront.c Modified: head/sys/dev/xen/netfront/netfront.c ============================================================================== --- head/sys/dev/xen/netfront/netfront.c Mon Jun 6 14:55:46 2016 (r301511) +++ head/sys/dev/xen/netfront/netfront.c Mon Jun 6 15:01:24 2016 (r301512) @@ -146,7 +146,8 @@ static int setup_device(device_t dev, st static int xn_ifmedia_upd(struct ifnet *ifp); static void xn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr); -int xn_connect(struct netfront_info *); +static int xn_connect(struct netfront_info *); +static void xn_kick_rings(struct netfront_info *); static int xn_get_responses(struct netfront_rxq *, struct netfront_rx_info *, RING_IDX, RING_IDX *, @@ -976,7 +977,9 @@ netfront_backend_changed(device_t dev, X break; if (xn_connect(sc) != 0) break; - xenbus_set_state(dev, XenbusStateConnected); + /* Switch to connected state before kicking the rings. */ + xenbus_set_state(sc->xbdev, XenbusStateConnected); + xn_kick_rings(sc); break; case XenbusStateClosing: xenbus_set_state(dev, XenbusStateClosed); @@ -1924,7 +1927,7 @@ xn_rebuild_rx_bufs(struct netfront_rxq * } /* START of Xenolinux helper functions adapted to FreeBSD */ -int +static int xn_connect(struct netfront_info *np) { int i, error; @@ -1968,8 +1971,20 @@ xn_connect(struct netfront_info *np) * packets. */ netfront_carrier_on(np); + + return (0); +} + +static void +xn_kick_rings(struct netfront_info *np) +{ + struct netfront_rxq *rxq; + struct netfront_txq *txq; + int i; + 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,8 +1993,6 @@ xn_connect(struct netfront_info *np) xn_alloc_rx_buffers(rxq); XN_RX_UNLOCK(rxq); } - - return (0); } static void