From owner-svn-src-user@freebsd.org Mon Apr 9 21:37:41 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 36069F80D8A for ; Mon, 9 Apr 2018 21:37:41 +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 D66CB69BA6; Mon, 9 Apr 2018 21:37:40 +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 D15142447E; Mon, 9 Apr 2018 21:37:40 +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 w39LbeKY082191; Mon, 9 Apr 2018 21:37:40 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w39Lbd3V082178; Mon, 9 Apr 2018 21:37:39 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201804092137.w39Lbd3V082178@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 9 Apr 2018 21:37:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r332338 - in user/markj/netdump/sys: dev/alc dev/bge dev/bxe dev/cxgb dev/mlx4/mlx4_en dev/re dev/virtio/network kern net netinet/netdump sys X-SVN-Group: user X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in user/markj/netdump/sys: dev/alc dev/bge dev/bxe dev/cxgb dev/mlx4/mlx4_en dev/re dev/virtio/network kern net netinet/netdump sys X-SVN-Commit-Revision: 332338 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: Mon, 09 Apr 2018 21:37:41 -0000 Author: markj Date: Mon Apr 9 21:37:39 2018 New Revision: 332338 URL: https://svnweb.freebsd.org/changeset/base/332338 Log: Query the driver for its rx buffer size rather than forcing MCLBYTES. Reinitialize the netdump mbuf pool from the generic SIOCSIFMTU handler. Modified: user/markj/netdump/sys/dev/alc/if_alc.c user/markj/netdump/sys/dev/bge/if_bge.c user/markj/netdump/sys/dev/bxe/bxe.c user/markj/netdump/sys/dev/cxgb/cxgb_main.c user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c user/markj/netdump/sys/dev/re/if_re.c user/markj/netdump/sys/dev/virtio/network/if_vtnet.c user/markj/netdump/sys/kern/kern_mbuf.c user/markj/netdump/sys/net/if.c user/markj/netdump/sys/net/iflib.c user/markj/netdump/sys/netinet/netdump/netdump.h user/markj/netdump/sys/netinet/netdump/netdump_client.c user/markj/netdump/sys/sys/mbuf.h Modified: user/markj/netdump/sys/dev/alc/if_alc.c ============================================================================== --- user/markj/netdump/sys/dev/alc/if_alc.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/alc/if_alc.c Mon Apr 9 21:37:39 2018 (r332338) @@ -4658,25 +4658,20 @@ sysctl_hw_alc_int_mod(SYSCTL_HANDLER_ARGS) #ifdef NETDUMP static void -alc_netdump_init(struct ifnet *ifp __unused, int *nrxr) +alc_netdump_init(struct ifnet *ifp, int *nrxr, int *clsize) { + struct alc_softc *sc; + sc = if_getsoftc(ifp); + KASSERT(sc->alc_buf_size <= MCLBYTES, ("incorrect cluster size")); + *nrxr = ALC_RX_RING_CNT; + *clsize = MCLBYTES; } static void -alc_netdump_event(struct ifnet *ifp, enum netdump_ev event) +alc_netdump_event(struct ifnet *ifp __unused, enum netdump_ev event __unused) { - struct alc_softc *sc; - - sc = if_getsoftc(ifp); - switch (event) { - case NETDUMP_START: - sc->alc_buf_size = imin(sc->alc_buf_size, MCLBYTES); - break; - default: - break; - } } static int Modified: user/markj/netdump/sys/dev/bge/if_bge.c ============================================================================== --- user/markj/netdump/sys/dev/bge/if_bge.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/bge/if_bge.c Mon Apr 9 21:37:39 2018 (r332338) @@ -6811,27 +6811,25 @@ bge_get_counter(if_t ifp, ift_counter cnt) #ifdef NETDUMP static void -bge_netdump_init(if_t ifp, int *nrxr) +bge_netdump_init(if_t ifp, int *nrxr, int *clsize) { struct bge_softc *sc; sc = if_getsoftc(ifp); + BGE_LOCK(sc); *nrxr = sc->bge_return_ring_cnt; + if ((sc->bge_flags & BGE_FLAG_JUMBO_STD) != 0 && + (if_getmtu(sc->bge_ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN + + ETHER_VLAN_ENCAP_LEN > (MCLBYTES - ETHER_ALIGN))) + *clsize = MJUM9BYTES; + else + *clsize = MCLBYTES; + BGE_UNLOCK(sc); } static void -bge_netdump_event(if_t ifp, enum netdump_ev event) +bge_netdump_event(if_t ifp __unused, enum netdump_ev event __unused) { - struct bge_softc *sc; - - sc = if_getsoftc(ifp); - switch (event) { - case NETDUMP_START: - sc->bge_flags &= ~BGE_FLAG_JUMBO_STD; - break; - default: - break; - } } static int Modified: user/markj/netdump/sys/dev/bxe/bxe.c ============================================================================== --- user/markj/netdump/sys/dev/bxe/bxe.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/bxe/bxe.c Mon Apr 9 21:37:39 2018 (r332338) @@ -19172,12 +19172,15 @@ bxe_eioctl(struct cdev *dev, u_long cmd, caddr_t data, #ifdef NETDUMP static void -bxe_netdump_init(struct ifnet *ifp, int *nrxr) +bxe_netdump_init(struct ifnet *ifp, int *nrxr, int *clsize) { struct bxe_softc *sc; sc = if_getsoftc(ifp); + BXE_CORE_LOCK(sc); *nrxr = sc->num_queues; + *clsize = sc->fp[0].mbuf_alloc_size; + BXE_CORE_UNLOCK(sc); } static void Modified: user/markj/netdump/sys/dev/cxgb/cxgb_main.c ============================================================================== --- user/markj/netdump/sys/dev/cxgb/cxgb_main.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/cxgb/cxgb_main.c Mon Apr 9 21:37:39 2018 (r332338) @@ -3587,10 +3587,17 @@ cxgbc_mod_event(module_t mod, int cmd, void *arg) #ifdef NETDUMP static void -cxgb_netdump_init(struct ifnet *ifp, int *nrxr) +cxgb_netdump_init(struct ifnet *ifp, int *nrxr, int *clsize) { + struct port_info *pi; + adapter_t *adap; + pi = if_getsoftc(ifp); + adap = pi->adapter; + ADAPTER_LOCK(adap); *nrxr = SGE_QSETS; + *clsize = adap->sge.qs[0].fl[1].buf_size; + ADAPTER_UNLOCK(adap); } static void @@ -3607,7 +3614,7 @@ cxgb_netdump_event(struct ifnet *ifp, enum netdump_ev /* Need to reinit after netdump_mbuf_dump(). */ qs->fl[0].zone = zone_pack; - qs->fl[1].zone = zone_pack; + qs->fl[1].zone = zone_clust; qs->lro.enabled = 0; } } Modified: user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c ============================================================================== --- user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c Mon Apr 9 21:37:39 2018 (r332338) @@ -2886,12 +2886,15 @@ static void mlx4_en_sysctl_stat(struct mlx4_en_priv *p #ifdef NETDUMP static void -mlx4_en_netdump_init(struct ifnet *dev, int *nrxr) +mlx4_en_netdump_init(struct ifnet *dev, int *nrxr, int *clsize) { struct mlx4_en_priv *priv; priv = if_getsoftc(dev); + mutex_lock(&priv->mdev->state_lock); *nrxr = priv->rx_ring_num; + *clsize = priv->rx_mb_size; + mutex_unlock(&priv->mdev->state_lock); } static void Modified: user/markj/netdump/sys/dev/re/if_re.c ============================================================================== --- user/markj/netdump/sys/dev/re/if_re.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/re/if_re.c Mon Apr 9 21:37:39 2018 (r332338) @@ -4095,27 +4095,21 @@ sysctl_hw_re_int_mod(SYSCTL_HANDLER_ARGS) #ifdef NETDUMP static void -re_netdump_init(struct ifnet *ifp, int *nrxr) +re_netdump_init(struct ifnet *ifp, int *nrxr, int *clsize) { struct rl_softc *sc; sc = if_getsoftc(ifp); + RL_LOCK(sc); *nrxr = sc->rl_ldata.rl_rx_desc_cnt; + *clsize = (ifp->if_mtu > RL_MTU && + (sc->rl_flags & RL_FLAG_JUMBOV2) != 0) ? MJUM9BYTES : MCLBYTES; + RL_UNLOCK(sc); } static void -re_netdump_event(struct ifnet *ifp, enum netdump_ev event) +re_netdump_event(struct ifnet *ifp __unused, enum netdump_ev event __unused) { - struct rl_softc *sc; - - sc = if_getsoftc(ifp); - switch (event) { - case NETDUMP_START: - sc->rl_flags &= ~RL_FLAG_JUMBOV2; - break; - default: - break; - } } static int Modified: user/markj/netdump/sys/dev/virtio/network/if_vtnet.c ============================================================================== --- user/markj/netdump/sys/dev/virtio/network/if_vtnet.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/dev/virtio/network/if_vtnet.c Mon Apr 9 21:37:39 2018 (r332338) @@ -3984,12 +3984,16 @@ vtnet_tunable_int(struct vtnet_softc *sc, const char * #ifdef NETDUMP static void -vtnet_netdump_init(struct ifnet *ifp, int *nrxr) +vtnet_netdump_init(struct ifnet *ifp, int *nrxr, int *clsize) { struct vtnet_softc *sc; sc = if_getsoftc(ifp); + + VTNET_CORE_LOCK(sc); *nrxr = sc->vtnet_max_vq_pairs; + *clsize = sc->vtnet_rx_clsize; + VTNET_CORE_UNLOCK(sc); /* * We need to allocate from this zone in the transmit path, so ensure @@ -4002,18 +4006,8 @@ vtnet_netdump_init(struct ifnet *ifp, int *nrxr) } static void -vtnet_netdump_event(struct ifnet *ifp, enum netdump_ev event) +vtnet_netdump_event(struct ifnet *ifp __unused, enum netdump_ev event __unused) { - struct vtnet_softc *sc; - - sc = if_getsoftc(ifp); - switch (event) { - case NETDUMP_START: - sc->vtnet_rx_clsize = MCLBYTES; - break; - default: - break; - } } static int Modified: user/markj/netdump/sys/kern/kern_mbuf.c ============================================================================== --- user/markj/netdump/sys/kern/kern_mbuf.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/kern/kern_mbuf.c Mon Apr 9 21:37:39 2018 (r332338) @@ -381,9 +381,12 @@ mbuf_init(void *dummy) SYSINIT(mbuf, SI_SUB_MBUF, SI_ORDER_FIRST, mbuf_init, NULL); #ifdef NETDUMP -static struct mbufq nd_mbufq; -static struct mbufq nd_clustq; +static struct mbufq nd_mbufq = + { STAILQ_HEAD_INITIALIZER(nd_mbufq.mq_head), 0, INT_MAX }; +static struct mbufq nd_clustq = + { STAILQ_HEAD_INITIALIZER(nd_clustq.mq_head), 0, INT_MAX }; +static int nd_clsize; static uma_zone_t nd_zone_mbuf; static uma_zone_t nd_zone_clust; static uma_zone_t nd_zone_pack; @@ -402,6 +405,7 @@ nd_buf_import(void *arg, void **store, int count, int m = mbufq_dequeue(q); if (m == NULL) break; + trash_init(m, q == &nd_mbufq ? MSIZE : nd_clsize, flags); store[i] = m; } return (i); @@ -439,7 +443,6 @@ nd_pack_import(void *arg __unused, void **store, int c m_free(m); break; } - mb_ctor_clust(clust, MCLBYTES, m, 0); store[i] = m; } @@ -461,8 +464,54 @@ nd_pack_release(void *arg __unused, void **store, int } } +void +netdump_mbuf_drain(void) +{ + struct mbuf *m; + void *item; + + if (nd_zone_mbuf != NULL) { + uma_zdestroy(nd_zone_mbuf); + nd_zone_mbuf = NULL; + } + if (nd_zone_clust != NULL) { + uma_zdestroy(nd_zone_clust); + nd_zone_clust = NULL; + } + if (nd_zone_pack != NULL) { + uma_zdestroy(nd_zone_pack); + nd_zone_pack = NULL; + } + + while ((m = mbufq_dequeue(&nd_mbufq)) != NULL) + m_free(m); + while ((item = mbufq_dequeue(&nd_clustq)) != NULL) + uma_zfree(m_getzone(nd_clsize), item); +} + /* - * Initialize zones used to cache netdump packet buffers. At panic-time, we + * Callback invoked immediately prior to starting a netdump. + */ +void +netdump_mbuf_dump(void) +{ + + /* + * All cluster zones return buffers of the size requested by the + * drivers. It's up to the driver to reinitialize the zones if the + * MTU of a netdump-enabled interface changes. + */ + printf("netdump: overwriting mbuf zone pointers\n"); + zone_mbuf = nd_zone_mbuf; + zone_clust = nd_zone_clust; + zone_pack = nd_zone_pack; + zone_jumbop = nd_zone_clust; + zone_jumbo9 = nd_zone_clust; + zone_jumbo16 = nd_zone_clust; +} + +/* + * (Re-)Initialize zones used to cache netdump packet buffers. At panic-time, we * swap out the regular mbuf/cluster zones with these, ensuring that drivers and * the protocol code can allocate buffers from a preallocated pool, rather than * relying on memory allocation to succeed after a panic. @@ -471,14 +520,15 @@ nd_pack_release(void *arg __unused, void **store, int * purpose of caching clusters, we treat them as mbufs. */ void -netdump_mbuf_init(int nmbuf, int nclust) +netdump_mbuf_reinit(int nmbuf, int nclust, int clsize) { struct mbuf *m; void *item; - mbufq_init(&nd_mbufq, INT_MAX); - mbufq_init(&nd_clustq, INT_MAX); + netdump_mbuf_drain(); + nd_clsize = clsize; + nd_zone_mbuf = uma_zcache_create("netdump_" MBUF_MEM_NAME, MSIZE, mb_ctor_mbuf, mb_dtor_mbuf, #ifdef INVARIANTS @@ -490,7 +540,7 @@ netdump_mbuf_init(int nmbuf, int nclust) &nd_mbufq, UMA_ZONE_NOBUCKET); nd_zone_clust = uma_zcache_create("netdump_" MBUF_CLUSTER_MEM_NAME, - MCLBYTES, mb_ctor_clust, + clsize, mb_ctor_clust, #ifdef INVARIANTS trash_dtor, trash_init, trash_fini, #else @@ -509,59 +559,9 @@ netdump_mbuf_init(int nmbuf, int nclust) uma_zfree(nd_zone_mbuf, m); } while (nclust-- > 0) { - item = uma_zalloc(zone_clust, M_WAITOK); + item = uma_zalloc(m_getzone(nd_clsize), M_WAITOK); uma_zfree(nd_zone_clust, item); } -} - -/* - * Free preallocated mbufs and clusters and destroy netdump cache zones. - */ -void -netdump_mbuf_drain(void) -{ - struct mbuf *m; - void *item; - - while ((m = mbufq_dequeue(&nd_mbufq)) != NULL) - m_free(m); - while ((item = mbufq_dequeue(&nd_clustq)) != NULL) - uma_zfree(zone_clust, item); - - if (nd_zone_mbuf != NULL) { - uma_zdestroy(nd_zone_mbuf); - nd_zone_mbuf = NULL; - } - if (nd_zone_clust != NULL) { - uma_zdestroy(nd_zone_clust); - nd_zone_clust = NULL; - } - if (nd_zone_pack != NULL) { - uma_zdestroy(nd_zone_pack); - nd_zone_pack = NULL; - } -} - -/* - * Callback invoked immediately prior to starting a netdump. - */ -void -netdump_mbuf_dump(void) -{ - - /* - * All cluster zones return 2KB buffers. It's up to the per-driver - * netdump hooks to ensure that no attempts are made to use larger - * clusters. netdump ACKs fit easily within an mbuf, let alone a 2KB - * cluster, so there's no need to preallocate larger buffers. - */ - printf("netdump: overwriting mbuf zone pointers\n"); - zone_mbuf = nd_zone_mbuf; - zone_clust = nd_zone_clust; - zone_pack = nd_zone_pack; - zone_jumbop = nd_zone_clust; - zone_jumbo9 = nd_zone_clust; - zone_jumbo16 = nd_zone_clust; } #endif /* NETDUMP */ Modified: user/markj/netdump/sys/net/if.c ============================================================================== --- user/markj/netdump/sys/net/if.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/net/if.c Mon Apr 9 21:37:39 2018 (r332338) @@ -88,6 +88,7 @@ #include #ifdef INET #include +#include #endif /* INET */ #ifdef INET6 #include @@ -2707,6 +2708,9 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, if (error == 0) { getmicrotime(&ifp->if_lastchange); rt_ifmsg(ifp); +#ifdef INET + NETDUMP_REINIT(ifp); +#endif } /* * If the link MTU changed, do network layer specific procedure. Modified: user/markj/netdump/sys/net/iflib.c ============================================================================== --- user/markj/netdump/sys/net/iflib.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/net/iflib.c Mon Apr 9 21:37:39 2018 (r332338) @@ -5974,12 +5974,15 @@ iflib_fixup_rx(struct mbuf *m) #ifdef NETDUMP static void -iflib_netdump_init(struct ifnet *ifp, int *nrxr) +iflib_netdump_init(struct ifnet *ifp, int *nrxr, int *clsize) { if_ctx_t ctx; ctx = if_getsoftc(ifp); + CTX_LOCK(ctx); *nrxr = NRXQSETS(ctx); + *clsize = ctx->ifc_rxqs[0].ifr_fl->ifl_buf_size; + CTX_UNLOCK(ctx); } static void @@ -5987,15 +5990,22 @@ iflib_netdump_event(struct ifnet *ifp, enum netdump_ev { if_ctx_t ctx; if_softc_ctx_t scctx; - int i; + iflib_fl_t fl; + iflib_rxq_t rxq; + int i, j; ctx = if_getsoftc(ifp); scctx = &ctx->ifc_softc_ctx; switch (event) { case NETDUMP_START: - for (i = 0; i < scctx->isc_nrxqsets; i++) - ctx->ifc_rxqs[i].ifr_fl->ifl_buf_size = MCLBYTES; + for (i = 0; i < scctx->isc_nrxqsets; i++) { + rxq = &ctx->ifc_rxqs[i]; + for (j = 0; j < rxq->ifr_nfl; j++) { + fl = rxq->ifr_fl; + fl->ifl_zone = m_getzone(fl->ifl_buf_size); + } + } iflib_no_tx_batch = 1; break; default: Modified: user/markj/netdump/sys/netinet/netdump/netdump.h ============================================================================== --- user/markj/netdump/sys/netinet/netdump/netdump.h Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/netinet/netdump/netdump.h Mon Apr 9 21:37:39 2018 (r332338) @@ -86,7 +86,9 @@ enum netdump_ev { struct ifnet; struct mbuf; -typedef void netdump_init_t(struct ifnet *, int *nrxr); +void netdump_reinit(struct ifnet *); + +typedef void netdump_init_t(struct ifnet *, int *nrxr, int *clsize); typedef void netdump_event_t(struct ifnet *, enum netdump_ev); typedef int netdump_transmit_t(struct ifnet *, struct mbuf *); typedef int netdump_poll_t(struct ifnet *, int); @@ -111,12 +113,15 @@ struct netdump_methods { .nd_poll = driver##_netdump_poll, \ } +#define NETDUMP_REINIT(ifp) netdump_reinit(ifp) + #define NETDUMP_SET(ifp, driver) \ (ifp)->if_netdump_methods = &driver##_netdump_methods #else /* !NETDUMP */ #define NETDUMP_DEFINE(driver) +#define NETDUMP_REINIT(ifp) #define NETDUMP_SET(ifp, driver) #endif /* NETDUMP */ Modified: user/markj/netdump/sys/netinet/netdump/netdump_client.c ============================================================================== --- user/markj/netdump/sys/netinet/netdump/netdump_client.c Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/netinet/netdump/netdump_client.c Mon Apr 9 21:37:39 2018 (r332338) @@ -1048,7 +1048,6 @@ static int netdump_configure(struct netdump_conf *conf) { struct ifnet *ifp; - int nmbuf, nclust, nrxr; IFNET_RLOCK_NOSLEEP(); TAILQ_FOREACH(ifp, &V_ifnet, if_link) { @@ -1067,7 +1066,27 @@ netdump_configure(struct netdump_conf *conf) return (1); } - ifp->if_netdump_methods->nd_init(ifp, &nrxr); + nd_ifp = ifp; + netdump_reinit(ifp); + memcpy(&nd_conf, conf, sizeof(nd_conf)); + nd_enabled = 1; + return (0); +} + +/* + * Reinitialize the mbuf pool used by drivers while dumping. This is called + * from the generic ioctl handler for SIOCSIFMTU after the driver has + * reconfigured itself. + */ +void +netdump_reinit(struct ifnet *ifp) +{ + int clsize, nmbuf, nclust, nrxr; + + if (ifp != nd_ifp) + return; + + ifp->if_netdump_methods->nd_init(ifp, &nrxr, &clsize); KASSERT(nrxr > 0, ("invalid receive ring count %d", nrxr)); /* @@ -1076,12 +1095,7 @@ netdump_configure(struct netdump_conf *conf) */ nmbuf = NETDUMP_MAX_IN_FLIGHT * (4 + nrxr); nclust = NETDUMP_MAX_IN_FLIGHT * nrxr; - netdump_mbuf_init(nmbuf, nclust); - - nd_ifp = ifp; - memcpy(&nd_conf, conf, sizeof(nd_conf)); - nd_enabled = 1; - return (0); + netdump_mbuf_reinit(nmbuf, nclust, clsize); } /* Modified: user/markj/netdump/sys/sys/mbuf.h ============================================================================== --- user/markj/netdump/sys/sys/mbuf.h Mon Apr 9 21:16:28 2018 (r332337) +++ user/markj/netdump/sys/sys/mbuf.h Mon Apr 9 21:37:39 2018 (r332338) @@ -1375,9 +1375,9 @@ mbuf_tstmp2timespec(struct mbuf *m, struct timespec *t #ifdef NETDUMP /* Invoked from the netdump client code. */ -void netdump_mbuf_init(int, int); void netdump_mbuf_drain(void); void netdump_mbuf_dump(void); +void netdump_mbuf_reinit(int nmbuf, int nclust, int clsize); #endif #endif /* _KERNEL */