From: Greg Kroah-Hartman Date: Fri, 28 Oct 2016 17:42:32 +0000 (-0400) Subject: 4.8-stable patches X-Git-Tag: v4.4.29~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f3ef7e41fb0f767481d60c6a96f99aea099667b8;p=thirdparty%2Fkernel%2Fstable-queue.git 4.8-stable patches added patches: ath10k-add-wmi_service_periodic_chan_stat_support-wmi-service.patch ath10k-fix-reporting-channel-survey-data.patch ath10k-fix-sending-frame-in-management-path-in-push-txq-logic.patch ath10k-fix-throughput-regression-in-multi-client-mode.patch i40e-fix-broken-i40e_config_rss_aq-function.patch i40e-remove-a-stray-unlock.patch mwifiex-correct-aid-value-during-tdls-setup.patch mwifiex-fix-failed-to-reconnect-after-interface-disabled-enabled.patch --- diff --git a/queue-4.8/ath10k-add-wmi_service_periodic_chan_stat_support-wmi-service.patch b/queue-4.8/ath10k-add-wmi_service_periodic_chan_stat_support-wmi-service.patch new file mode 100644 index 00000000000..d29be1320b4 --- /dev/null +++ b/queue-4.8/ath10k-add-wmi_service_periodic_chan_stat_support-wmi-service.patch @@ -0,0 +1,58 @@ +From 64ed5771aca2fcfb8ea440fc679741054011fd7e Mon Sep 17 00:00:00 2001 +From: Tamizh chelvam +Date: Tue, 2 Aug 2016 16:13:14 +0530 +Subject: ath10k: Add WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT wmi service + +From: Tamizh chelvam + +commit 64ed5771aca2fcfb8ea440fc679741054011fd7e upstream. + +WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT service has missed in +the commit 7e247a9e88dc ("ath10k: add dynamic tx mode switch +config support for qca4019"). This patch adds the service to +avoid mismatch between host and target. + +Fixes: 7e247a9e88dc ("ath10k: add dynamic tx mode switch config support for qca4019") +Signed-off-by: Tamizh chelvam +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath10k/wmi.h | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/net/wireless/ath/ath10k/wmi.h ++++ b/drivers/net/wireless/ath/ath10k/wmi.h +@@ -180,6 +180,7 @@ enum wmi_service { + WMI_SERVICE_MESH_NON_11S, + WMI_SERVICE_PEER_STATS, + WMI_SERVICE_RESTRT_CHNL_SUPPORT, ++ WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, + WMI_SERVICE_TX_MODE_PUSH_ONLY, + WMI_SERVICE_TX_MODE_PUSH_PULL, + WMI_SERVICE_TX_MODE_DYNAMIC, +@@ -305,6 +306,7 @@ enum wmi_10_4_service { + WMI_10_4_SERVICE_RESTRT_CHNL_SUPPORT, + WMI_10_4_SERVICE_PEER_STATS, + WMI_10_4_SERVICE_MESH_11S, ++ WMI_10_4_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, + WMI_10_4_SERVICE_TX_MODE_PUSH_ONLY, + WMI_10_4_SERVICE_TX_MODE_PUSH_PULL, + WMI_10_4_SERVICE_TX_MODE_DYNAMIC, +@@ -402,6 +404,7 @@ static inline char *wmi_service_name(int + SVCSTR(WMI_SERVICE_MESH_NON_11S); + SVCSTR(WMI_SERVICE_PEER_STATS); + SVCSTR(WMI_SERVICE_RESTRT_CHNL_SUPPORT); ++ SVCSTR(WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT); + SVCSTR(WMI_SERVICE_TX_MODE_PUSH_ONLY); + SVCSTR(WMI_SERVICE_TX_MODE_PUSH_PULL); + SVCSTR(WMI_SERVICE_TX_MODE_DYNAMIC); +@@ -652,6 +655,8 @@ static inline void wmi_10_4_svc_map(cons + WMI_SERVICE_PEER_STATS, len); + SVCMAP(WMI_10_4_SERVICE_MESH_11S, + WMI_SERVICE_MESH_11S, len); ++ SVCMAP(WMI_10_4_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, ++ WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, len); + SVCMAP(WMI_10_4_SERVICE_TX_MODE_PUSH_ONLY, + WMI_SERVICE_TX_MODE_PUSH_ONLY, len); + SVCMAP(WMI_10_4_SERVICE_TX_MODE_PUSH_PULL, diff --git a/queue-4.8/ath10k-fix-reporting-channel-survey-data.patch b/queue-4.8/ath10k-fix-reporting-channel-survey-data.patch new file mode 100644 index 00000000000..463c00aac4b --- /dev/null +++ b/queue-4.8/ath10k-fix-reporting-channel-survey-data.patch @@ -0,0 +1,37 @@ +From 77eb3d693182b4eaa88c6ba406fbb92b1f1bd636 Mon Sep 17 00:00:00 2001 +From: Ashok Raj Nagarajan +Date: Fri, 2 Sep 2016 10:59:53 +0530 +Subject: ath10k: fix reporting channel survey data + +From: Ashok Raj Nagarajan + +commit 77eb3d693182b4eaa88c6ba406fbb92b1f1bd636 upstream. + +When user requests for survey dump data, driver is providing wrong survey +information. This information we sent is the survey data that we have +collected during previous user request. + +This issue occurs because we request survey dump for wrong channel. With +this change, we correctly display the correct and current survey +information to userspace. + +Fixes: fa7937e3d5c2 ("ath10k: update bss channel survey information") +Signed-off-by: Ashok Raj Nagarajan +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath10k/mac.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath10k/mac.c ++++ b/drivers/net/wireless/ath/ath10k/mac.c +@@ -6558,7 +6558,7 @@ static int ath10k_get_survey(struct ieee + goto exit; + } + +- ath10k_mac_update_bss_chan_survey(ar, survey->channel); ++ ath10k_mac_update_bss_chan_survey(ar, &sband->channels[idx]); + + spin_lock_bh(&ar->data_lock); + memcpy(survey, ar_survey, sizeof(*survey)); diff --git a/queue-4.8/ath10k-fix-sending-frame-in-management-path-in-push-txq-logic.patch b/queue-4.8/ath10k-fix-sending-frame-in-management-path-in-push-txq-logic.patch new file mode 100644 index 00000000000..4e94923d349 --- /dev/null +++ b/queue-4.8/ath10k-fix-sending-frame-in-management-path-in-push-txq-logic.patch @@ -0,0 +1,81 @@ +From e4fd726f21cdae0dc9cea6cbfcb7e27f21393f88 Mon Sep 17 00:00:00 2001 +From: Ashok Raj Nagarajan +Date: Thu, 18 Aug 2016 15:30:04 +0530 +Subject: ath10k: fix sending frame in management path in push txq logic + +From: Ashok Raj Nagarajan + +commit e4fd726f21cdae0dc9cea6cbfcb7e27f21393f88 upstream. + +In the wake tx queue path, we are not checking if the frame to be sent +takes management path or not. For eg. QOS null func frame coming here will +take the management path. Since we are not incrementing the descriptor +counter (num_pending_mgmt_tx) w.r.t tx management, on tx completion it is +possible to see negative values. + +When the above counter reaches a negative value, we will not be sending a +probe response out. + + if (is_presp && + ar->hw_params.max_probe_resp_desc_thres < htt->num_pending_mgmt_tx) + +For IPQ4019, max_probe_resp_desc_thres (u32) is 24 is compared against +num_pending_mgmt_tx (int) and the above condtions comes true if the counter +is negative and we drop the probe response. + +To avoid this, check on the wake tx queue path as well for the tx path of +the frame and increment the appropriate counters + +Fixes: cac085524cf1 "ath10k: move mgmt descriptor limit handle under mgmt_tx" +Signed-off-by: Ashok Raj Nagarajan +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath10k/mac.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +--- a/drivers/net/wireless/ath/ath10k/mac.c ++++ b/drivers/net/wireless/ath/ath10k/mac.c +@@ -3777,7 +3777,9 @@ int ath10k_mac_tx_push_txq(struct ieee80 + enum ath10k_hw_txrx_mode txmode; + enum ath10k_mac_tx_path txpath; + struct sk_buff *skb; ++ struct ieee80211_hdr *hdr; + size_t skb_len; ++ bool is_mgmt, is_presp; + int ret; + + spin_lock_bh(&ar->htt.tx_lock); +@@ -3801,6 +3803,22 @@ int ath10k_mac_tx_push_txq(struct ieee80 + skb_len = skb->len; + txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb); + txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode); ++ is_mgmt = (txpath == ATH10K_MAC_TX_HTT_MGMT); ++ ++ if (is_mgmt) { ++ hdr = (struct ieee80211_hdr *)skb->data; ++ is_presp = ieee80211_is_probe_resp(hdr->frame_control); ++ ++ spin_lock_bh(&ar->htt.tx_lock); ++ ret = ath10k_htt_tx_mgmt_inc_pending(htt, is_mgmt, is_presp); ++ ++ if (ret) { ++ ath10k_htt_tx_dec_pending(htt); ++ spin_unlock_bh(&ar->htt.tx_lock); ++ return ret; ++ } ++ spin_unlock_bh(&ar->htt.tx_lock); ++ } + + ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb); + if (unlikely(ret)) { +@@ -3808,6 +3826,8 @@ int ath10k_mac_tx_push_txq(struct ieee80 + + spin_lock_bh(&ar->htt.tx_lock); + ath10k_htt_tx_dec_pending(htt); ++ if (is_mgmt) ++ ath10k_htt_tx_mgmt_dec_pending(htt); + spin_unlock_bh(&ar->htt.tx_lock); + + return ret; diff --git a/queue-4.8/ath10k-fix-throughput-regression-in-multi-client-mode.patch b/queue-4.8/ath10k-fix-throughput-regression-in-multi-client-mode.patch new file mode 100644 index 00000000000..965cd1a1270 --- /dev/null +++ b/queue-4.8/ath10k-fix-throughput-regression-in-multi-client-mode.patch @@ -0,0 +1,54 @@ +From 18f53fe0f30331e826b075709ed7b26b9283235e Mon Sep 17 00:00:00 2001 +From: Rajkumar Manoharan +Date: Fri, 2 Sep 2016 19:46:10 +0300 +Subject: ath10k: fix throughput regression in multi client mode + +From: Rajkumar Manoharan + +commit 18f53fe0f30331e826b075709ed7b26b9283235e upstream. + +commit 7a0adc83f34d ("ath10k: improve tx scheduling") is causing +severe throughput drop in multi client mode. This issue is originally +reported in veriwave setup with 50 clients with TCP downlink traffic. +While increasing number of clients, the average throughput drops +gradually. With 50 clients, the combined peak throughput is decreased +to 98 Mbps whereas reverting given commit restored it to 550 Mbps. + +Processing txqs for every tx completion is causing overhead. Ideally for +management frame tx completion, pending txqs processing can be avoided. +The change partly reverts the commit "ath10k: improve tx scheduling". +Processing pending txqs after all skbs tx completion will yeild enough +room to burst tx frames. + +Fixes: 7a0adc83f34d ("ath10k: improve tx scheduling") +Signed-off-by: Rajkumar Manoharan +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath10k/htt_rx.c | 2 ++ + drivers/net/wireless/ath/ath10k/txrx.c | 2 -- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/ath/ath10k/htt_rx.c ++++ b/drivers/net/wireless/ath/ath10k/htt_rx.c +@@ -2394,6 +2394,8 @@ static void ath10k_htt_txrx_compl_task(u + skb_queue_splice_init(&htt->rx_in_ord_compl_q, &rx_ind_q); + spin_unlock_irqrestore(&htt->rx_in_ord_compl_q.lock, flags); + ++ ath10k_mac_tx_push_pending(ar); ++ + spin_lock_irqsave(&htt->tx_fetch_ind_q.lock, flags); + skb_queue_splice_init(&htt->tx_fetch_ind_q, &tx_ind_q); + spin_unlock_irqrestore(&htt->tx_fetch_ind_q.lock, flags); +--- a/drivers/net/wireless/ath/ath10k/txrx.c ++++ b/drivers/net/wireless/ath/ath10k/txrx.c +@@ -119,8 +119,6 @@ int ath10k_txrx_tx_unref(struct ath10k_h + ieee80211_tx_status(htt->ar->hw, msdu); + /* we do not own the msdu anymore */ + +- ath10k_mac_tx_push_pending(ar); +- + return 0; + } + diff --git a/queue-4.8/i40e-fix-broken-i40e_config_rss_aq-function.patch b/queue-4.8/i40e-fix-broken-i40e_config_rss_aq-function.patch new file mode 100644 index 00000000000..d74fe90004b --- /dev/null +++ b/queue-4.8/i40e-fix-broken-i40e_config_rss_aq-function.patch @@ -0,0 +1,155 @@ +From 776b2e15f8af7900409456292efd45af6de97172 Mon Sep 17 00:00:00 2001 +From: Jacob Keller +Date: Tue, 19 Jul 2016 16:23:30 -0700 +Subject: i40e: fix broken i40e_config_rss_aq function + +From: Jacob Keller + +commit 776b2e15f8af7900409456292efd45af6de97172 upstream. + +X722 hardware requires using the admin queue to configure RSS. This +function was previously re-written in commit e69ff813af35 ("i40e: rework +the functions to configure RSS with similar parameters"). +However, the previous refactor did not work correctly for a few reasons + +(a) it does not check whether seed is NULL before using it, resulting in +a NULL pointer dereference + +[ 402.954721] BUG: unable to handle kernel NULL pointer dereference at (null) +[ 402.955568] IP: [] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e] +[ 402.956402] PGD ad610067 PUD accc0067 PMD 0 +[ 402.957235] Oops: 0000 [#1] SMP +[ 402.958064] Modules linked in: ip6t_rpfilter ip6t_REJECT nf_reject_ipv6 xt_conntrack ip_set nfnetlink ebtable_filter ebtable_ +broute bridge stp llc ebtable_nat ebtables ip6table_mangle ip6table_raw ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv +6 ip6table_security ip6table_filter ip6_tables iptable_mangle iptable_raw iptable_nat nf_conntrack_ipv4_ nf_defrag_ipv4_ nf_nat_ip +v4_ nf_nat nf_conntrack iptable_security intel_rapl i86_kg_temp_thermal coretemp kvm_intel kvm irqbypass crct10dif_clMl crc32_ +pclMl ghash_clMlni_intel iTCO_wdt iTCO_vendor_support shpchp sb_edac dcdbas pcspkr joydev ipmi_devintf wmi edac_core ipmi_ssif + acpi_ad acpi_ower_meter ipmi_si ipmi_msghandler mei_me nfsd lpc_ich mei ioatdma tpm_tis auth_rpcgss tpm nfs_acl lockd grace s +unrpc ifs nngag200 i2c_algo_bit drm_kms_helper ttm drm iigbe bnx2x i40e dca mdio ptp pps_core libcrc32c fjes crc32c_intel +[ 402.965563] CPU: 22 PID: 2461 Conm: ethtool Not tainted 4.6.0-rc7_1.2-ABNidQ+ #20 +[ 402.966719] Hardware name: Dell Inc. PowerEdge R720/0C4Y3R, BIOS 2.5.2 01/28/2015 +[ 402.967862] task: ffff880219b51dc0 ti: ffff8800b3408000 task.ti: ffff8800b3408000 +[ 402.969046] RIP: 0010:[] [] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e] +[ 402.970339] RSP: 0018:ffff8800b340ba90 EFLAGS: 00010246 +[ 402.971616] RAX: 0000000000000000 RBX: ffff88042ec14000 RCX: 0000000000000200 +[ 402.972961] RDX: ffff880428eb9200 RSI: 0000000000000000 RDI: ffff88042ec14000 +[ 402.974312] RBP: ffff8800b340baf8 R08: ffff880237ada8f0 R09: ffff880428eb9200 +[ 402.975709] R10: ffff880428eb9200 R11: 0000000000000000 R12: ffff88042ec2e000 +[ 402.977104] R13: ffff88042ec2e000 R14: ffff88042ec14000 R15: ffff88022ea00800 +[ 402.978541] FS: 00007f84fd054700(0000) GS:ffff880237ac0000(0000) knlGS:0000000000000000 +[ 402.980003] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +[ 402.981508] CR2: 0000000000000000 CR3: 000000003289e000 CR4: 00000000000406e0 +[ 402.983028] Stack: +[ 402.984578] 0000000002000200 0000000000000000 ffff88023ffeda68 ffff88023ffef000 +[ 402.986187] 0000000000000268 ffff8800b340bbf8 ffff88023ffedd80 0000000088ce4f1d +[ 402.987844] ffff88042ec14000 ffff88022ea00800 ffff88042ec2e000 ffff88042ec14000 +[ 402.989509] Call Trace: +[ 402.991200] [] i40e_config_rss+0x11f/0x1c0 [i40e] +[ 402.992924] [] i40e_set_rifh+0ic0/0x130 [i40e] +[ 402.994684] [] ethtool_set_rifh+0x1f7/0x300 +[ 402.996446] [] ? cred_has_capability+0io6b/0x100 +[ 402.998203] [] ? selinux_capable+0x12/0x20 +[ 402.999968] [] ? security_capable+0x4b/0x70 +[ 403.001707] [] dev_ethtool+0x1423/0x2290 +[ 403.003461] [] dev_ioctl+0x191/0io630 +[ 403.005186] [] ? lru_cache_add+0x3a/0i80 +[ 403.006942] [] ? _raw_spin_unlock+0ie/0x20 +[ 403.008691] [] sock_do_ioctl+0x45/0i50 +[ 403.010421] [] sock_ioctl+0x209/0x2d0 +[ 403.012173] [] do_vfs_ioctl+0u4/0io6c0 +[ 403.013911] [] SyS_ioctl+0x79/0x90 +[ 403.015710] [] entry_SYSCALL_64_fastpath+0x1a/0u4 +[ 403.017500] Code: 90 55 48 89 e5 41 57 41 56 41 55 41 54 53 48 89 fb 48 83 ec 40 4c 8b a7 e0 05 00 00 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 <48> 8b 06 41 0f b7 bc 24 f2 0f 00 00 48 89 45 9c 48 8b 46 08 48 +[ 403.021454] RIP [] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e] +[ 403.023395] RSP +[ 403.025271] CR2: 0000000000000000 +[ 403.027169] ---[ end trace 64561b528cf61cf0 ]--- + +(b) it does not even bother to use the passed in *lut parameter which +defines the requested lookup table. Instead it uses its own round robin +table. + +Fix these issues by re-writing it to be similar to i40e_config_rss_reg +and i40e_get_rss_aq. + +Fixes: e69ff813af35 ("i40e: rework the functions to configure RSS with similar parameters", 2015-10-21) +Signed-off-by: Jacob Keller +Tested-by: Andrew Bowers +Signed-off-by: Jeff Kirsher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/intel/i40e/i40e_main.c | 57 +++++++++++----------------- + 1 file changed, 23 insertions(+), 34 deletions(-) + +--- a/drivers/net/ethernet/intel/i40e/i40e_main.c ++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c +@@ -7990,45 +7990,34 @@ static int i40e_setup_misc_vector(struct + static int i40e_config_rss_aq(struct i40e_vsi *vsi, const u8 *seed, + u8 *lut, u16 lut_size) + { +- struct i40e_aqc_get_set_rss_key_data rss_key; + struct i40e_pf *pf = vsi->back; + struct i40e_hw *hw = &pf->hw; +- bool pf_lut = false; +- u8 *rss_lut; +- int ret, i; ++ int ret = 0; + +- memcpy(&rss_key, seed, sizeof(rss_key)); +- +- rss_lut = kzalloc(pf->rss_table_size, GFP_KERNEL); +- if (!rss_lut) +- return -ENOMEM; +- +- /* Populate the LUT with max no. of queues in round robin fashion */ +- for (i = 0; i < vsi->rss_table_size; i++) +- rss_lut[i] = i % vsi->rss_size; +- +- ret = i40e_aq_set_rss_key(hw, vsi->id, &rss_key); +- if (ret) { +- dev_info(&pf->pdev->dev, +- "Cannot set RSS key, err %s aq_err %s\n", +- i40e_stat_str(&pf->hw, ret), +- i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status)); +- goto config_rss_aq_out; ++ if (seed) { ++ struct i40e_aqc_get_set_rss_key_data *seed_dw = ++ (struct i40e_aqc_get_set_rss_key_data *)seed; ++ ret = i40e_aq_set_rss_key(hw, vsi->id, seed_dw); ++ if (ret) { ++ dev_info(&pf->pdev->dev, ++ "Cannot set RSS key, err %s aq_err %s\n", ++ i40e_stat_str(hw, ret), ++ i40e_aq_str(hw, hw->aq.asq_last_status)); ++ return ret; ++ } + } ++ if (lut) { ++ bool pf_lut = vsi->type == I40E_VSI_MAIN ? true : false; + +- if (vsi->type == I40E_VSI_MAIN) +- pf_lut = true; +- +- ret = i40e_aq_set_rss_lut(hw, vsi->id, pf_lut, rss_lut, +- vsi->rss_table_size); +- if (ret) +- dev_info(&pf->pdev->dev, +- "Cannot set RSS lut, err %s aq_err %s\n", +- i40e_stat_str(&pf->hw, ret), +- i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status)); +- +-config_rss_aq_out: +- kfree(rss_lut); ++ ret = i40e_aq_set_rss_lut(hw, vsi->id, pf_lut, lut, lut_size); ++ if (ret) { ++ dev_info(&pf->pdev->dev, ++ "Cannot set RSS lut, err %s aq_err %s\n", ++ i40e_stat_str(hw, ret), ++ i40e_aq_str(hw, hw->aq.asq_last_status)); ++ return ret; ++ } ++ } + return ret; + } + diff --git a/queue-4.8/i40e-remove-a-stray-unlock.patch b/queue-4.8/i40e-remove-a-stray-unlock.patch new file mode 100644 index 00000000000..045b5d78d5c --- /dev/null +++ b/queue-4.8/i40e-remove-a-stray-unlock.patch @@ -0,0 +1,32 @@ +From be0cb0a66a1d426f7cd9b170c008725044ae147a Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Wed, 3 Aug 2016 22:01:07 +0300 +Subject: i40e: remove a stray unlock + +From: Dan Carpenter + +commit be0cb0a66a1d426f7cd9b170c008725044ae147a upstream. + +We shifted the locking around a bit but forgot to delete this unlock so +now it can unlock twice. + +Fixes: cd3be169a5ff ('i40e: Move the mutex lock in i40e_client_unregister') +Signed-off-by: Dan Carpenter +Tested-by: Andrew Bowers +Signed-off-by: Jeff Kirsher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/intel/i40e/i40e_client.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/net/ethernet/intel/i40e/i40e_client.c ++++ b/drivers/net/ethernet/intel/i40e/i40e_client.c +@@ -1009,7 +1009,6 @@ int i40e_unregister_client(struct i40e_c + if (!i40e_client_is_registered(client)) { + pr_info("i40e: Client %s has not been registered\n", + client->name); +- mutex_unlock(&i40e_client_mutex); + ret = -ENODEV; + goto out; + } diff --git a/queue-4.8/mwifiex-correct-aid-value-during-tdls-setup.patch b/queue-4.8/mwifiex-correct-aid-value-during-tdls-setup.patch new file mode 100644 index 00000000000..cf253222fc3 --- /dev/null +++ b/queue-4.8/mwifiex-correct-aid-value-during-tdls-setup.patch @@ -0,0 +1,36 @@ +From b64db1b252e9974a43a51ba083fa7d03e4716167 Mon Sep 17 00:00:00 2001 +From: Xinming Hu +Date: Tue, 9 Aug 2016 20:20:44 +0530 +Subject: mwifiex: correct aid value during tdls setup + +From: Xinming Hu + +commit b64db1b252e9974a43a51ba083fa7d03e4716167 upstream. + +AID gets updated during TDLS setup, but modified value isn't reflected +in "priv->assoc_rsp_buf". This causes TDLS setup failure. The problem is +fixed here. + +Fixes: 4aff53ef18e4a4 ("mwifiex: parsing aid while receiving..") +Signed-off-by: Xinming Hu +Signed-off-by: Amitkumar Karwar +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/marvell/mwifiex/join.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/net/wireless/marvell/mwifiex/join.c ++++ b/drivers/net/wireless/marvell/mwifiex/join.c +@@ -669,9 +669,8 @@ int mwifiex_ret_802_11_associate(struct + priv->assoc_rsp_size = min(le16_to_cpu(resp->size) - S_DS_GEN, + sizeof(priv->assoc_rsp_buf)); + +- memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size); +- + assoc_rsp->a_id = cpu_to_le16(aid); ++ memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size); + + if (status_code) { + priv->adapter->dbg.num_cmd_assoc_failure++; diff --git a/queue-4.8/mwifiex-fix-failed-to-reconnect-after-interface-disabled-enabled.patch b/queue-4.8/mwifiex-fix-failed-to-reconnect-after-interface-disabled-enabled.patch new file mode 100644 index 00000000000..4eafe773574 --- /dev/null +++ b/queue-4.8/mwifiex-fix-failed-to-reconnect-after-interface-disabled-enabled.patch @@ -0,0 +1,39 @@ +From c8ccf3ade7851054f82bf88f5fcd393a394038a3 Mon Sep 17 00:00:00 2001 +From: Amitkumar Karwar +Date: Mon, 25 Jul 2016 21:21:06 +0530 +Subject: mwifiex: fix failed to reconnect after interface disabled/enabled + +From: Amitkumar Karwar + +commit c8ccf3ade7851054f82bf88f5fcd393a394038a3 upstream. + +Recent patch "mwifiex: fix NULL pointer" skips extended scan event +handling when suspend is in progress. It created a problem for scan +after interface disabled/enabled case. + +This patch solves the problem by checking netif_running() status. + +Fixes:16d25da94f3d654 ("mwifiex: fix NULL pointer dereference during suspend") +Signed-off-by: Amitkumar Karwar +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/marvell/mwifiex/sta_event.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/marvell/mwifiex/sta_event.c ++++ b/drivers/net/wireless/marvell/mwifiex/sta_event.c +@@ -708,7 +708,11 @@ int mwifiex_process_sta_event(struct mwi + + case EVENT_EXT_SCAN_REPORT: + mwifiex_dbg(adapter, EVENT, "event: EXT_SCAN Report\n"); +- if (adapter->ext_scan && !priv->scan_aborting) ++ /* We intend to skip this event during suspend, but handle ++ * it in interface disabled case ++ */ ++ if (adapter->ext_scan && (!priv->scan_aborting || ++ !netif_running(priv->netdev))) + ret = mwifiex_handle_event_ext_scan_report(priv, + adapter->event_skb->data); + diff --git a/queue-4.8/series b/queue-4.8/series index 08e4a35e3ce..90f77e1146b 100644 --- a/queue-4.8/series +++ b/queue-4.8/series @@ -44,3 +44,11 @@ coresight-remove-erroneous-dma_free_coherent-in-tmc_probe.patch uio-fix-dmem_region_start-computation.patch arm-clk-imx35-fix-name-for-ckil-clk.patch spi-spi-fsl-dspi-drop-extra-spi_master_put-in-device-remove-function.patch +i40e-remove-a-stray-unlock.patch +i40e-fix-broken-i40e_config_rss_aq-function.patch +mwifiex-correct-aid-value-during-tdls-setup.patch +mwifiex-fix-failed-to-reconnect-after-interface-disabled-enabled.patch +ath10k-add-wmi_service_periodic_chan_stat_support-wmi-service.patch +ath10k-fix-sending-frame-in-management-path-in-push-txq-logic.patch +ath10k-fix-reporting-channel-survey-data.patch +ath10k-fix-throughput-regression-in-multi-client-mode.patch