On Mon, Nov 07, 2016 at 10:36:26AM +0100, Martin Pieuchot wrote:
> Timers configured with rt_timer_add(9) are always run under splsoftnet()
> so no need to take it recursively.
> 
> ok?

OK bluhm@

> 
> Index: netinet/ip_icmp.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/ip_icmp.c,v
> retrieving revision 1.152
> diff -u -p -r1.152 ip_icmp.c
> --- netinet/ip_icmp.c 22 Aug 2016 15:37:23 -0000      1.152
> +++ netinet/ip_icmp.c 7 Nov 2016 09:23:47 -0000
> @@ -1046,7 +1046,8 @@ void
>  icmp_mtudisc_timeout(struct rtentry *rt, struct rttimer *r)
>  {
>       struct ifnet *ifp;
> -     int s;
> +
> +     splsoftassert(IPL_SOFTNET);
>  
>       ifp = if_get(rt->rt_ifidx);
>       if (ifp == NULL)
> @@ -1058,7 +1059,6 @@ icmp_mtudisc_timeout(struct rtentry *rt,
>  
>               sin = *satosin(rt_key(rt));
>  
> -             s = splsoftnet();
>               rtdeletemsg(rt, ifp, r->rtt_tableid);
>  
>               /* Notify TCP layer of increased Path MTU estimate */
> @@ -1066,7 +1066,6 @@ icmp_mtudisc_timeout(struct rtentry *rt,
>               if (ctlfunc)
>                       (*ctlfunc)(PRC_MTUINC, sintosa(&sin),
>                           r->rtt_tableid, NULL);
> -             splx(s);
>       } else {
>               if ((rt->rt_rmx.rmx_locks & RTV_MTU) == 0)
>                       rt->rt_rmx.rmx_mtu = 0;
> @@ -1097,16 +1096,15 @@ void
>  icmp_redirect_timeout(struct rtentry *rt, struct rttimer *r)
>  {
>       struct ifnet *ifp;
> -     int s;
> +
> +     splsoftassert(IPL_SOFTNET);
>  
>       ifp = if_get(rt->rt_ifidx);
>       if (ifp == NULL)
>               return;
>  
>       if ((rt->rt_flags & (RTF_DYNAMIC|RTF_HOST)) == (RTF_DYNAMIC|RTF_HOST)) {
> -             s = splsoftnet();
>               rtdeletemsg(rt, ifp, r->rtt_tableid);
> -             splx(s);
>       }
>  
>       if_put(ifp);
> Index: netinet6/icmp6.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/icmp6.c,v
> retrieving revision 1.190
> diff -u -p -r1.190 icmp6.c
> --- netinet6/icmp6.c  24 Aug 2016 09:38:29 -0000      1.190
> +++ netinet6/icmp6.c  7 Nov 2016 09:24:37 -0000
> @@ -1947,16 +1947,15 @@ void
>  icmp6_mtudisc_timeout(struct rtentry *rt, struct rttimer *r)
>  {
>       struct ifnet *ifp;
> -     int s;
> +
> +     splsoftassert(IPL_SOFTNET);
>  
>       ifp = if_get(rt->rt_ifidx);
>       if (ifp == NULL)
>               return;
>  
>       if ((rt->rt_flags & (RTF_DYNAMIC|RTF_HOST)) == (RTF_DYNAMIC|RTF_HOST)) {
> -             s = splsoftnet();
>               rtdeletemsg(rt, ifp, r->rtt_tableid);
> -             splx(s);
>       } else {
>               if (!(rt->rt_rmx.rmx_locks & RTV_MTU))
>                       rt->rt_rmx.rmx_mtu = 0;
> @@ -1969,16 +1968,15 @@ void
>  icmp6_redirect_timeout(struct rtentry *rt, struct rttimer *r)
>  {
>       struct ifnet *ifp;
> -     int s;
> +
> +     splsoftassert(IPL_SOFTNET);
>  
>       ifp = if_get(rt->rt_ifidx);
>       if (ifp == NULL)
>               return;
>  
>       if ((rt->rt_flags & (RTF_DYNAMIC|RTF_HOST)) == (RTF_DYNAMIC|RTF_HOST)) {
> -             s = splsoftnet();
>               rtdeletemsg(rt, ifp, r->rtt_tableid);
> -             splx(s);
>       }
>  
>       if_put(ifp);
> Index: net/route.c
> ===================================================================
> RCS file: /cvs/src/sys/net/route.c,v
> retrieving revision 1.333
> diff -u -p -r1.333 route.c
> --- net/route.c       6 Oct 2016 19:09:08 -0000       1.333
> +++ net/route.c       7 Nov 2016 09:22:11 -0000
> @@ -1498,6 +1498,8 @@ rt_timer_queue_destroy(struct rttimer_qu
>  {
>       struct rttimer  *r;
>  
> +     splsoftassert(IPL_SOFTNET);
> +
>       while ((r = TAILQ_FIRST(&rtq->rtq_head)) != NULL) {
>               LIST_REMOVE(r, rtt_link);
>               TAILQ_REMOVE(&rtq->rtq_head, r, rtt_next);

Reply via email to