> On 14 Aug 2022, at 23:35, Jeremie Courreges-Anglas <j...@wxcvbn.org> wrote:
> 
> On Sun, Aug 14 2022, Vitaliy Makkoveev <o...@bsdbox.dev> wrote:
>> I propose to avoid netlock relocking for SIOCGIFSFFPAGE too.
> 
> sigh, that seems to be needed indeed.
> 
>> Also, since the relock should be avoided for many commands, I prefer
>> to have something like below:
>> 
>>      switch(cmd){
>>      case SIOCGIFMEDIA:
>>      case ...:
>>              relock = 1;
>>              break;
>>      }
>> 
>>      if (relock)
>>              NET_UNLOCK();
> 
> Fine with me.  "netlock_held" made more sense to me as the variable
> name, I hope you won't mind.  ;)
> 

No problem, ok by me.

> Works fine on GENERIC.MP.
> 
> 
> Index: dev/fdt/if_cad.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/if_cad.c,v
> retrieving revision 1.11
> diff -u -p -r1.11 if_cad.c
> --- dev/fdt/if_cad.c  8 Mar 2022 16:13:08 -0000       1.11
> +++ dev/fdt/if_cad.c  14 Aug 2022 20:20:00 -0000
> @@ -550,12 +550,22 @@ cad_ioctl(struct ifnet *ifp, u_long cmd,
> {
>       struct cad_softc *sc = ifp->if_softc;
>       struct ifreq *ifr = (struct ifreq *)data;
> -     int error = 0;
> +     int error = 0, netlock_held = 1;
>       int s;
> 
> -     NET_UNLOCK();
> +     switch (cmd) {
> +     case SIOCGIFMEDIA:
> +     case SIOCSIFMEDIA:
> +     case SIOCGIFSFFPAGE:
> +             netlock_held = 0;
> +             break;
> +     }
> +
> +     if (netlock_held)
> +             NET_UNLOCK();
>       rw_enter_write(&sc->sc_cfg_lock);
> -     NET_LOCK();
> +     if (netlock_held)
> +             NET_LOCK();
>       s = splnet();
> 
>       switch (cmd) {
> 
> 
> -- 
> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to