On Tue, Sep 27, 2016 at 05:36:26PM +0200, Stefan Sperling wrote:
> It looks like iwm firmware does not like a MAC context which does not
> specify the AP's BSSID.
>
> The driver currently adds such a context when initializing the hardware
> for the first time after boot (with the BSSID set to all zeros, I also tried
> a broadcast address and that doesn't work either).
> This then triggers the well-known performance bug for some reason which
> only Intel engineers with magic spell books can figure out.
>
> I noticed performance is fixed after running 'ifconfig iwm0 scan' once.
> This brings the interface down and runs the same hardware init sequence,
> but this time it copies the now cached BSSID from ic->ic_bss into the mac
> context command and things start working.
>
> This diff makes sure we don't add a MAC context before we know the BSSID.
> Now things start working correctly right after boot.
>
> I've tested this on 8260 hardware only so far, AFAIK all HW is affected
> by this problem. Additional testing appreciated.
>
Yes, this fixed my problem. Now I instantly get a DHCP lease on boot.
Intel Dual Band Wireless AC 8260, hw rev 0x200, fw ver 16.242414.0
Reyk
> Index: if_iwm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
> retrieving revision 1.141
> diff -u -p -r1.141 if_iwm.c
> --- if_iwm.c 22 Sep 2016 08:28:38 -0000 1.141
> +++ if_iwm.c 27 Sep 2016 15:26:08 -0000
> @@ -5171,6 +5171,13 @@ iwm_auth(struct iwm_softc *sc)
> return err;
> in->in_phyctxt = &sc->sc_phyctxt[0];
>
> + err = iwm_mac_ctxt_cmd(sc, in, IWM_FW_CTXT_ACTION_ADD, 0);
> + if (err) {
> + printf("%s: could not add MAC context (error %d)\n",
> + DEVNAME(sc), err);
> + return err;
> + }
> +
> err = iwm_binding_cmd(sc, in, IWM_FW_CTXT_ACTION_ADD);
> if (err)
> return err;
> @@ -5743,7 +5750,6 @@ int
> iwm_init_hw(struct iwm_softc *sc)
> {
> struct ieee80211com *ic = &sc->sc_ic;
> - struct iwm_node *in = (struct iwm_node *)ic->ic_bss;
> int err, i, ac;
>
> err = iwm_preinit(sc);
> @@ -5865,13 +5871,6 @@ iwm_init_hw(struct iwm_softc *sc)
> goto err;
> }
> }
> -
> - err = iwm_mac_ctxt_cmd(sc, in, IWM_FW_CTXT_ACTION_ADD, 0);
> - if (err) {
> - printf("%s: could not add MAC context (error %d)\n",
> - DEVNAME(sc), err);
> - goto err;
> - }
>
> err = iwm_disable_beacon_filter(sc);
> if (err) {
>
>
>
>
>
--