From owner-svn-src-head@freebsd.org Thu Jan 30 20:32:44 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4B4AB1FE0EE for ; Thu, 30 Jan 2020 20:32:44 +0000 (UTC) (envelope-from jroberson@jroberson.net) Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 487sVM3Nf7z4cfG for ; Thu, 30 Jan 2020 20:32:43 +0000 (UTC) (envelope-from jroberson@jroberson.net) Received: by mail-pg1-x542.google.com with SMTP id 6so2261678pgk.0 for ; Thu, 30 Jan 2020 12:32:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jroberson-net.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=05XS7HCYlQY4MGtmWVVxOSJ4dvhLdfnndVkUErdUOZo=; b=NwZGl70yNtTM+o7Ssxp27UepD+ykpFumQYj9UJB1xi0fJERt4JMjaZfXH8t2Or2xnX qifa2D2UBSVv9Eq+zGh/wloS8+xP1jjdnNssTb3umT09QDw1fNv4iVu+/I0Ch49TXUOY NLDOAvXzrD8pIKxHjyT2D9h6HetNmBDHv6pftS2jSukYwmx4owRBEpHGLcCo5OMjX/C/ QPqSRd+rQBzucU71u6CLQlFuTg7vd5/agM+xmf9dCR0xSp6mHNOInqIEbYcMsEwDpEDp A53mJeIkEokfbkFDiU9cWOjwmXHV4/YYunbj+nfeAg5lHlvA+7eh163xK0dshP1UQ8ck bEzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=05XS7HCYlQY4MGtmWVVxOSJ4dvhLdfnndVkUErdUOZo=; b=FoDNWJCTG4NMgRqZwrs8EiPwK6BJj4KVVcvSBfVIyABSSTdfVQE+HM6v5SKyuyps8r 1OCBw9XrPQ8+9Vc/H55SlaeLvqZiHRp8crYjVCRxIty/Bxkf1OGkPlchb/Df6vJxRamr qa77aGn8VvtevoOLTMCrYSbeSX/mbM3RgrUGDciHbjr4zylTbgVBML0FnpgqmHe5oN0B XHZsQKfdhcYzUiNLZkPGVkQC9mjG0pH/55GJ3jsrDQ4sAotJG087O6Kxm+DN/LXxwsDC FDYXvLUb0Ae7aIlUZtxEop4Bw5QgZzyRhxGAComLKK2bXv/kMXk1A4UsvJkBG7sWCNVb 74xQ== X-Gm-Message-State: APjAAAVMFJXs2xStQXC5dcHSmHJSyzZPhR/Hbl7ySElLHmVANeicCqHF Dsk3/T6SMaF2T/mav0+2hnRtbQ== X-Google-Smtp-Source: APXvYqx0RDT0uPDoWhmZGieaXt+qNeOzCCINKV88pJVaemadadtiF4S9ct5NvhXPBett6KGcUUtAaQ== X-Received: by 2002:a62:e912:: with SMTP id j18mr6809933pfh.4.1580416361039; Thu, 30 Jan 2020 12:32:41 -0800 (PST) Received: from rrcs-76-81-105-82.west.biz.rr.com (rrcs-76-81-105-82.west.biz.rr.com. [76.81.105.82]) by smtp.gmail.com with ESMTPSA id 70sm7628645pgf.90.2020.01.30.12.32.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Jan 2020 12:32:40 -0800 (PST) Date: Thu, 30 Jan 2020 10:32:38 -1000 (HST) From: Jeff Roberson X-X-Sender: jroberson@desktop To: Hans Petter Selasky cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r357291 - in head/sys/dev: bwi bwn ipw iwi iwm iwn malo mwl ral rtwn/pci wi wpi wtap In-Reply-To: <202001301028.00UAS1s1063130@repo.freebsd.org> Message-ID: References: <202001301028.00UAS1s1063130@repo.freebsd.org> User-Agent: Alpine 2.21.9999 (BSF 287 2018-06-16) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed X-Rspamd-Queue-Id: 487sVM3Nf7z4cfG X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=jroberson-net.20150623.gappssmtp.com header.s=20150623 header.b=NwZGl70y; dmarc=none; spf=none (mx1.freebsd.org: domain of jroberson@jroberson.net has no SPF policy when checking 2607:f8b0:4864:20::542) smtp.mailfrom=jroberson@jroberson.net X-Spamd-Result: default: False [-2.71 / 15.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_DKIM_ALLOW(-0.20)[jroberson-net.20150623.gappssmtp.com:s=20150623]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[svn-src-head@freebsd.org]; DMARC_NA(0.00)[jroberson.net]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[jroberson-net.20150623.gappssmtp.com:+]; RCVD_IN_DNSWL_NONE(0.00)[2.4.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.4.6.8.4.0.b.8.f.7.0.6.2.list.dnswl.org : 127.0.5.0]; R_SPF_NA(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; MID_RHS_NOT_FQDN(0.50)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; RCVD_TLS_ALL(0.00)[]; IP_SCORE(-0.91)[ip: (-0.67), ipnet: 2607:f8b0::/32(-2.03), asn: 15169(-1.78), country: US(-0.05)] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jan 2020 20:32:44 -0000 On Thu, 30 Jan 2020, Hans Petter Selasky wrote: > Author: hselasky > Date: Thu Jan 30 10:28:01 2020 > New Revision: 357291 > URL: https://svnweb.freebsd.org/changeset/base/357291 > > Log: > Widen EPOCH(9) usage in PCI WLAN drivers. > > Make sure all occurrences of ieee80211_input_xxx() in sys/dev are > covered by a network epoch section. Do not depend on the interrupt > handler nor any taskqueues being in a network epoch section. > > This patch should unbreak the PCI WLAN drivers after r357004. > > Pointy hat: glebius@ I understand your frustration at the bugs introduced by this change but the passive aggressive "pointy hat" is not appropriate. It is sufficient to note the revision. Jeff > Sponsored by: Mellanox Technologies > > Modified: > head/sys/dev/bwi/if_bwi.c > head/sys/dev/bwn/if_bwn.c > head/sys/dev/ipw/if_ipw.c > head/sys/dev/iwi/if_iwi.c > head/sys/dev/iwm/if_iwm.c > head/sys/dev/iwn/if_iwn.c > head/sys/dev/malo/if_malo.c > head/sys/dev/mwl/if_mwl.c > head/sys/dev/ral/rt2560.c > head/sys/dev/ral/rt2661.c > head/sys/dev/ral/rt2860.c > head/sys/dev/rtwn/pci/rtwn_pci_rx.c > head/sys/dev/wi/if_wi.c > head/sys/dev/wpi/if_wpi.c > head/sys/dev/wtap/if_wtap.c > > Modified: head/sys/dev/bwi/if_bwi.c > ============================================================================== > --- head/sys/dev/bwi/if_bwi.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/bwi/if_bwi.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1506,6 +1506,7 @@ bwi_stop_locked(struct bwi_softc *sc, int statechg) > void > bwi_intr(void *xsc) > { > + struct epoch_tracker et; > struct bwi_softc *sc = xsc; > struct bwi_mac *mac; > uint32_t intr_status; > @@ -1625,7 +1626,9 @@ bwi_intr(void *xsc) > device_printf(sc->sc_dev, "intr noise\n"); > > if (txrx_intr_status[0] & BWI_TXRX_INTR_RX) { > + NET_EPOCH_ENTER(et); > rx_data = sc->sc_rxeof(sc); > + NET_EPOCH_EXIT(et); > if (sc->sc_flags & BWI_F_STOP) { > BWI_UNLOCK(sc); > return; > > Modified: head/sys/dev/bwn/if_bwn.c > ============================================================================== > --- head/sys/dev/bwn/if_bwn.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/bwn/if_bwn.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -5072,6 +5072,7 @@ bwn_intr(void *arg) > static void > bwn_intrtask(void *arg, int npending) > { > + struct epoch_tracker et; > struct bwn_mac *mac = arg; > struct bwn_softc *sc = mac->mac_sc; > uint32_t merged = 0; > @@ -5132,6 +5133,7 @@ bwn_intrtask(void *arg, int npending) > if (mac->mac_reason_intr & BWN_INTR_NOISESAMPLE_OK) > bwn_intr_noise(mac); > > + NET_EPOCH_ENTER(et); > if (mac->mac_flags & BWN_MAC_FLAG_DMA) { > if (mac->mac_reason[0] & BWN_DMAINTR_RX_DONE) { > bwn_dma_rx(mac->mac_method.dma.rx); > @@ -5139,6 +5141,7 @@ bwn_intrtask(void *arg, int npending) > } > } else > rx = bwn_pio_rx(&mac->mac_method.pio.rx); > + NET_EPOCH_EXIT(et); > > KASSERT(!(mac->mac_reason[1] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); > KASSERT(!(mac->mac_reason[2] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); > > Modified: head/sys/dev/ipw/if_ipw.c > ============================================================================== > --- head/sys/dev/ipw/if_ipw.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/ipw/if_ipw.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1159,6 +1159,7 @@ static void > ipw_rx_data_intr(struct ipw_softc *sc, struct ipw_status *status, > struct ipw_soft_bd *sbd, struct ipw_soft_buf *sbuf) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct mbuf *mnew, *m; > struct ieee80211_node *ni; > @@ -1230,11 +1231,13 @@ ipw_rx_data_intr(struct ipw_softc *sc, struct ipw_stat > > IPW_UNLOCK(sc); > ni = ieee80211_find_rxnode(ic, mtod(m, struct ieee80211_frame_min *)); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void) ieee80211_input(ni, m, rssi - nf, nf); > ieee80211_free_node(ni); > } else > (void) ieee80211_input_all(ic, m, rssi - nf, nf); > + NET_EPOCH_EXIT(et); > IPW_LOCK(sc); > > bus_dmamap_sync(sc->rbd_dmat, sc->rbd_map, BUS_DMASYNC_PREWRITE); > > Modified: head/sys/dev/iwi/if_iwi.c > ============================================================================== > --- head/sys/dev/iwi/if_iwi.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/iwi/if_iwi.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1181,6 +1181,7 @@ static void > iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_data *data, int i, > struct iwi_frame *frame) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct mbuf *mnew, *m; > struct ieee80211_node *ni; > @@ -1270,11 +1271,13 @@ iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_dat > IWI_UNLOCK(sc); > > ni = ieee80211_find_rxnode(ic, mtod(m, struct ieee80211_frame_min *)); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > type = ieee80211_input(ni, m, rssi, nf); > ieee80211_free_node(ni); > } else > type = ieee80211_input_all(ic, m, rssi, nf); > + NET_EPOCH_EXIT(et); > > IWI_LOCK(sc); > if (sc->sc_softled) { > > Modified: head/sys/dev/iwm/if_iwm.c > ============================================================================== > --- head/sys/dev/iwm/if_iwm.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/iwm/if_iwm.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -3465,6 +3465,7 @@ static bool > iwm_rx_mpdu(struct iwm_softc *sc, struct mbuf *m, uint32_t offset, > bool stolen) > { > + struct epoch_tracker et; > struct ieee80211com *ic; > struct ieee80211_frame *wh; > struct ieee80211_node *ni; > @@ -3484,6 +3485,8 @@ iwm_rx_mpdu(struct iwm_softc *sc, struct mbuf *m, uint > ni = ieee80211_find_rxnode(ic, (struct ieee80211_frame_min *)wh); > > IWM_UNLOCK(sc); > + > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > IWM_DPRINTF(sc, IWM_DEBUG_RECV, "input m %p\n", m); > ieee80211_input_mimo(ni, m); > @@ -3492,6 +3495,8 @@ iwm_rx_mpdu(struct iwm_softc *sc, struct mbuf *m, uint > IWM_DPRINTF(sc, IWM_DEBUG_RECV, "inputall m %p\n", m); > ieee80211_input_mimo_all(ic, m); > } > + NET_EPOCH_EXIT(et); > + > IWM_LOCK(sc); > > return true; > > Modified: head/sys/dev/iwn/if_iwn.c > ============================================================================== > --- head/sys/dev/iwn/if_iwn.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/iwn/if_iwn.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -3031,6 +3031,7 @@ static void > iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, > struct iwn_rx_data *data) > { > + struct epoch_tracker et; > struct iwn_ops *ops = &sc->ops; > struct ieee80211com *ic = &sc->sc_ic; > struct iwn_rx_ring *ring = &sc->rxq; > @@ -3190,6 +3191,7 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc * > } > > IWN_UNLOCK(sc); > + NET_EPOCH_ENTER(et); > > /* Send the frame to the 802.11 layer. */ > if (ni != NULL) { > @@ -3201,6 +3203,7 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc * > } else > (void)ieee80211_input_all(ic, m, rssi - nf, nf); > > + NET_EPOCH_EXIT(et); > IWN_LOCK(sc); > > DPRINTF(sc, IWN_DEBUG_TRACE, "->%s: end\n",__func__); > > Modified: head/sys/dev/malo/if_malo.c > ============================================================================== > --- head/sys/dev/malo/if_malo.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/malo/if_malo.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1939,6 +1939,7 @@ malo_set_channel(struct ieee80211com *ic) > static void > malo_rx_proc(void *arg, int npending) > { > + struct epoch_tracker et; > struct malo_softc *sc = arg; > struct ieee80211com *ic = &sc->malo_ic; > struct malo_rxbuf *bf; > @@ -2071,11 +2072,13 @@ malo_rx_proc(void *arg, int npending) > /* dispatch */ > ni = ieee80211_find_rxnode(ic, > (struct ieee80211_frame_min *)wh); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void) ieee80211_input(ni, m, rssi, ds->nf); > ieee80211_free_node(ni); > } else > (void) ieee80211_input_all(ic, m, rssi, ds->nf); > + NET_EPOCH_EXIT(et); > rx_next: > /* NB: ignore ENOMEM so we process more descriptors */ > (void) malo_rxbuf_init(sc, bf); > > Modified: head/sys/dev/mwl/if_mwl.c > ============================================================================== > --- head/sys/dev/mwl/if_mwl.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/mwl/if_mwl.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -2608,6 +2608,7 @@ cvtrssi(uint8_t ssi) > static void > mwl_rx_proc(void *arg, int npending) > { > + struct epoch_tracker et; > struct mwl_softc *sc = arg; > struct ieee80211com *ic = &sc->sc_ic; > struct mwl_rxbuf *bf; > @@ -2796,6 +2797,8 @@ mwl_rx_proc(void *arg, int npending) > /* dispatch */ > ni = ieee80211_find_rxnode(ic, > (const struct ieee80211_frame_min *) wh); > + > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > mn = MWL_NODE(ni); > #ifdef MWL_ANT_INFO_SUPPORT > @@ -2811,6 +2814,7 @@ mwl_rx_proc(void *arg, int npending) > ieee80211_free_node(ni); > } else > (void) ieee80211_input_all(ic, m, rssi, nf); > + NET_EPOCH_EXIT(et); > rx_next: > /* NB: ignore ENOMEM so we process more descriptors */ > (void) mwl_rxbuf_init(sc, bf); > > Modified: head/sys/dev/ral/rt2560.c > ============================================================================== > --- head/sys/dev/ral/rt2560.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/ral/rt2560.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1086,6 +1086,7 @@ rt2560_prio_intr(struct rt2560_softc *sc) > static void > rt2560_decryption_intr(struct rt2560_softc *sc) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct rt2560_rx_desc *desc; > struct rt2560_rx_data *data; > @@ -1196,12 +1197,13 @@ rt2560_decryption_intr(struct rt2560_softc *sc) > wh = mtod(m, struct ieee80211_frame *); > ni = ieee80211_find_rxnode(ic, > (struct ieee80211_frame_min *)wh); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void) ieee80211_input(ni, m, rssi, nf); > ieee80211_free_node(ni); > } else > (void) ieee80211_input_all(ic, m, rssi, nf); > - > + NET_EPOCH_EXIT(et); > RAL_LOCK(sc); > sc->sc_flags &= ~RT2560_F_INPUT_RUNNING; > skip: desc->flags = htole32(RT2560_RX_BUSY); > > Modified: head/sys/dev/ral/rt2661.c > ============================================================================== > --- head/sys/dev/ral/rt2661.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/ral/rt2661.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -958,6 +958,7 @@ rt2661_tx_dma_intr(struct rt2661_softc *sc, struct rt2 > static void > rt2661_rx_intr(struct rt2661_softc *sc) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct rt2661_rx_desc *desc; > struct rt2661_rx_data *data; > @@ -1074,11 +1075,13 @@ rt2661_rx_intr(struct rt2661_softc *sc) > /* send the frame to the 802.11 layer */ > ni = ieee80211_find_rxnode(ic, > (struct ieee80211_frame_min *)wh); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void) ieee80211_input(ni, m, rssi, nf); > ieee80211_free_node(ni); > } else > (void) ieee80211_input_all(ic, m, rssi, nf); > + NET_EPOCH_EXIT(et); > > RAL_LOCK(sc); > sc->sc_flags &= ~RAL_INPUT_RUNNING; > > Modified: head/sys/dev/ral/rt2860.c > ============================================================================== > --- head/sys/dev/ral/rt2860.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/ral/rt2860.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1179,6 +1179,7 @@ rt2860_maxrssi_chain(struct rt2860_softc *sc, const st > static void > rt2860_rx_intr(struct rt2860_softc *sc) > { > + struct epoch_tracker et; > struct rt2860_rx_radiotap_header *tap; > struct ieee80211com *ic = &sc->sc_ic; > struct ieee80211_frame *wh; > @@ -1326,11 +1327,13 @@ rt2860_rx_intr(struct rt2860_softc *sc) > /* send the frame to the 802.11 layer */ > ni = ieee80211_find_rxnode(ic, > (struct ieee80211_frame_min *)wh); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void)ieee80211_input(ni, m, rssi - nf, nf); > ieee80211_free_node(ni); > } else > (void)ieee80211_input_all(ic, m, rssi - nf, nf); > + NET_EPOCH_EXIT(et); > > RAL_LOCK(sc); > > > Modified: head/sys/dev/rtwn/pci/rtwn_pci_rx.c > ============================================================================== > --- head/sys/dev/rtwn/pci/rtwn_pci_rx.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/rtwn/pci/rtwn_pci_rx.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); > #include > #include > #include > +#include > > #include > #include > @@ -85,6 +86,7 @@ rtwn_pci_setup_rx_desc(struct rtwn_pci_softc *pc, > static void > rtwn_pci_rx_frame(struct rtwn_pci_softc *pc) > { > + struct epoch_tracker et; > struct rtwn_softc *sc = &pc->pc_sc; > struct rtwn_rx_ring *ring = &pc->rx_ring; > struct rtwn_rx_stat_pci *rx_desc = &ring->desc[ring->cur]; > @@ -164,12 +166,15 @@ rtwn_pci_rx_frame(struct rtwn_pci_softc *pc) > > /* Send the frame to the 802.11 layer. */ > RTWN_UNLOCK(sc); > + > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void)ieee80211_input_mimo(ni, m); > /* Node is no longer needed. */ > ieee80211_free_node(ni); > } else > (void)ieee80211_input_mimo_all(ic, m); > + NET_EPOCH_EXIT(et); > > RTWN_LOCK(sc); > > > Modified: head/sys/dev/wi/if_wi.c > ============================================================================== > --- head/sys/dev/wi/if_wi.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/wi/if_wi.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1254,6 +1254,7 @@ wi_sync_bssid(struct wi_softc *sc, u_int8_t new_bssid[ > static __noinline void > wi_rx_intr(struct wi_softc *sc) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct wi_frame frmhdr; > struct mbuf *m; > @@ -1349,11 +1350,14 @@ wi_rx_intr(struct wi_softc *sc) > WI_UNLOCK(sc); > > ni = ieee80211_find_rxnode(ic, mtod(m, struct ieee80211_frame_min *)); > + > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > (void) ieee80211_input(ni, m, rssi, nf); > ieee80211_free_node(ni); > } else > (void) ieee80211_input_all(ic, m, rssi, nf); > + NET_EPOCH_EXIT(et); > > WI_LOCK(sc); > } > > Modified: head/sys/dev/wpi/if_wpi.c > ============================================================================== > --- head/sys/dev/wpi/if_wpi.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/wpi/if_wpi.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -1909,6 +1909,7 @@ static void > wpi_rx_done(struct wpi_softc *sc, struct wpi_rx_desc *desc, > struct wpi_rx_data *data) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct wpi_rx_ring *ring = &sc->rxq; > struct wpi_rx_stat *stat; > @@ -2028,6 +2029,7 @@ wpi_rx_done(struct wpi_softc *sc, struct wpi_rx_desc * > } > > WPI_UNLOCK(sc); > + NET_EPOCH_ENTER(et); > > /* Send the frame to the 802.11 layer. */ > if (ni != NULL) { > @@ -2037,6 +2039,7 @@ wpi_rx_done(struct wpi_softc *sc, struct wpi_rx_desc * > } else > (void)ieee80211_input_all(ic, m, stat->rssi, WPI_RSSI_OFFSET); > > + NET_EPOCH_EXIT(et); > WPI_LOCK(sc); > > return; > > Modified: head/sys/dev/wtap/if_wtap.c > ============================================================================== > --- head/sys/dev/wtap/if_wtap.c Thu Jan 30 09:56:57 2020 (r357290) > +++ head/sys/dev/wtap/if_wtap.c Thu Jan 30 10:28:01 2020 (r357291) > @@ -451,6 +451,7 @@ wtap_inject(struct wtap_softc *sc, struct mbuf *m) > void > wtap_rx_deliver(struct wtap_softc *sc, struct mbuf *m) > { > + struct epoch_tracker et; > struct ieee80211com *ic = &sc->sc_ic; > struct ieee80211_node *ni; > int type; > @@ -472,6 +473,7 @@ wtap_rx_deliver(struct wtap_softc *sc, struct mbuf *m) > */ > ni = ieee80211_find_rxnode_withkey(ic, > mtod(m, const struct ieee80211_frame_min *),IEEE80211_KEYIX_NONE); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > /* > * Sending station is known, dispatch directly. > @@ -481,11 +483,13 @@ wtap_rx_deliver(struct wtap_softc *sc, struct mbuf *m) > } else { > type = ieee80211_input_all(ic, m, 1<<7, 10); > } > + NET_EPOCH_EXIT(et); > } > > static void > wtap_rx_proc(void *arg, int npending) > { > + struct epoch_tracker et; > struct wtap_softc *sc = (struct wtap_softc *)arg; > struct ieee80211com *ic = &sc->sc_ic; > struct mbuf *m; > @@ -526,6 +530,7 @@ wtap_rx_proc(void *arg, int npending) > ni = ieee80211_find_rxnode_withkey(ic, > mtod(m, const struct ieee80211_frame_min *), > IEEE80211_KEYIX_NONE); > + NET_EPOCH_ENTER(et); > if (ni != NULL) { > /* > * Sending station is known, dispatch directly. > @@ -535,7 +540,8 @@ wtap_rx_proc(void *arg, int npending) > } else { > type = ieee80211_input_all(ic, m, 1<<7, 10); > } > - > + NET_EPOCH_EXIT(et); > + > /* The mbufs are freed by the Net80211 stack */ > free(bf, M_WTAP_RXBUF); > } >