Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
authorJohn W. Linville <linville@tuxdriver.com>
Wed, 6 Jun 2012 18:40:06 +0000 (14:40 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 6 Jun 2012 18:40:06 +0000 (14:40 -0400)
Conflicts:
drivers/net/wireless/iwlwifi/iwl-drv.c

1  2 
drivers/net/wireless/iwlwifi/iwl-drv.c
drivers/net/wireless/iwlwifi/iwl-mac80211.c
net/mac80211/agg-rx.c
net/mac80211/cfg.c
net/mac80211/iface.c
net/mac80211/mlme.c
net/mac80211/sta_info.c
net/mac80211/tx.c

index cdfdfaec395e092a47fae6a10c9725b454b06d1f,fac67a526a30880199bb12b8fb7310e6a3471a75..49df0e9d5c5f05397e2b8947b394320906cd6a51
@@@ -897,20 -861,18 +897,28 @@@ static void iwl_ucode_callback(const st
  
        /* We have our copies now, allow OS release its copies */
        release_firmware(ucode_raw);
-       complete(&drv->request_firmware_complete);
  
 -      drv->op_mode = iwl_dvm_ops.start(drv->trans, drv->cfg, &drv->fw);
 +      op = &iwlwifi_opmode_table[DVM_OP_MODE];
  
 -      if (!drv->op_mode)
 -              goto out_unbind;
 +      /* add this device to the list of devices using this op_mode */
 +      list_add_tail(&drv->list, &op->drv);
 +
 +      if (op->ops) {
 +              const struct iwl_op_mode_ops *ops = op->ops;
 +              drv->op_mode = ops->start(drv->trans, drv->cfg, &drv->fw);
++
++              if (!drv->op_mode)
++                      goto out_unbind;
 +      } else {
 +              request_module_nowait("%s", op->name);
 +      }
  
+       /*
+        * Complete the firmware request last so that
+        * a driver unbind (stop) doesn't run while we
+        * are doing the start() above.
+        */
+       complete(&drv->request_firmware_complete);
        return;
  
   try_again:
index a096b0dae37dfff964e15c739359986fa98bda44,c649188314cce99c17fca198e75d597c24701197..32ef11d69798322bd92a84414f444892452c063c
@@@ -149,11 -155,14 +152,13 @@@ static void sta_rx_agg_session_timer_ex
        timeout = tid_rx->last_rx + TU_TO_JIFFIES(tid_rx->timeout);
        if (time_is_after_jiffies(timeout)) {
                mod_timer(&tid_rx->session_timer, timeout);
+               rcu_read_unlock();
                return;
        }
+       rcu_read_unlock();
  
 -#ifdef CONFIG_MAC80211_HT_DEBUG
 -      printk(KERN_DEBUG "rx session timer expired on tid %d\n", (u16)*ptid);
 -#endif
 +      ht_vdbg("rx session timer expired on tid %d\n", (u16)*ptid);
 +
        set_bit(*ptid, sta->ampdu_mlme.tid_rx_timer_expired);
        ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work);
  }
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge