From owner-svn-src-user@freebsd.org Wed Mar 28 14:32:25 2018 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5EDDCF639B1 for ; Wed, 28 Mar 2018 14:32:25 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0CD8E6E151; Wed, 28 Mar 2018 14:32:25 +0000 (UTC) (envelope-from markj@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E38B744FE; Wed, 28 Mar 2018 14:32:24 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w2SEWOJQ001099; Wed, 28 Mar 2018 14:32:24 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w2SEWOBb001095; Wed, 28 Mar 2018 14:32:24 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201803281432.w2SEWOBb001095@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 28 Mar 2018 14:32:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r331676 - in user/markj/netdump: share/man/man4 sys/dev/cxgb X-SVN-Group: user X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in user/markj/netdump: share/man/man4 sys/dev/cxgb X-SVN-Commit-Revision: 331676 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Mar 2018 14:32:25 -0000 Author: markj Date: Wed Mar 28 14:32:24 2018 New Revision: 331676 URL: https://svnweb.freebsd.org/changeset/base/331676 Log: Add netdump support to cxgb(4). Tested with a T320 adapter. Modified: user/markj/netdump/share/man/man4/netdump.4 user/markj/netdump/sys/dev/cxgb/cxgb_adapter.h user/markj/netdump/sys/dev/cxgb/cxgb_main.c user/markj/netdump/sys/dev/cxgb/cxgb_sge.c Modified: user/markj/netdump/share/man/man4/netdump.4 ============================================================================== --- user/markj/netdump/share/man/man4/netdump.4 Wed Mar 28 14:31:12 2018 (r331675) +++ user/markj/netdump/share/man/man4/netdump.4 Wed Mar 28 14:32:24 2018 (r331676) @@ -105,6 +105,7 @@ message to the server. The following network drivers support netdump: .Xr alc 4 , .Xr bge 4 , +.Xr cxgb 4 , .Xr em 4 , .Xr igb 4 , .Xr ix 4 , Modified: user/markj/netdump/sys/dev/cxgb/cxgb_adapter.h ============================================================================== --- user/markj/netdump/sys/dev/cxgb/cxgb_adapter.h Wed Mar 28 14:31:12 2018 (r331675) +++ user/markj/netdump/sys/dev/cxgb/cxgb_adapter.h Wed Mar 28 14:32:24 2018 (r331676) @@ -576,4 +576,11 @@ int cxgb_transmit(struct ifnet *ifp, struct mbuf *m); void cxgb_qflush(struct ifnet *ifp); void t3_iterate(void (*)(struct adapter *, void *), void *); void cxgb_refresh_stats(struct port_info *); + +#ifdef NETDUMP +int cxgb_netdump_encap(struct sge_qset *qs, struct mbuf **m); +int cxgb_netdump_poll_rx(adapter_t *adap, struct sge_qset *qs); +int cxgb_netdump_poll_tx(struct sge_qset *qs); +#endif + #endif Modified: user/markj/netdump/sys/dev/cxgb/cxgb_main.c ============================================================================== --- user/markj/netdump/sys/dev/cxgb/cxgb_main.c Wed Mar 28 14:31:12 2018 (r331675) +++ user/markj/netdump/sys/dev/cxgb/cxgb_main.c Wed Mar 28 14:32:24 2018 (r331676) @@ -74,6 +74,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -191,6 +192,8 @@ static devclass_t cxgb_port_devclass; DRIVER_MODULE(cxgb, cxgbc, cxgb_port_driver, cxgb_port_devclass, 0, 0); MODULE_VERSION(cxgb, 1); +NETDUMP_DEFINE(cxgb); + static struct mtx t3_list_lock; static SLIST_HEAD(, adapter) t3_list; #ifdef TCP_OFFLOAD @@ -1045,6 +1048,9 @@ cxgb_port_attach(device_t dev) ether_ifattach(ifp, p->hw_addr); + /* Attach driver netdump methods. */ + NETDUMP_SET(ifp, cxgb); + #ifdef DEFAULT_JUMBO if (sc->params.nports <= 2) ifp->if_mtu = ETHERMTU_JUMBO; @@ -3578,3 +3584,64 @@ cxgbc_mod_event(module_t mod, int cmd, void *arg) return (rc); } + +#ifdef NETDUMP +static void +cxgb_netdump_init(struct ifnet *ifp, int *nrxr) +{ + + *nrxr = SGE_QSETS; +} + +static void +cxgb_netdump_event(struct ifnet *ifp, enum netdump_ev event) +{ + struct port_info *pi; + struct sge_qset *qs; + int i; + + pi = if_getsoftc(ifp); + if (event == NETDUMP_START) + for (i = 0; i < SGE_QSETS; i++) { + qs = &pi->adapter->sge.qs[i]; + + /* Need to reinit after netdump_mbuf_dump(). */ + qs->fl[0].zone = zone_pack; + qs->fl[1].zone = zone_pack; + qs->lro.enabled = 0; + } +} + +static int +cxgb_netdump_transmit(struct ifnet *ifp, struct mbuf *m) +{ + struct port_info *pi; + struct sge_qset *qs; + + pi = if_getsoftc(ifp); + if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != + IFF_DRV_RUNNING) + return (ENOENT); + + qs = &pi->adapter->sge.qs[pi->first_qset]; + return (cxgb_netdump_encap(qs, &m)); +} + +static int +cxgb_netdump_poll(struct ifnet *ifp, int count) +{ + struct port_info *pi; + adapter_t *adap; + int i; + + pi = if_getsoftc(ifp); + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) + return (ENOENT); + + adap = pi->adapter; + for (i = 0; i < SGE_QSETS; i++) + (void)cxgb_netdump_poll_rx(adap, &adap->sge.qs[i]); + (void)cxgb_netdump_poll_tx(&adap->sge.qs[pi->first_qset]); + return (0); +} +#endif /* NETDUMP */ Modified: user/markj/netdump/sys/dev/cxgb/cxgb_sge.c ============================================================================== --- user/markj/netdump/sys/dev/cxgb/cxgb_sge.c Wed Mar 28 14:31:12 2018 (r331675) +++ user/markj/netdump/sys/dev/cxgb/cxgb_sge.c Wed Mar 28 14:32:24 2018 (r331676) @@ -390,6 +390,15 @@ reclaim_completed_tx(struct sge_qset *qs, int reclaim_ return (reclaim); } +#ifdef NETDUMP +int +cxgb_netdump_poll_tx(struct sge_qset *qs) +{ + + return (reclaim_completed_tx(qs, TX_RECLAIM_MAX, TXQ_ETH)); +} +#endif + /** * should_restart_tx - are there enough resources to restart a Tx queue? * @q: the Tx queue @@ -1586,6 +1595,23 @@ t3_encap(struct sge_qset *qs, struct mbuf **m) return (0); } +#ifdef NETDUMP +int +cxgb_netdump_encap(struct sge_qset *qs, struct mbuf **m) +{ + int error; + + error = t3_encap(qs, m); + if (error == 0) + check_ring_tx_db(qs->port->adapter, &qs->txq[TXQ_ETH], 1); + else if (*m != NULL) { + m_freem(*m); + *m = NULL; + } + return (error); +} +#endif + void cxgb_tx_watchdog(void *arg) { @@ -3014,6 +3040,14 @@ process_responses_gts(adapter_t *adap, struct sge_rspq return (work); } +#ifdef NETDUMP +int +cxgb_netdump_poll_rx(adapter_t *adap, struct sge_qset *qs) +{ + + return (process_responses_gts(adap, &qs->rspq)); +} +#endif /* * Interrupt handler for legacy INTx interrupts for T3B-based cards.