On Tue, Apr 07, 2020 at 01:51:45PM +0300, Vitaliy Makkoveev wrote:
> On Tue, Apr 07, 2020 at 11:54:01AM +0200, Claudio Jeker wrote:
> > Unsure about this one here. I would prefer if the panic remained for now
> > (mainly because of the XXXSMP NET_UNLOCK() dance just above). I wonder if 
> > the
> > order of this could not be modified so that the NET_LOCK is released after
> > the RBT_REMOVE.
> Well, let's clenup these dances before. Diff below just breaks giant
> NET_LOCK() in pppxioctl() to many small.
Will be required in the distant future, forget please :)
> 
> Index: net/if_pppx.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_pppx.c,v
> retrieving revision 1.81
> diff -u -p -r1.81 if_pppx.c
> --- net/if_pppx.c     7 Apr 2020 07:11:22 -0000       1.81
> +++ net/if_pppx.c     7 Apr 2020 10:46:34 -0000
> @@ -433,7 +433,6 @@ pppxioctl(dev_t dev, u_long cmd, caddr_t
>       struct pppx_dev *pxd = pppx_dev2pxd(dev);
>       int error = 0;
>  
> -     NET_LOCK();
>       switch (cmd) {
>       case PIPEXSMODE:
>               /*
> @@ -447,46 +446,59 @@ pppxioctl(dev_t dev, u_long cmd, caddr_t
>               break;
>  
>       case PIPEXASESSION:
> +             NET_LOCK();
>               error = pppx_add_session(pxd,
>                   (struct pipex_session_req *)addr);
> +             NET_UNLOCK();
>               break;
>  
>       case PIPEXDSESSION:
> +             NET_LOCK();
>               error = pppx_del_session(pxd,
>                   (struct pipex_session_close_req *)addr);
> +             NET_UNLOCK();
>               break;
>  
>       case PIPEXCSESSION:
> +             NET_LOCK();
>               error = pppx_config_session(pxd,
>                   (struct pipex_session_config_req *)addr);
> +             NET_UNLOCK();
>               break;
>  
>       case PIPEXGSTAT:
> +             NET_LOCK();
>               error = pppx_get_stat(pxd,
>                   (struct pipex_session_stat_req *)addr);
> +             NET_UNLOCK();
>               break;
>  
>       case PIPEXGCLOSED:
> +             NET_LOCK();
>               error = pppx_get_closed(pxd,
>                   (struct pipex_session_list_req *)addr);
> +             NET_UNLOCK();
>               break;
>  
>       case PIPEXSIFDESCR:
> +             NET_LOCK();
>               error = pppx_set_session_descr(pxd,
>                   (struct pipex_session_descr_req *)addr);
> +             NET_UNLOCK();
>               break;
>  
>       case FIONBIO:
>               break;
>       case FIONREAD:
> +             NET_LOCK();
>               *(int *)addr = mq_hdatalen(&pxd->pxd_svcq);
> +             NET_UNLOCK();
>               break;
>  
>       default:
>               error = ENOTTY;
>               break;
>       }
> -     NET_UNLOCK();
>  
>       return (error);
>  }

Reply via email to