From: John W. Linville Date: Wed, 6 Jun 2012 18:40:06 +0000 (-0400) Subject: Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=7c9c46c16d2d1d232f3296924162de293477f017;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git Merge branch 'master' of git://git./linux/kernel/git/linville/wireless Conflicts: drivers/net/wireless/iwlwifi/iwl-drv.c --- 7c9c46c16d2d1d232f3296924162de293477f017 diff --cc drivers/net/wireless/iwlwifi/iwl-drv.c index cdfdfaec395e,fac67a526a30..49df0e9d5c5f --- a/drivers/net/wireless/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/iwlwifi/iwl-drv.c @@@ -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: diff --cc net/mac80211/agg-rx.c index a096b0dae37d,c649188314cc..32ef11d69798 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c @@@ -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); }