On Tue, Jan 09, 2018 at 11:24:14AM +0100, Martin Pieuchot wrote:
> On 02/01/18(Tue) 16:04, Martin Pieuchot wrote:
> > New year, new diff.  Assuming we can live with the kqueue(2) races,
> > here's a diff to remove the KERNEL_LOCK() from all pr_input() routines.
> > 
> > I'd appreciate tests.
> 
> I got multiple positive reports, I'd like to commit this to see if
> anything breaks next.  Any ok?

Let's try it.  OK bluhm@

> > Index: net/if.c
> > ===================================================================
> > RCS file: /cvs/src/sys/net/if.c,v
> > retrieving revision 1.533
> > diff -u -p -r1.533 if.c
> > --- net/if.c        2 Jan 2018 12:52:17 -0000       1.533
> > +++ net/if.c        2 Jan 2018 14:32:05 -0000
> > @@ -926,7 +926,6 @@ if_netisr(void *unused)
> >  {
> >     int n, t = 0;
> >  
> > -   KERNEL_LOCK();
> >     NET_LOCK();
> >  
> >     while ((n = netisr) != 0) {
> > @@ -940,8 +939,11 @@ if_netisr(void *unused)
> >             atomic_clearbits_int(&netisr, n);
> >  
> >  #if NETHER > 0
> > -           if (n & (1 << NETISR_ARP))
> > +           if (n & (1 << NETISR_ARP)) {
> > +                   KERNEL_LOCK();
> >                     arpintr();
> > +                   KERNEL_UNLOCK();
> > +           }
> >  #endif
> >             if (n & (1 << NETISR_IP))
> >                     ipintr();
> > @@ -950,35 +952,52 @@ if_netisr(void *unused)
> >                     ip6intr();
> >  #endif
> >  #if NPPP > 0
> > -           if (n & (1 << NETISR_PPP))
> > +           if (n & (1 << NETISR_PPP)) {
> > +                   KERNEL_LOCK();
> >                     pppintr();
> > +                   KERNEL_UNLOCK();
> > +           }
> >  #endif
> >  #if NBRIDGE > 0
> > -           if (n & (1 << NETISR_BRIDGE))
> > +           if (n & (1 << NETISR_BRIDGE)) {
> > +                   KERNEL_LOCK();
> >                     bridgeintr();
> > +                   KERNEL_UNLOCK();
> > +           }
> >  #endif
> >  #if NSWITCH > 0
> > -           if (n & (1 << NETISR_SWITCH))
> > +           if (n & (1 << NETISR_SWITCH)) {
> > +                   KERNEL_LOCK();
> >                     switchintr();
> > +                   KERNEL_UNLOCK();
> > +           }
> >  #endif
> >  #if NPPPOE > 0
> > -           if (n & (1 << NETISR_PPPOE))
> > +           if (n & (1 << NETISR_PPPOE)) {
> > +                   KERNEL_LOCK();
> >                     pppoeintr();
> > +                   KERNEL_UNLOCK();
> > +           }
> >  #endif
> >  #ifdef PIPEX
> > -           if (n & (1 << NETISR_PIPEX))
> > +           if (n & (1 << NETISR_PIPEX)) {
> > +                   KERNEL_LOCK();
> >                     pipexintr();
> > +                   KERNEL_UNLOCK();
> > +           }
> >  #endif
> >             t |= n;
> >     }
> >  
> >  #if NPFSYNC > 0
> > -   if (t & (1 << NETISR_PFSYNC))
> > +   if (t & (1 << NETISR_PFSYNC)) {
> > +           KERNEL_LOCK();
> >             pfsyncintr();
> > +           KERNEL_UNLOCK();
> > +   }
> >  #endif
> >  
> >     NET_UNLOCK();
> > -   KERNEL_UNLOCK();
> >  }
> >  
> >  void
> > 

Reply via email to