From owner-svn-soc-all@freebsd.org Fri Jun 17 16:22:29 2016 Return-Path: Delivered-To: svn-soc-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 8A623A775FF for ; Fri, 17 Jun 2016 16:22:29 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (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 6456124BF for ; Fri, 17 Jun 2016 16:22:29 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5HGMTiN022485 for ; Fri, 17 Jun 2016 16:22:29 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5HGMS9C022442 for svn-soc-all@FreeBSD.org; Fri, 17 Jun 2016 16:22:28 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 17 Jun 2016 16:22:28 GMT Message-Id: <201606171622.u5HGMS9C022442@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305290 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jun 2016 16:22:29 -0000 Author: vincenzo Date: Fri Jun 17 16:22:28 2016 New Revision: 305290 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305290 Log: freebsd: ptnet_tx_intr: update hwcur/hwtail from host Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 17 16:22:19 2016 (r305289) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 17 16:22:28 2016 (r305290) @@ -105,8 +105,8 @@ char lock_name[16]; }; -#define PTNET_Q_LOCK(_pq) mtx_lock(&(_pq_->lock) -#define PTNET_Q_UNLOCK(_pq) mtx_unlock(&(_pq_->lock) +#define PTNET_Q_LOCK(_pq) mtx_lock(&(_pq)->lock) +#define PTNET_Q_UNLOCK(_pq) mtx_unlock(&(_pq)->lock) struct ptnet_softc { device_t dev; @@ -743,14 +743,18 @@ pq = sc->queues + 0; ptring = pq->ptring; - kring = na->tx_rings + 0; + kring = na->tx_rings + pq->kring_id; ring = kring->ring; lim = kring->nkr_num_slots - 1; + PTNET_Q_LOCK(pq); + /* Update hwcur and hwtail (completed TX slots) as known by the host, * by reading from CSB. */ ptnet_sync_tail(ptring, kring); + PTNET_Q_UNLOCK(pq); + head = ring->head; slot = ring->slot + head; nmbuf = NMB(na, slot); @@ -1100,12 +1104,21 @@ { struct ptnet_queue *pq = opaque; struct ptnet_softc *sc = pq->sc; + struct netmap_adapter *na_dr = &sc->ptna_dr.hwup.up; DBG(device_printf(sc->dev, "Tx interrupt #%d\n", pq->kring_id)); + if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) { + return; + } + if (netmap_tx_irq(sc->ifp, pq->kring_id) != NM_IRQ_PASS) { return; } + + PTNET_Q_LOCK(pq); + ptnet_sync_tail(pq->ptring, na_dr->tx_rings + pq->kring_id); + PTNET_Q_UNLOCK(pq); } static void @@ -1117,6 +1130,10 @@ DBG(device_printf(sc->dev, "Rx interrupt #%d\n", pq->kring_id)); + if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) { + return; + } + if (netmap_rx_irq(sc->ifp, pq->kring_id, &unused) != NM_IRQ_PASS) { return; }