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;
        }

Reply via email to