]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.8-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Oct 2016 17:42:32 +0000 (13:42 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Oct 2016 17:42:32 +0000 (13:42 -0400)
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

queue-4.8/ath10k-add-wmi_service_periodic_chan_stat_support-wmi-service.patch [new file with mode: 0644]
queue-4.8/ath10k-fix-reporting-channel-survey-data.patch [new file with mode: 0644]
queue-4.8/ath10k-fix-sending-frame-in-management-path-in-push-txq-logic.patch [new file with mode: 0644]
queue-4.8/ath10k-fix-throughput-regression-in-multi-client-mode.patch [new file with mode: 0644]
queue-4.8/i40e-fix-broken-i40e_config_rss_aq-function.patch [new file with mode: 0644]
queue-4.8/i40e-remove-a-stray-unlock.patch [new file with mode: 0644]
queue-4.8/mwifiex-correct-aid-value-during-tdls-setup.patch [new file with mode: 0644]
queue-4.8/mwifiex-fix-failed-to-reconnect-after-interface-disabled-enabled.patch [new file with mode: 0644]
queue-4.8/series

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 (file)
index 0000000..d29be13
--- /dev/null
@@ -0,0 +1,58 @@
+From 64ed5771aca2fcfb8ea440fc679741054011fd7e Mon Sep 17 00:00:00 2001
+From: Tamizh chelvam <c_traja@qti.qualcomm.com>
+Date: Tue, 2 Aug 2016 16:13:14 +0530
+Subject: ath10k: Add WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT wmi service
+
+From: Tamizh chelvam <c_traja@qti.qualcomm.com>
+
+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 <c_traja@qti.qualcomm.com>
+Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..463c00a
--- /dev/null
@@ -0,0 +1,37 @@
+From 77eb3d693182b4eaa88c6ba406fbb92b1f1bd636 Mon Sep 17 00:00:00 2001
+From: Ashok Raj Nagarajan <arnagara@qti.qualcomm.com>
+Date: Fri, 2 Sep 2016 10:59:53 +0530
+Subject: ath10k: fix reporting channel survey data
+
+From: Ashok Raj Nagarajan <arnagara@qti.qualcomm.com>
+
+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 <arnagara@qti.qualcomm.com>
+Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..4e94923
--- /dev/null
@@ -0,0 +1,81 @@
+From e4fd726f21cdae0dc9cea6cbfcb7e27f21393f88 Mon Sep 17 00:00:00 2001
+From: Ashok Raj Nagarajan <arnagara@qti.qualcomm.com>
+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 <arnagara@qti.qualcomm.com>
+
+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 <arnagara@qti.qualcomm.com>
+Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..965cd1a
--- /dev/null
@@ -0,0 +1,54 @@
+From 18f53fe0f30331e826b075709ed7b26b9283235e Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+Date: Fri, 2 Sep 2016 19:46:10 +0300
+Subject: ath10k: fix throughput regression in multi client mode
+
+From: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+
+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 <rmanohar@qti.qualcomm.com>
+Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..d74fe90
--- /dev/null
@@ -0,0 +1,155 @@
+From 776b2e15f8af7900409456292efd45af6de97172 Mon Sep 17 00:00:00 2001
+From: Jacob Keller <jacob.e.keller@intel.com>
+Date: Tue, 19 Jul 2016 16:23:30 -0700
+Subject: i40e: fix broken i40e_config_rss_aq function
+
+From: Jacob Keller <jacob.e.keller@intel.com>
+
+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: [<ffffffffa0090ccf>] 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:[<ffffffffa0090ccf>]  [<ffffffffa0090ccf>] 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]  [<ffffffffa009636f>] i40e_config_rss+0x11f/0x1c0 [i40e]
+[  402.992924]  [<ffffffffa00a1ae0>] i40e_set_rifh+0ic0/0x130 [i40e]
+[  402.994684]  [<ffffffff816d54b7>] ethtool_set_rifh+0x1f7/0x300
+[  402.996446]  [<ffffffff8136d02b>] ? cred_has_capability+0io6b/0x100
+[  402.998203]  [<ffffffff8136d102>] ? selinux_capable+0x12/0x20
+[  402.999968]  [<ffffffff8136277b>] ? security_capable+0x4b/0x70
+[  403.001707]  [<ffffffff816d6da3>] dev_ethtool+0x1423/0x2290
+[  403.003461]  [<ffffffff816eab41>] dev_ioctl+0x191/0io630
+[  403.005186]  [<ffffffff811cf80a>] ? lru_cache_add+0x3a/0i80
+[  403.006942]  [<ffffffff817f2a8e>] ? _raw_spin_unlock+0ie/0x20
+[  403.008691]  [<ffffffff816adb95>] sock_do_ioctl+0x45/0i50
+[  403.010421]  [<ffffffff816ae229>] sock_ioctl+0x209/0x2d0
+[  403.012173]  [<ffffffff81262194>] do_vfs_ioctl+0u4/0io6c0
+[  403.013911]  [<ffffffff81262829>] SyS_ioctl+0x79/0x90
+[  403.015710]  [<ffffffff817f2e72>] 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  [<ffffffffa0090ccf>] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e]
+[  403.023395]  RSP <ffff8800b340ba90>
+[  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 <jacob.e.keller@intel.com>
+Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..045b5d7
--- /dev/null
@@ -0,0 +1,32 @@
+From be0cb0a66a1d426f7cd9b170c008725044ae147a Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Wed, 3 Aug 2016 22:01:07 +0300
+Subject: i40e: remove a stray unlock
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+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 <dan.carpenter@oracle.com>
+Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..cf25322
--- /dev/null
@@ -0,0 +1,36 @@
+From b64db1b252e9974a43a51ba083fa7d03e4716167 Mon Sep 17 00:00:00 2001
+From: Xinming Hu <huxm@marvell.com>
+Date: Tue, 9 Aug 2016 20:20:44 +0530
+Subject: mwifiex: correct aid value during tdls setup
+
+From: Xinming Hu <huxm@marvell.com>
+
+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 <huxm@marvell.com>
+Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..4eafe77
--- /dev/null
@@ -0,0 +1,39 @@
+From c8ccf3ade7851054f82bf88f5fcd393a394038a3 Mon Sep 17 00:00:00 2001
+From: Amitkumar Karwar <akarwar@marvell.com>
+Date: Mon, 25 Jul 2016 21:21:06 +0530
+Subject: mwifiex: fix failed to reconnect after interface disabled/enabled
+
+From: Amitkumar Karwar <akarwar@marvell.com>
+
+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 <akarwar@marvell.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
index 08e4a35e3cec56182228016f67492a1ba4e2bdbb..90f77e1146bf3041650e46f656cff5f0809efe72 100644 (file)
@@ -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