On Wed, Dec 21, 2016 at 01:52:45PM +0100, Martin Pieuchot wrote:
> ok?

OK bluhm@, but comments inline

> @@ -430,15 +430,16 @@ nd6_llinfo_timer(void *arg)
>  void
>  nd6_timer_work(void *null)
>  {
> -     int s;
>       struct nd_defrouter *dr, *ndr;
>       struct nd_prefix *pr, *npr;
>       struct in6_ifaddr *ia6, *nia6;
> +     int s;
>  
> -     s = splsoftnet();
>       timeout_set(&nd6_timer_ch, nd6_timer, NULL);
>       timeout_add_sec(&nd6_timer_ch, nd6_prune);
>  
> +     NET_LOCK(s);
> +

Moving timeout_set() out of the splsoftnet() feels wrong.  The whole
task construct could be replaced with a timeout_set_proc(), I will
make a diff.


> @@ -1120,7 +1121,6 @@ nd6_ioctl(u_long cmd, caddr_t data, stru
>       struct in6_nbrinfo *nbi = (struct in6_nbrinfo *)data;
>       struct rtentry *rt;
>       int error = 0;
> -     int s;
>  

Could you add an assert here when you remove the splsoftnet().  This
makes further review easier and we see bugs during runtime.

> @@ -1478,12 +1471,14 @@ fail:
>  void
>  nd6_slowtimo(void *ignored_arg)
>  {
> -     int s = splsoftnet();
>       struct nd_ifinfo *nd6if;
>       struct ifnet *ifp;
> +     int s;
>  
>       timeout_set(&nd6_slowtimo_ch, nd6_slowtimo, NULL);
>       timeout_add_sec(&nd6_slowtimo_ch, ND6_SLOWTIMER_INTERVAL);
> +
> +     NET_LOCK(s);

Again timeout_set() without lock feels wrong.  It has been done in
nd6_init() already.  And there it is a timeout_set_proc() now.
Remove the line.

> @@ -825,7 +825,6 @@ nd6_na_input(struct mbuf *m, int off, in
>                        */
>                       struct nd_defrouter *dr;
>                       struct in6_addr *in6;
> -                     int s;

Please add an assert.

>  nd6_dad_starttimer(struct dadq *dp, int ticks)
>  {
>  
> -     timeout_set(&dp->dad_timer_ch, nd6_dad_timer, dp->dad_ifa);
> +     timeout_set_proc(&dp->dad_timer_ch, nd6_dad_timer, dp->dad_ifa);
>       timeout_add(&dp->dad_timer_ch, ticks);

Are we sure that timeout_set() is not called when the timer is
already running?  I will have a look.  You diff does not make it
worse.

> @@ -202,7 +202,7 @@ nd6_rs_output(struct ifnet* ifp, struct 
>       struct nd_router_solicit *rs;
>       struct ip6_moptions im6o;
>       caddr_t mac;
> -     int icmp6len, maxlen, s;
> +     int icmp6len, maxlen;

Can you put an assert here?

> @@ -1592,9 +1592,8 @@ pfxlist_onlink_check(void)
>               if ((pr->ndpr_stateflags & NDPRF_DETACHED) != 0 &&
>                   (pr->ndpr_stateflags & NDPRF_ONLINK) != 0) {
>                       if ((e = nd6_prefix_offlink(pr)) != 0) {
> -                             nd6log((LOG_ERR,
> -                                 "pfxlist_onlink_check: failed to "
> -                                 "make %s/%d offlink, errno=%d\n",
> +                             nd6log((LOG_ERR, "%s: failed to make %s/%d"
> +                                 " offlink, errno=%d\n", __func__,
>                                   inet_ntop(AF_INET6,
>                                       &pr->ndpr_prefix.sin6_addr,
>                                       addr, sizeof(addr)),
> @@ -1605,9 +1604,8 @@ pfxlist_onlink_check(void)
>                   (pr->ndpr_stateflags & NDPRF_ONLINK) == 0 &&
>                   pr->ndpr_raf_onlink) {
>                       if ((e = nd6_prefix_onlink(pr)) != 0) {
> -                             nd6log((LOG_ERR,
> -                                 "pfxlist_onlink_check: failed to "
> -                                 "make %s/%d offlink, errno=%d\n",
> +                             nd6log((LOG_ERR, "%s: failed to make %s/%d"
> +                                 " offlink, errno=%d\n", __func__,
>                                   inet_ntop(AF_INET6,
>                                       &pr->ndpr_prefix.sin6_addr,
>                                       addr, sizeof(addr)),
> @@ -2000,7 +1998,7 @@ in6_init_address_ltimes(struct nd_prefix

Plaese keep the style that the space is before the " at the end
of the line.

Reply via email to