[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-tech
Subject: Re: iwn/iwm: ignore missed beacons during background scan
From: Stefan Sperling <stsp () stsp ! name>
Date: 2018-01-31 11:59:03
Message-ID: 20180131115903.GG98299 () ted ! stsp ! name
[Download RAW message or body]
On Wed, Jan 24, 2018 at 06:42:42PM +0100, Stefan Sperling wrote:
> I just observed iwn(4) firmware reporting a missed beacon event
> during a background scan:
>
> Jan 24 18:24:50 laptop /bsd: iwn0: begin background scan
> Jan 24 18:24:57 laptop /bsd: iwn0: sending probe_req to xx:xx:xx:xx:xx:xx on channel 10 mode 11g
> Jan 24 18:24:59 laptop /bsd: iwn0: end background scan
>
> Under normal conditions, a missed beacon event triggers a probe request
> being sent to our current AP. If the AP does respond, all is good. If it
> does not respond, we assume the AP has gone away and we go to SCAN state.
>
> But in the above case the driver lost link and didn't recover (i.e. it
> never came back out of SCAN state).
Turns out lost link is a separate issue. I still think preventing bgscan
and beacon miss from stepping on each other would be worthwhile to prevent
(theoretical) problems but I am going to send a different fix soon for
the lost link issue.
>
> One obvious solution is to ignore missed beacon events while a
> background scan is in progress. This should prevent both of these
> mechanisms from interacting with each other in unfortunate ways.
>
> ok?
>
> Index: if_iwm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
> retrieving revision 1.223
> diff -u -p -r1.223 if_iwm.c
> --- if_iwm.c 14 Jan 2018 11:51:34 -0000 1.223
> +++ if_iwm.c 24 Jan 2018 17:27:08 -0000
> @@ -3673,6 +3673,9 @@ iwm_rx_bmiss(struct iwm_softc *sc, struc
> (ic->ic_state != IEEE80211_S_RUN))
> return;
>
> + if (sc->sc_flags & IWM_FLAG_BGSCAN)
> + return;
> +
> bus_dmamap_sync(sc->sc_dmat, data->map, sizeof(*pkt),
> sizeof(*mbn), BUS_DMASYNC_POSTREAD);
>
> Index: if_iwn.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwn.c,v
> retrieving revision 1.198
> diff -u -p -r1.198 if_iwn.c
> --- if_iwn.c 9 Jan 2018 10:00:12 -0000 1.198
> +++ if_iwn.c 24 Jan 2018 17:26:24 -0000
> @@ -2530,6 +2530,9 @@ iwn_notif_intr(struct iwn_softc *sc)
> (ic->ic_state != IEEE80211_S_RUN))
> break;
>
> + if (ic->ic_flags & IWN_FLAG_BGSCAN)
> + break;
> +
> bus_dmamap_sync(sc->sc_dmat, data->map, sizeof (*desc),
> sizeof (*miss), BUS_DMASYNC_POSTREAD);
> missed = letoh32(miss->consecutive);
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic