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