Author: kp
Date: Wed Sep  2 11:49:22 2020
New Revision: 365246
URL: https://svnweb.freebsd.org/changeset/base/365246

Log:
  ng_ether: Enter NET_EPOCH where required
  
  We must enter NET_EPOCH before calling ether_output_frame(). Several of the
  functions it calls (pfil_run_hooks, if_transmit) expect to be running in the
  NET_EPOCH.
  
  While here remove an unneeded EPOCH entry (which wasn't wide enough to cover
  BRIDGE_INPUT).
  
  PR:           248958
  Reviewed by:  glebius, bz (previous version), melifaro (previous version)
  Tested by:    manu
  Differential Revision:        https://reviews.freebsd.org/D26226

Modified:
  head/sys/netgraph/ng_ether.c
  head/sys/netgraph/ng_pppoe.c

Modified: head/sys/netgraph/ng_ether.c
==============================================================================
--- head/sys/netgraph/ng_ether.c        Wed Sep  2 11:33:31 2020        
(r365245)
+++ head/sys/netgraph/ng_ether.c        Wed Sep  2 11:49:22 2020        
(r365246)
@@ -711,7 +711,6 @@ ng_ether_rcv_lower(hook_p hook, item_p item)
 static int
 ng_ether_rcv_upper(hook_p hook, item_p item)
 {
-       struct epoch_tracker et;
        struct mbuf *m;
        const node_p node = NG_HOOK_NODE(hook);
        const priv_p priv = NG_NODE_PRIVATE(node);
@@ -739,9 +738,7 @@ ng_ether_rcv_upper(hook_p hook, item_p item)
        }
 
        /* Route packet back in */
-       NET_EPOCH_ENTER(et);
        ether_demux(ifp, m);
-       NET_EPOCH_EXIT(et);
        return (0);
 }
 

Modified: head/sys/netgraph/ng_pppoe.c
==============================================================================
--- head/sys/netgraph/ng_pppoe.c        Wed Sep  2 11:33:31 2020        
(r365245)
+++ head/sys/netgraph/ng_pppoe.c        Wed Sep  2 11:49:22 2020        
(r365246)
@@ -48,6 +48,7 @@
 #include <sys/mbuf.h>
 #include <sys/malloc.h>
 #include <sys/errno.h>
+#include <sys/epoch.h>
 #include <sys/syslog.h>
 #include <net/ethernet.h>
 
@@ -761,6 +762,7 @@ ng_pppoe_connect(hook_p hook)
 static int
 ng_pppoe_rcvmsg(node_p node, item_p item, hook_p lasthook)
 {
+       struct epoch_tracker et;
        priv_p privp = NG_NODE_PRIVATE(node);
        struct ngpppoe_init_data *ourmsg = NULL;
        struct ng_mesg *resp = NULL;
@@ -980,7 +982,9 @@ ng_pppoe_rcvmsg(node_p node, item_p item, hook_p lasth
                        neg->service.hdr.tag_len = htons((uint16_t)srvlen);
                        bcopy(ourmsg->data + srvpos, neg->service.data, srvlen);
                        neg->service_len = srvlen;
+                       NET_EPOCH_ENTER(et);
                        pppoe_start(sp);
+                       NET_EPOCH_EXIT(et);
                        break;
                    }
                case NGM_PPPOE_LISTEN:
@@ -1166,8 +1170,10 @@ ng_pppoe_rcvmsg(node_p node, item_p item, hook_p lasth
                                m->m_pkthdr.len = m->m_len = sizeof(*wh) + 
sizeof(*tag) +
                                    ourmsg->data_len;
                                wh->ph.length = htons(sizeof(*tag) + 
ourmsg->data_len);
+                               NET_EPOCH_ENTER(et);
                                NG_SEND_DATA_ONLY(error,
                                    privp->ethernet_hook, m);
+                               NET_EPOCH_EXIT(et);
                        }
                        break;
                    }
@@ -1209,8 +1215,10 @@ ng_pppoe_rcvmsg(node_p node, item_p item, hook_p lasth
                                m->m_pkthdr.len = m->m_len = sizeof(*wh) + 
sizeof(*tag) +
                                    ourmsg->data_len;
                                wh->ph.length = htons(sizeof(*tag) + 
ourmsg->data_len);
+                               NET_EPOCH_ENTER(et);
                                NG_SEND_DATA_ONLY(error,
                                    privp->ethernet_hook, m);
+                               NET_EPOCH_EXIT(et);
                        }
                        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