mld6_{start,stop}_listeting() are called in ioctl(2) context, thus at
IPL_SOFTNET.

mld6_fasttimeo(), like all *fasttimeo() routines is now always called
at IPL_SOFTNET.

So let's get rid of these recursive splsoftnet(), ok?

Index: netinet6/mld6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/mld6.c,v
retrieving revision 1.48
diff -u -p -r1.48 mld6.c
--- netinet6/mld6.c     5 Jul 2016 10:17:14 -0000       1.48
+++ netinet6/mld6.c     20 Dec 2016 10:59:27 -0000
@@ -117,8 +117,6 @@ mld6_init(void)
 void
 mld6_start_listening(struct in6_multi *in6m)
 {
-       int s = splsoftnet();
-
        /*
         * RFC2710 page 10:
         * The node never sends a Report or Done for the link-scope all-nodes
@@ -139,14 +137,11 @@ mld6_start_listening(struct in6_multi *i
                in6m->in6m_state = MLD_IREPORTEDLAST;
                mld_timers_are_running = 1;
        }
-       splx(s);
 }
 
 void
 mld6_stop_listening(struct in6_multi *in6m)
 {
-       int s = splsoftnet();
-
        mld_all_nodes_linklocal.s6_addr16[1] = htons(in6m->in6m_ifidx);/* XXX */
        mld_all_routers_linklocal.s6_addr16[1] =
            htons(in6m->in6m_ifidx); /* XXX: necessary when mrouting */
@@ -156,7 +151,6 @@ mld6_stop_listening(struct in6_multi *in
            __IPV6_ADDR_MC_SCOPE(&in6m->in6m_addr) > 
__IPV6_ADDR_SCOPE_INTFACELOCAL)
                mld6_sendpkt(in6m, MLD_LISTENER_DONE,
                    &mld_all_routers_linklocal);
-       splx(s);
 }
 
 void
@@ -331,7 +325,6 @@ void
 mld6_fasttimeo(void)
 {
        struct ifnet *ifp;
-       int s;
 
        /*
         * Quick check to see if any work needs to be done, in order
@@ -340,11 +333,9 @@ mld6_fasttimeo(void)
        if (!mld_timers_are_running)
                return;
 
-       s = splsoftnet();
        mld_timers_are_running = 0;
        TAILQ_FOREACH(ifp, &ifnet, if_list)
                mld6_checktimer(ifp);
-       splx(s);
 }
 
 void

Reply via email to