Sorry, please ignore this diff. ifmedia_ioctl() does not propagate ENETRESET,
so this actually breaks things :(

On Sun, Aug 13, 2017 at 07:28:24PM +0200, Stefan Sperling wrote:
> When media is changed with ifconfig, the media change request passes
> through the following kernel function call chain:
> 
>  1 iwm_ioctl()
>  2 iee80211_ioctl()
>  3 ifmedia_ioctl()
>  4 iwm_media_change() via ifm->ifm_change pointer
>  5 ieee80211_media_change()
>  
> If ieee80211_media_change() returns ENETRESET, iwm resets the interface
> directly in iwm_media_change(). But iwm_ioctl() handles ENETRESET in the
> same way, so we can just pass the error up there and avoid redundant code.
> 
> ok?
> 
> Index: if_iwm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
> retrieving revision 1.210
> diff -u -p -r1.210 if_iwm.c
> --- if_iwm.c  13 Aug 2017 15:34:54 -0000      1.210
> +++ if_iwm.c  13 Aug 2017 17:18:30 -0000
> @@ -5908,11 +5908,6 @@ iwm_media_change(struct ifnet *ifp)
>               sc->sc_fixed_ridx = ridx;
>       }
>  
> -     if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
> -         (IFF_UP | IFF_RUNNING)) {
> -             iwm_stop(ifp, 0);
> -             err = iwm_init(ifp);
> -     }
>       return err;
>  }
>  

Reply via email to