Author: hselasky
Date: Thu Jan 30 09:41:48 2020
New Revision: 357288
URL: https://svnweb.freebsd.org/changeset/base/357288

Log:
  Widen EPOCH(9) usage in USB WLAN drivers.
  
  This patch should unbreak the USB WLAN drivers after r357004.
  
  Pointy hat:   glebius@
  Sponsored by: Mellanox Technologies

Modified:
  head/sys/dev/usb/wlan/if_rum.c
  head/sys/dev/usb/wlan/if_run.c
  head/sys/dev/usb/wlan/if_uath.c
  head/sys/dev/usb/wlan/if_upgt.c
  head/sys/dev/usb/wlan/if_ural.c
  head/sys/dev/usb/wlan/if_urtw.c
  head/sys/dev/usb/wlan/if_zyd.c

Modified: head/sys/dev/usb/wlan/if_rum.c
==============================================================================
--- head/sys/dev/usb/wlan/if_rum.c      Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_rum.c      Thu Jan 30 09:41:48 2020        
(r357288)
@@ -1168,6 +1168,7 @@ rum_bulk_read_callback(struct usb_xfer *xfer, usb_erro
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_frame_min *wh;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct mbuf *m = NULL;
        struct usb_page_cache *pc;
        uint32_t flags;
@@ -1286,6 +1287,7 @@ tr_setup:
                        else
                                ni = NULL;
 
+                       NET_EPOCH_ENTER(et);
                        if (ni != NULL) {
                                (void) ieee80211_input(ni, m, rssi,
                                    RT2573_NOISE_FLOOR);
@@ -1293,6 +1295,7 @@ tr_setup:
                        } else
                                (void) ieee80211_input_all(ic, m, rssi,
                                    RT2573_NOISE_FLOOR);
+                       NET_EPOCH_EXIT(et);
                }
                RUM_LOCK(sc);
                rum_start(sc);

Modified: head/sys/dev/usb/wlan/if_run.c
==============================================================================
--- head/sys/dev/usb/wlan/if_run.c      Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_run.c      Thu Jan 30 09:41:48 2020        
(r357288)
@@ -2811,6 +2811,7 @@ run_rx_frame(struct run_softc *sc, struct mbuf *m, uin
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_frame *wh;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct rt2870_rxd *rxd;
        struct rt2860_rxwi *rxwi;
        uint32_t flags;
@@ -2929,12 +2930,14 @@ run_rx_frame(struct run_softc *sc, struct mbuf *m, uin
                }
        }
 
+       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);
 
        return;
 

Modified: head/sys/dev/usb/wlan/if_uath.c
==============================================================================
--- head/sys/dev/usb/wlan/if_uath.c     Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_uath.c     Thu Jan 30 09:41:48 2020        
(r357288)
@@ -2705,6 +2705,7 @@ uath_bulk_rx_callback(struct usb_xfer *xfer, usb_error
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_frame *wh;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct mbuf *m = NULL;
        struct uath_data *data;
        struct uath_rx_desc *desc = NULL;
@@ -2751,6 +2752,7 @@ setup:
                        ni = ieee80211_find_rxnode(ic,
                            (struct ieee80211_frame_min *)wh);
                        nf = -95;       /* XXX */
+                       NET_EPOCH_ENTER(et);
                        if (ni != NULL) {
                                (void) ieee80211_input(ni, m,
                                    (int)be32toh(desc->rssi), nf);
@@ -2759,6 +2761,7 @@ setup:
                        } else
                                (void) ieee80211_input_all(ic, m,
                                    (int)be32toh(desc->rssi), nf);
+                       NET_EPOCH_EXIT(et);
                        m = NULL;
                        desc = NULL;
                }

Modified: head/sys/dev/usb/wlan/if_upgt.c
==============================================================================
--- head/sys/dev/usb/wlan/if_upgt.c     Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_upgt.c     Thu Jan 30 09:41:48 2020        
(r357288)
@@ -2211,6 +2211,7 @@ upgt_bulk_rx_callback(struct usb_xfer *xfer, usb_error
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_frame *wh;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct mbuf *m = NULL;
        struct upgt_data *data;
        int8_t nf;
@@ -2248,12 +2249,14 @@ setup:
                        ni = ieee80211_find_rxnode(ic,
                            (struct ieee80211_frame_min *)wh);
                        nf = -95;       /* XXX */
+                       NET_EPOCH_ENTER(et);
                        if (ni != NULL) {
                                (void) ieee80211_input(ni, m, rssi, nf);
                                /* node is no longer needed */
                                ieee80211_free_node(ni);
                        } else
                                (void) ieee80211_input_all(ic, m, rssi, nf);
+                       NET_EPOCH_EXIT(et);
                        m = NULL;
                }
                UPGT_LOCK(sc);

Modified: head/sys/dev/usb/wlan/if_ural.c
==============================================================================
--- head/sys/dev/usb/wlan/if_ural.c     Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_ural.c     Thu Jan 30 09:41:48 2020        
(r357288)
@@ -851,6 +851,7 @@ ural_bulk_read_callback(struct usb_xfer *xfer, usb_err
        struct ural_softc *sc = usbd_xfer_softc(xfer);
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct mbuf *m = NULL;
        struct usb_page_cache *pc;
        uint32_t flags;
@@ -931,11 +932,13 @@ tr_setup:
                if (m) {
                        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);
                }
                RAL_LOCK(sc);
                ural_start(sc);

Modified: head/sys/dev/usb/wlan/if_urtw.c
==============================================================================
--- head/sys/dev/usb/wlan/if_urtw.c     Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_urtw.c     Thu Jan 30 09:41:48 2020        
(r357288)
@@ -4042,6 +4042,7 @@ urtw_bulk_rx_callback(struct usb_xfer *xfer, usb_error
        struct urtw_softc *sc = usbd_xfer_softc(xfer);
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct mbuf *m = NULL;
        struct urtw_data *data;
        int8_t nf = -95;
@@ -4085,12 +4086,14 @@ setup:
                        } else
                                ni = NULL;
 
+                       NET_EPOCH_ENTER(et);
                        if (ni != NULL) {
                                (void) ieee80211_input(ni, m, rssi, nf);
                                /* node is no longer needed */
                                ieee80211_free_node(ni);
                        } else
                                (void) ieee80211_input_all(ic, m, rssi, nf);
+                       NET_EPOCH_EXIT(et);
                        m = NULL;
                }
                URTW_LOCK(sc);

Modified: head/sys/dev/usb/wlan/if_zyd.c
==============================================================================
--- head/sys/dev/usb/wlan/if_zyd.c      Thu Jan 30 08:56:22 2020        
(r357287)
+++ head/sys/dev/usb/wlan/if_zyd.c      Thu Jan 30 09:41:48 2020        
(r357288)
@@ -2223,6 +2223,7 @@ zyd_bulk_read_callback(struct usb_xfer *xfer, usb_erro
        struct zyd_softc *sc = usbd_xfer_softc(xfer);
        struct ieee80211com *ic = &sc->sc_ic;
        struct ieee80211_node *ni;
+       struct epoch_tracker et;
        struct zyd_rx_desc desc;
        struct mbuf *m;
        struct usb_page_cache *pc;
@@ -2278,6 +2279,7 @@ tr_setup:
                 * "ieee80211_input" here, and not some lines up!
                 */
                ZYD_UNLOCK(sc);
+               NET_EPOCH_ENTER(et);
                for (i = 0; i < sc->sc_rx_count; i++) {
                        rssi = sc->sc_rx_data[i].rssi;
                        m = sc->sc_rx_data[i].m;
@@ -2293,6 +2295,7 @@ tr_setup:
                        } else
                                (void)ieee80211_input_all(ic, m, rssi, nf);
                }
+               NET_EPOCH_EXIT(et);
                ZYD_LOCK(sc);
                zyd_start(sc);
                break;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to