On Thu, Nov 10, 2016 at 10:24:50PM +0200, George Pediaditis wrote: > i currently use stable. I updated my system a week ago. How stable is current? > I use my laptop for programming (java) and im a bit skeptical about > running current.
Generally, -current is fine. But if you don't follow our development process at least a bit you might upgrade at a bad moment and run into surprises. Most issues will fix themselves after a few days and we're always welcoming reports from users running -current since that really helps us make the next release better. I have spent many hours making many changes since 6.0 which fixed several issues in the iwm driver and the wireless framework. All these fixes will of course ship in 6.1. I'm sorry but this kind of problem is not something we officially backport fixes to -stable for because it just takes too much time on top of all the time already spent on development for -current. That said, I'll include one fix I made below. I don't know if it provides a huge improvement in isolation but if you really want to stick with -stable then this patch is worth a shot. I know that it compiles but I haven't run this on a 6.0 system myself. Index: if_iwm.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v retrieving revision 1.132 retrieving revision 1.133 diff -u -p -r1.132 -r1.133 --- if_iwm.c 12 Sep 2016 10:18:26 -0000 1.132 +++ if_iwm.c 21 Sep 2016 12:56:43 -0000 1.133 @@ -4896,6 +4896,7 @@ iwm_ack_rates(struct iwm_softc *sc, stru int *ofdm_rates) { struct ieee80211_node *ni = &in->in_ni; + struct ieee80211_rateset *rs = &ni->ni_rates; int lowest_present_ofdm = 100; int lowest_present_cck = 100; uint8_t cck = 0; @@ -4904,15 +4905,19 @@ iwm_ack_rates(struct iwm_softc *sc, stru if (ni->ni_chan == IEEE80211_CHAN_ANYC || IEEE80211_IS_CHAN_2GHZ(ni->ni_chan)) { - for (i = 0; i <= IWM_LAST_CCK_RATE; i++) { + for (i = 0; i < MIN(IWM_FIRST_OFDM_RATE, rs->rs_nrates); i++) { + if ((rs->rs_rates[i] & IEEE80211_RATE_BASIC) == 0) + continue; cck |= (1 << i); if (lowest_present_cck > i) lowest_present_cck = i; } } - for (i = IWM_FIRST_OFDM_RATE; i <= IWM_LAST_NON_HT_RATE; i++) { - int adj = i - IWM_FIRST_OFDM_RATE; - ofdm |= (1 << adj); + for (i = IWM_FIRST_OFDM_RATE; + i <= MIN(IWM_LAST_NON_HT_RATE, rs->rs_nrates - 1); i++) { + if ((rs->rs_rates[i] & IEEE80211_RATE_BASIC) == 0) + continue; + ofdm |= (1 << (i - IWM_FIRST_OFDM_RATE)); if (lowest_present_ofdm > i) lowest_present_ofdm = i; }