Re: [PATCH 3/4 v1] Continue breaking down to smaller functions
Hi, [auto build test WARNING on mac80211/master] [also build test WARNING on v4.7-rc7] [cannot apply to mac80211-next/master next-20160712] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Alex-Briskin/Refactoring-ieee80211_iface_work/20160714-042301 base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git master config: sparc64-allmodconfig (attached as .config) compiler: sparc64-linux-gnu-gcc (Debian 5.3.1-8) 5.3.1 20160205 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=sparc64 All warnings (new ones prefixed by >>): net/mac80211/iface.c: In function 'ieee80211_iface_work': >> net/mac80211/iface.c:1333:19: warning: unused variable 'sta' >> [-Wunused-variable] struct sta_info *sta; ^ vim +/sta +1333 net/mac80211/iface.c 1317 WLAN_REASON_QSTA_REQUIRE_SETUP, 1318 true); 1319 } 1320 mutex_unlock(>sta_mtx); 1321 } else { 1322 return false; 1323 } 1324 return true; 1325 } 1326 1327 static void ieee80211_iface_work(struct work_struct *work) 1328 { 1329 struct ieee80211_sub_if_data *sdata = 1330 container_of(work, struct ieee80211_sub_if_data, work); 1331 struct ieee80211_local *local = sdata->local; 1332 struct sk_buff *skb; > 1333 struct sta_info *sta; 1334 1335 if (!ieee80211_sdata_running(sdata)) 1336 return; 1337 1338 if (test_bit(SCAN_SW_SCANNING, >scanning)) 1339 return; 1340 1341 if (!ieee80211_can_run_worker(local)) --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
[PATCH 2/4 v1] even better readability
Further improve readability by replacing if else with switch case Signed-off-by: Alex Briskin--- net/mac80211/iface.c | 15 ++- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index a68cbac..1793ad2 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1207,13 +1207,16 @@ static bool ieee80211_is_skb_handled_by_pkt_type(struct sk_buff *skb, struct ieee80211_local *local = sdata->local; struct sta_info *sta; - if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) { + switch (skb->pkt_type) { + case IEEE80211_SDATA_QUEUE_AGG_START: ra_tid = (void *)>cb; ieee80211_start_tx_ba_cb(>vif, ra_tid->ra, ra_tid->tid); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) { + break; + case IEEE80211_SDATA_QUEUE_AGG_STOP: ra_tid = (void *)>cb; ieee80211_stop_tx_ba_cb(>vif, ra_tid->ra, ra_tid->tid); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) { + break; + case IEEE80211_SDATA_QUEUE_RX_AGG_START: rx_agg = (void *)>cb; mutex_lock(>sta_mtx); sta = sta_info_get_bss(sdata, rx_agg->addr); @@ -1223,7 +1226,8 @@ static bool ieee80211_is_skb_handled_by_pkt_type(struct sk_buff *skb, IEEE80211_MAX_AMPDU_BUF, false, true); mutex_unlock(>sta_mtx); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_STOP) { + break; + case IEEE80211_SDATA_QUEUE_RX_AGG_STOP: rx_agg = (void *)>cb; mutex_lock(>sta_mtx); sta = sta_info_get_bss(sdata, rx_agg->addr); @@ -1233,7 +1237,8 @@ static bool ieee80211_is_skb_handled_by_pkt_type(struct sk_buff *skb, WLAN_BACK_RECIPIENT, 0, false); mutex_unlock(>sta_mtx); - } else { + break; + default: return false; } /*will return true if pkt_type found and handled */ -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 0/4 v1] Refactoring ieee80211_iface_work
Hi All, This is my first patch(s). I've decided to refactor ieee80211_iface_work function and break it down to smaller better defined function. I think these changes make the code much more readable and do not impose no overhead. I've tested these patches with sparse and checkpatch.pl Function names might not be descriptive enough. Hope you find this useful. Alex Briskin (4): 0) [28e464b19aaaba90c8946fb979b58709d55dffcf] Added new function ieee80211_is_skb_handled_by_pkt_type and moved some code from ieee80211_iface_work to reduce complexity and improve readability 1) [486e3d5abb4dc6361cdd923254a2b68d43dcdaba] Refactored code in ieee80211_is_skb_handled_by_pkt_type. "if () {} else if ()" replaced by switch case. 2) [9ef2eab8e831420bc6748a4466ffa6b7a99bf447] Added new function ieee80211_is_handled_by_frame_control and moved some code from ieee80211_iface_work to it. 3) [1de8cdf9a0c05c6a21d9e43e5b55862f6efcf450] Added new function ieee80211_handle_by_vif_type with code from ieee80211_iface_work. At this point ieee80211_iface_work seems to me much more readable and better understood. net/mac80211/iface.c | 264 +-- 1 file changed, 150 insertions(+), 114 deletions(-) -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 4/4 v1] Simple and well understood logic
Now the logic is obvious - if skb not handled by pkt type and not handled by frame control it is handled by vif type and then released Signed-off-by: Alex Briskin--- net/mac80211/iface.c | 44 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 41c3bd0..76e8c6a 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1324,6 +1324,27 @@ static bool ieee80211_is_handled_by_frame_control(struct sk_buff *skb, return true; } +static void ieee80211_handle_by_vif_type(struct sk_buff *skb, +struct ieee80211_sub_if_data *sdata) +{ + switch (sdata->vif.type) { + case NL80211_IFTYPE_STATION: + ieee80211_sta_rx_queued_mgmt(sdata, skb); + break; + case NL80211_IFTYPE_ADHOC: + ieee80211_ibss_rx_queued_mgmt(sdata, skb); + break; + case NL80211_IFTYPE_MESH_POINT: + if (!ieee80211_vif_is_mesh(>vif)) + break; + ieee80211_mesh_rx_queued_mgmt(sdata, skb); + break; + default: + WARN(1, "frame for unexpected interface type"); + break; + } +} + static void ieee80211_iface_work(struct work_struct *work) { struct ieee80211_sub_if_data *sdata = @@ -1343,28 +1364,11 @@ static void ieee80211_iface_work(struct work_struct *work) /* first process frames */ while ((skb = skb_dequeue(>skb_queue))) { - if (ieee80211_is_skb_handled_by_pkt_type(skb, sdata)) { - goto free_skb; - } else if (ieee80211_is_handled_by_frame_control(skb, sdata)) { - goto free_skb; - } else switch (sdata->vif.type) { - case NL80211_IFTYPE_STATION: - ieee80211_sta_rx_queued_mgmt(sdata, skb); - break; - case NL80211_IFTYPE_ADHOC: - ieee80211_ibss_rx_queued_mgmt(sdata, skb); - break; - case NL80211_IFTYPE_MESH_POINT: - if (!ieee80211_vif_is_mesh(>vif)) - break; - ieee80211_mesh_rx_queued_mgmt(sdata, skb); - break; - default: - WARN(1, "frame for unexpected interface type"); - break; + if (!ieee80211_is_skb_handled_by_pkt_type(skb, sdata) && + !ieee80211_is_handled_by_frame_control(skb, sdata)) { + ieee80211_handle_by_vif_type(skb, sdata); } -free_skb: kfree_skb(skb); } -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 3/4 v1] Continue breaking down to smaller functions
This commit contains unhandled checkpatch warnings in code moved from ieee80211_iface_work Signed-off-by: Alex Briskin--- net/mac80211/iface.c | 150 +++ 1 file changed, 81 insertions(+), 69 deletions(-) diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 1793ad2..41c3bd0 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1245,6 +1245,85 @@ static bool ieee80211_is_skb_handled_by_pkt_type(struct sk_buff *skb, return true; } +static bool ieee80211_is_handled_by_frame_control(struct sk_buff *skb, + struct ieee80211_sub_if_data + *sdata) +{ + struct ieee80211_local *local = sdata->local; + struct sta_info *sta; + struct ieee80211_mgmt *mgmt = (void *)skb->data; + + if (ieee80211_is_action(mgmt->frame_control) && + mgmt->u.action.category == WLAN_CATEGORY_BACK) { + int len = skb->len; + + mutex_lock(>sta_mtx); + sta = sta_info_get_bss(sdata, mgmt->sa); + if (sta) { + switch (mgmt->u.action.u.addba_req.action_code) { + case WLAN_ACTION_ADDBA_REQ: + ieee80211_process_addba_request(local, sta, + mgmt, len); + break; + case WLAN_ACTION_ADDBA_RESP: + ieee80211_process_addba_resp(local, sta, +mgmt, len); + break; + case WLAN_ACTION_DELBA: + ieee80211_process_delba(sdata, sta, mgmt, len); + break; + default: + WARN_ON(1); + break; + } + } + mutex_unlock(>sta_mtx); + } else if (ieee80211_is_action(mgmt->frame_control) && + mgmt->u.action.category == WLAN_CATEGORY_VHT) { + switch (mgmt->u.action.u.vht_group_notif.action_code) { + case WLAN_VHT_ACTION_GROUPID_MGMT: + ieee80211_process_mu_groups(sdata, mgmt); + break; + default: + WARN_ON(1); + break; + } + } else if (ieee80211_is_data_qos(mgmt->frame_control)) { + struct ieee80211_hdr *hdr = (void *)mgmt; + /* +* So the frame isn't mgmt, but frame_control +* is at the right place anyway, of course, so +* the if statement is correct. +* +* Warn if we have other data frame types here, +* they must not get here. +*/ + WARN_ON(hdr->frame_control & + cpu_to_le16(IEEE80211_STYPE_NULLFUNC)); + WARN_ON(!(hdr->seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG))); + /* +* This was a fragment of a frame, received while +* a block-ack session was active. That cannot be +* right, so terminate the session. +*/ + mutex_lock(>sta_mtx); + sta = sta_info_get_bss(sdata, mgmt->sa); + if (sta) { + u16 tid = *ieee80211_get_qos_ctl(hdr) & + IEEE80211_QOS_CTL_TID_MASK; + + __ieee80211_stop_rx_ba_session(sta, tid, + WLAN_BACK_RECIPIENT, + WLAN_REASON_QSTA_REQUIRE_SETUP, + true); + } + mutex_unlock(>sta_mtx); + } else { + return false; + } + return true; +} + static void ieee80211_iface_work(struct work_struct *work) { struct ieee80211_sub_if_data *sdata = @@ -1264,77 +1343,10 @@ static void ieee80211_iface_work(struct work_struct *work) /* first process frames */ while ((skb = skb_dequeue(>skb_queue))) { - struct ieee80211_mgmt *mgmt = (void *)skb->data; - if (ieee80211_is_skb_handled_by_pkt_type(skb, sdata)) { goto free_skb; - } else if (ieee80211_is_action(mgmt->frame_control) && - mgmt->u.action.category == WLAN_CATEGORY_BACK) { - int len = skb->len; - - mutex_lock(>sta_mtx); - sta = sta_info_get_bss(sdata, mgmt->sa); - if (sta) { - switch (mgmt->u.action.u.addba_req.action_code) { -
[PATCH 1/4 v1] Refactoring ieee80211_iface_work to reduce complexity and improve readability.
No performance impact/overhead expected. The (gcc) compiler optimizes the added function out. Signed-off-by: Alex Briskin--- net/mac80211/iface.c | 75 +++- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index c59af3e..a68cbac 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1198,6 +1198,48 @@ static void ieee80211_if_setup(struct net_device *dev) dev->destructor = ieee80211_if_free; } +static bool ieee80211_is_skb_handled_by_pkt_type(struct sk_buff *skb, +struct ieee80211_sub_if_data +*sdata) +{ + struct ieee80211_ra_tid *ra_tid; + struct ieee80211_rx_agg *rx_agg; + struct ieee80211_local *local = sdata->local; + struct sta_info *sta; + + if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) { + ra_tid = (void *)>cb; + ieee80211_start_tx_ba_cb(>vif, ra_tid->ra, ra_tid->tid); + } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) { + ra_tid = (void *)>cb; + ieee80211_stop_tx_ba_cb(>vif, ra_tid->ra, ra_tid->tid); + } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) { + rx_agg = (void *)>cb; + mutex_lock(>sta_mtx); + sta = sta_info_get_bss(sdata, rx_agg->addr); + if (sta) + __ieee80211_start_rx_ba_session(sta, + 0, 0, 0, 1, rx_agg->tid, + IEEE80211_MAX_AMPDU_BUF, + false, true); + mutex_unlock(>sta_mtx); + } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_STOP) { + rx_agg = (void *)>cb; + mutex_lock(>sta_mtx); + sta = sta_info_get_bss(sdata, rx_agg->addr); + if (sta) + __ieee80211_stop_rx_ba_session(sta, + rx_agg->tid, + WLAN_BACK_RECIPIENT, 0, + false); + mutex_unlock(>sta_mtx); + } else { + return false; + } + /*will return true if pkt_type found and handled */ + return true; +} + static void ieee80211_iface_work(struct work_struct *work) { struct ieee80211_sub_if_data *sdata = @@ -1205,8 +1247,6 @@ static void ieee80211_iface_work(struct work_struct *work) struct ieee80211_local *local = sdata->local; struct sk_buff *skb; struct sta_info *sta; - struct ieee80211_ra_tid *ra_tid; - struct ieee80211_rx_agg *rx_agg; if (!ieee80211_sdata_running(sdata)) return; @@ -1221,34 +1261,8 @@ static void ieee80211_iface_work(struct work_struct *work) while ((skb = skb_dequeue(>skb_queue))) { struct ieee80211_mgmt *mgmt = (void *)skb->data; - if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) { - ra_tid = (void *)>cb; - ieee80211_start_tx_ba_cb(>vif, ra_tid->ra, -ra_tid->tid); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) { - ra_tid = (void *)>cb; - ieee80211_stop_tx_ba_cb(>vif, ra_tid->ra, - ra_tid->tid); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) { - rx_agg = (void *)>cb; - mutex_lock(>sta_mtx); - sta = sta_info_get_bss(sdata, rx_agg->addr); - if (sta) - __ieee80211_start_rx_ba_session(sta, - 0, 0, 0, 1, rx_agg->tid, - IEEE80211_MAX_AMPDU_BUF, - false, true); - mutex_unlock(>sta_mtx); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_STOP) { - rx_agg = (void *)>cb; - mutex_lock(>sta_mtx); - sta = sta_info_get_bss(sdata, rx_agg->addr); - if (sta) - __ieee80211_stop_rx_ba_session(sta, - rx_agg->tid, - WLAN_BACK_RECIPIENT, 0, - false); - mutex_unlock(>sta_mtx); + if (ieee80211_is_skb_handled_by_pkt_type(skb, sdata)) { +
[PATCH v3 3/3] mac80211: mesh: fixed HT ies in beacon template
The HT capab info field inside the HT capab IE of the mesh beacon is incorrect (in the case of 20MHz channel width). To fix this driver will check configuration from cfg and will build it accordingly. Signed-off-by: Meirav KamaSigned-off-by: Yaniv Machani --- V3 - Fixes redundant spaces,empty lines and added FALLTHROUGH note. net/mac80211/mesh.c | 33 - net/mac80211/util.c | 3 --- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index 9214bc1..6a67049 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c @@ -422,6 +422,7 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, enum nl80211_band band = ieee80211_get_sdata_band(sdata); struct ieee80211_supported_band *sband; u8 *pos; + u16 cap; sband = local->hw.wiphy->bands[band]; if (!sband->ht_cap.ht_supported || @@ -430,11 +431,41 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) return 0; + /* determine capability flags */ + cap = sband->ht_cap.cap; + + /* if channel width is 20MHz - configure HT capab accordingly*/ + if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20) { + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; + cap &= ~IEEE80211_HT_CAP_DSSSCCK40; + } + + /* set SM PS mode properly */ + cap &= ~IEEE80211_HT_CAP_SM_PS; + switch (sdata->smps_mode) { + case IEEE80211_SMPS_AUTOMATIC: + case IEEE80211_SMPS_NUM_MODES: + WARN_ON(1); + /* FALLTHROUGH */ + case IEEE80211_SMPS_OFF: + cap |= WLAN_HT_CAP_SM_PS_DISABLED << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + case IEEE80211_SMPS_STATIC: + cap |= WLAN_HT_CAP_SM_PS_STATIC << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + case IEEE80211_SMPS_DYNAMIC: + cap |= WLAN_HT_CAP_SM_PS_DYNAMIC << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + } + if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_cap)) return -ENOMEM; pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_cap)); - ieee80211_ie_build_ht_cap(pos, >ht_cap, sband->ht_cap.cap); + ieee80211_ie_build_ht_cap(pos, >ht_cap, cap); return 0; } diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 42bf0b6..5375a82 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -2349,10 +2349,7 @@ u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap, ht_oper->operation_mode = cpu_to_le16(prot_mode); ht_oper->stbc_param = 0x; - /* It seems that Basic MCS set and Supported MCS set - are identical for the first 10 bytes */ memset(_oper->basic_set, 0, 16); - memcpy(_oper->basic_set, _cap->mcs, 10); return pos + sizeof(struct ieee80211_ht_operation); } -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Fast Loans
Hae lainaa 3% vastaus tähän viestiin lisätietoja Apply for a loan at 3% reply to this Email for more Info -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH 1/4] mac80211: mesh: flush stations before beacons are stopped
On Wed, Jul 13, 2016 at 16:33:38, Bob Copeland wrote: > linux- wirel...@vger.kernel.org; net...@vger.kernel.org; Hahn, Maital > Subject: Re: [PATCH 1/4] mac80211: mesh: flush stations before beacons > are stopped > > On Wed, Jul 13, 2016 at 10:11:25AM +, Machani, Yaniv wrote: > > > > Some drivers (e.g. wl18xx) expect that the last stage in the > > > > de-initialization process will be stopping the beacons, similar to ap. > > > > Update ieee80211_stop_mesh() flow accordingly. > > > > > > > How well have you tested that with other drivers? > > > > > > > Sorry for the delayed response (I've been out) and thanks for your > > comments, I have tested it with RT3572 as well, and didn't see any issue. > > I'll update the comment to reflect that. > > I'll give this a test on ath10k and wcn36xx as they are the ones most > likely to care about ordering. > Thank you, Yaniv > -- > Bob Copeland %% http://bobcopeland.com/ -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4] brcmfmac: Decrease 8021x_cnt for dropped packets
2016-07-13 13:20 GMT+02:00 Arend Van Spriel: > On 12-7-2016 12:23, Per Förlin wrote: >> 2016-07-12 11:48 GMT+02:00 Arend Van Spriel : >>> >>> >>> On 12-7-2016 10:35, Per Förlin wrote: 2016-07-06 11:53 GMT+02:00 Per Förlin : > I have now verified this patch on backports 4.4. > > 2016-04-12 23:55 GMT+02:00 : >> From: Per Forlin >> >> This patch resolves an issue where pend_8021x_cnt was not decreased >> on txfinalize. This caused brcmf_netdev_wait_pend8021x to timeout >> because the counter indicated pending packets. >> >> WARNING: at .../brcmfmac/core.c:1289 brcmf_netdev_wait_pend8021x >> (warn_slowpath_common) >> (warn_slowpath_null) >> (brcmf_netdev_wait_pend8021x [brcmfmac]) >> (send_key_to_dongle [brcmfmac]) >> (brcmf_cfg80211_del_key [brcmfmac]) >> (nl80211_del_key [cfg80211]) >> (genl_rcv_msg) >> (netlink_rcv_skb) >> (genl_rcv) >> (netlink_unicast) >> (netlink_sendmsg) >> (sock_sendmsg) >> (___sys_sendmsg) >> (__sys_sendmsg) >> (SyS_sendmsg) >> >> The solution is to pull back the header offset in case >> of an error in txdata(), which may happen in case of Clarification: txdata=brcmf_proto_bcdc_txdata() brcmf_proto_bcdc_txdata(): Calls brcmf_proto_bcdc_hdrpush() The header needs to be pulled back in case of error otherwise the error handling and cleanup up will fail to decrease the counter of pending packets. >>> >>> Yes, this part of the patch is clear to me. >>> >> Thanks, I wasn't sure. >> >> packet overload in brcmf_sdio_bus_txdata. >> >> Overloading an WLAN interface is not an unlikely scenario. >>> >>> So here is where things start to look suspicious and I have mentioned >>> this before. My thought here was "How the hell can you end up with a >>> 2048 packets on the sdio queue", which I mentioned to you before. There >>> is a high watermark on the queue upon which we do a netif_stop_queue() >>> so network layer does not keep pushing tx packets our way. Looking >>> further into this I found that we introduced a bug with commit >>> 9cd18359d31e ("brcmfmac: Make FWS queueing configurable.") so we ended >>> up doing nothing except increasing as statistics debug counter :-( >>> >> Is there a fix available for the high watermark issue or is it >> something you will look into? >> >> To produce a load on the wlan interface I run >> iperf -c 239.255.1.3 -u -b 10m -f m -i 60 -t 3000 >> and this is enough in my case to fill up the 2048 queue. >> >> In case of packet overload the error print "out of bus->txq" >> is very verbose. To reduce SPAM degrade it to a debug print. >> >> Signed-off-by: Per Forlin >> --- >> Change log: >> v2 - Add variable to know whether the counter is increased or not >> v3 - txfinalize should decrease the counter. Adjust skb header offset >> v4 - Fix build error >> >> drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 4 >> drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 4 +++- >> drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +- >> 3 files changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c >> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c >> index ed9998b..f342f7c 100644 >> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c >> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c >> @@ -541,6 +541,9 @@ void brcmf_txfinalize(struct brcmf_if *ifp, struct >> sk_buff *txp, bool success) >> struct ethhdr *eh; >> u16 type; >> >> + if (!ifp) >> + goto free; >> + >>> >>> This may not be needed. >>> >> This is not strictly needed. I can remove it. >> >> eh = (struct ethhdr *)(txp->data); >> type = ntohs(eh->h_proto); >> >> @@ -553,6 +556,7 @@ void brcmf_txfinalize(struct brcmf_if *ifp, struct >> sk_buff *txp, bool success) >> if (!success) >> ifp->stats.tx_errors++; >> >> +free: >> brcmu_pkt_buf_free_skb(txp); >> } >> >> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c >> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c >> index f82c9ab..98cb83f 100644 >> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c >> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c >> @@ -1899,8 +1899,10 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, >> struct sk_buff *skb) >> >> if (fws->avoid_queueing) { >> rc = brcmf_proto_txdata(drvr,
Re: iwlwifi + wpa2-leap + multiple AP's = call trace
Hi I'm using wicd, so changed from wext to nl80211 and I don't see the trace anymore... it still refuses to connect though, so I'll check what's wrong with my configuration. Do you want me to collect some information regarding wpa_supplicant and wext from my system? If so, how? Thanks for your help -Farfan 2016-07-13 11:31 GMT-05:00 Emmanuel Grumbach: > On Jul 13, 2016 9:23 AM, "Arend Van Spriel" > wrote: >> >> >> >> On 13-7-2016 2:29, Ismael Farfán wrote: >> > Hello list >> > >> > I searched this error around and didn't find anything, so here it goes. >> > >> > Today I tried to connect to an enterprise network, which means, >> > literally, tens of AP's sharing the same name... the network requieres >> > user/password authentication (wpa2-leap). >> > >> > I'm using Arch >> > $ uname -a >> > Linux 4.6.3-1-ARCH #1 SMP PREEMPT Fri Jun 24 21:19:13 CEST 2016 x86_64 >> > GNU/Linux >> > >> > Since the thing just didn't connect, I checked dmesg and found this: >> > >> > Any ideas? >> >> From the stack trace it seems wpa_supplicant on Arch is using WEXT API. >> You could try and change it to use NL80211 API. Personally, I have not >> used Arch Linux so no idea where to change that. >> >> The warning is here [1]: >> >> 503 IWL_DEBUG_TE(mvm, "Add new TE, duration %d TU\n", >> 504 le32_to_cpu(te_cmd->duration)); >> 505 >> 506 spin_lock_bh(>time_event_lock); >> 507 if (WARN_ON(te_data->id != TE_MAX)) { >> 508 spin_unlock_bh(>time_event_lock); >> 509 return -EIO; >> 510 } >> >> It seems this function is called with te_data that is already in use, >> but that is my uneducated guess so I may be wrong. >> > > This is right :) > > Can you please record tracing of this? > > Thank you. > >> Regards, >> Arend >> >> [1] >> >> http://lxr.free-electrons.com/source/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c#L507 >> > >> > [ 83.030072] wifi0: aborting authentication with xx:xx:xx:xx:xx:xx >> > by local choice (Reason: 3=DEAUTH_LEAVING) >> > [ 83.030073] [ cut here ] >> > [ 83.030082] WARNING: CPU: 2 PID: 1087 at >> > drivers/net/wireless/intel/iwlwifi/mvm/time-event.c:507 iwl_mvm_tim >> > e_event_send_add+0x1c6/0x200 [iwlmvm] >> > [ 83.030157] CPU: 2 PID: 1087 Comm: wpa_supplicant Tainted: G >> >O4.6.3-1-ARCH #1 >> > [ 83.030158] Hardware name: Notebook >> > P65_P67SA /P65_P67SA >> > , BIOS 1.03.01 07/22/2015 >> > [ 83.030160] 0286 09e998bc 880403a5b940 >> > 812e54c2 >> > [ 83.030162] 880403a5b980 >> > 8107a6bb >> > [ 83.030164] 01fb81a8a180 88041b443580 88041c329548 >> > fffb >> > [ 83.030167] Call Trace: >> > [ 83.030172] [] dump_stack+0x63/0x81 >> > [ 83.030174] [] __warn+0xcb/0xf0 >> > [ 83.030176] [] warn_slowpath_null+0x1d/0x20 >> > [ 83.030181] [] >> > iwl_mvm_time_event_send_add+0x1c6/0x200 [iwlmvm] >> > [ 83.030184] [] ? up+0x32/0x50 >> > [ 83.030187] [] ? wake_up_klogd+0x3b/0x50 >> > [ 83.030189] [] ? console_unlock+0x4e9/0x590 >> > [ 83.030193] [] >> > iwl_mvm_protect_session+0x220/0x280 [iwlmvm] >> > [ 83.030196] [] ? iwl_mvm_ref_sync+0x2e/0x140 >> > [iwlmvm] >> > [ 83.030199] [] ? vprintk_default+0x1f/0x30 >> > [ 83.030202] [] >> > iwl_mvm_mac_mgd_prepare_tx+0x5a/0xa0 [iwlmvm] >> > [ 83.030216] [] ieee80211_mgd_deauth+0x338/0x4d0 >> > [mac80211] >> > [ 83.030219] [] ? enqueue_entity+0x323/0xd70 >> > [ 83.030228] [] ieee80211_deauth+0x18/0x20 >> > [mac80211] >> > [ 83.030237] [] cfg80211_mlme_deauth+0x9f/0x1a0 >> > [cfg80211] >> > [ 83.030242] [] cfg80211_disconnect+0x9a/0x200 >> > [cfg80211] >> > [ 83.030248] [] >> > cfg80211_mgd_wext_siwessid+0xa9/0x170 [cfg80211] >> > [ 83.030255] [] cfg80211_wext_siwessid+0x22/0x40 >> > [cfg80211] >> > [ 83.030258] [] ioctl_standard_iw_point+0x133/0x350 >> > [ 83.030264] [] ? >> > cfg80211_wext_giwessid+0x50/0x50 [cfg80211] >> > [ 83.030266] [] ? wake_up_q+0x32/0x70 >> > [ 83.030268] [] ? iw_handler_get_private+0x60/0x60 >> > [ 83.030271] [] ioctl_standard_call+0x87/0xd0 >> > [ 83.030273] [] ? >> > call_commit_handler.part.4+0x30/0x30 >> > [ 83.030275] [] wireless_process_ioctl+0x1f0/0x230 >> > [ 83.030278] [] ? dev_get_by_name_rcu+0x5e/0x80 >> > [ 83.030280] [] wext_handle_ioctl+0x78/0xd0 >> > [ 83.030283] [] dev_ioctl+0x2a7/0x5a0 >> > [ 83.030285] [] sock_ioctl+0x126/0x290 >> > [ 83.030287] [] do_vfs_ioctl+0xa3/0x5d0 >> > [ 83.030290] [] ? vfs_write+0x142/0x190 >> > [ 83.030292] [] SyS_ioctl+0x79/0x90 >> > [ 83.030294] [] entry_SYSCALL_64_fastpath+0x1a/0xa4 >> > [ 83.030296] ---[ end trace 8247b235a66a1a21 ]--- >> > >> > >> > >> > >> > >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-wireless" >> in >> the body of a
pull-request: wireless-drivers-next 2016-07-13
Hi Dave, here's a pull request for net-next. This time there are few conflicts due to the cfg80211 scan API changes, and one of them is easy to miss, so please pay extra attention to them. Otherwise there's not nothing really out of ordinary. Please note that I also pulled wireless-drivers to wireless-drivers-next to reduce the amount of conflicts. So about the conflicts, the obvious are notified by git: CONFLICT (content): Merge conflict in drivers/net/wireless/marvell/mwifiex/cmdevt.c CONFLICT (content): Merge conflict in drivers/net/wireless/intel/iwlwifi/mvm/scan.c Basically the major change is that in iwlwifi del_timer() is changed to cancel_delayed_work() and in mwifiex the code was refactored to use mwifiex_cancel_scan(). But the tricky part comes here which is easy to miss: Auto-merging drivers/net/wireless/marvell/mwifiex/scan.c You need to convert the scan code in mwifiex_cancel_scan(): cfg80211_scan_done(priv->scan_request, 1); to use the new API: struct cfg80211_scan_info info = { .aborted = true, }; [...] cfg80211_scan_done(priv->scan_request, ); I have attached the output from git diff as an example how to resolve this, hopefully that helps. Please let me know if there are any problems or if you want to handle these differently. Kalle The following changes since commit 742fb20fd4c75bd08733b0ea232c7e0fa67a6f87: net: ethernet: ti: cpdma: switch to use genalloc (2016-06-29 04:16:11 -0400) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git tags/wireless-drivers-next-for-davem-2016-07-13 for you to fetch changes up to 25f700ef0653d7644ed273f8770230e734cae726: iwlwifi: add missing type declaration (2016-07-12 14:51:57 +0300) wireless-drivers-next patches for 4.8 Major changes: iwlwifi * more work on the RX path for the 9000 device series * some more dynamic queue allocation work * SAR BIOS implementation * some work on debugging capabilities * added support for GCMP encryption * data path rework in preparation for new HW * some cleanup to remove transport dependency on mac80211 * support for MSIx in preparation for new HW * lots of work in preparation for HW support (9000 and a000 series) mwifiex * implement get_tx_power and get_antenna cfg80211 operation callbacks wl18xx * add support for 64bit clock rtl8xxxu * aggregation support (optional for now) Also wireless-drivers is merged to fix some conflicts. Amitkumar Karwar (8): mwifiex: fix system hang problem after resume mwifiex: fix AP unable to start in VHT40 problem mwifiex: fix AP start problem for newly added interface mwifiex: code rearrangement in suspend handler mwifiex: clear scan_aborting flag mwifiex: fix NULL pointer dereference during suspend mwifiex: fix scan_block flag handling mwifiex: Change default firmware for PCIe8997 chipset Andrei Otcheretianski (1): iwlwifi: mvm: Support CSA countdown offloading Andy Shevchenko (1): rtl8xxxu: tuse %*ph to dump buffers Arnd Bergmann (6): rtlwifi: use s8 instead of char wireless: airo: rename 'register' variable wireless: brcmsmac: fix old-style declaration wireless: ipw2200: fix old-style declaration iwlwifi: mvm: avoid harmless -Wmaybe-uninialized warning iwlwifi: add missing type declaration Avraham Stern (1): iwlwifi: rename CAPA_P2P_STANDALONE_UAPSD to CAPA_P2P_SCM_UAPSD Ayala Beker (2): iwlwifi: mvm: fix RX mpdu status enum iwlwifi: mvm: add support for GCMP encryption Bhaktipriya Shridhar (1): libertas_tf: Remove create_workqueue Brian Norris (1): mwifiex: mask PCIe interrupts before removal Bruno Herrera (1): wlcore: sdio: Fix crash on wlcore_probe_of when failing to parse/map irq Dan Carpenter (2): iwlwifi: mvm: remove an unused variable iwlwifi: mvm: silence uninitialized variable warning Emmanuel Grumbach (7): iwlwifi: advertise maximal MPDU length when Rx MQ is supported iwlwifi: pcie: enable interrupts before releasing the NIC's CPU iwlwifi: mvm: cleanup the coex code iwlwifi: mvm: fix coex related comments iwlwifi: mvm: fix the channel inhibition table for Channel 14 iwlwifi: mvm: unmap the paging memory before freeing it iwlwifi: pcie: fix a race in firmware loading flow Ganapathi Bhat (1): mwifiex: Fix an issue spotted by KASAN Golan Ben-Ami (2): iwlwifi: Reserve iwl_fw_error_dump_type enum iwlwifi: mvm: write the correct internal TXF index Gregory Greenman (1): iwlwifi: mvm: rs: add rate scaling support for 160MHz channels Guenter Roeck (1): iwlwifi: dvm: Remove unused array 'iwlagn_loose_lookup' Guy Mishol (1): wlcore: reconfigure sta rates on
Re: [PATCH v3 1/2] mwifiex: add manufacturing mode support
Amitkumar Karwarwrites: > Hi Kalle, > >> -Original Message- >> From: Kalle Valo [mailto:kv...@codeaurora.org] >> Sent: Wednesday, July 13, 2016 9:20 PM >> To: Amitkumar Karwar >> Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam >> Subject: Re: [PATCH v3 1/2] mwifiex: add manufacturing mode support >> >> Amitkumar Karwar writes: >> >> > By default normal mode is chosen when driver is loaded. This patch >> > adds a provision to choose manufacturing mode via module parameters. >> > >> > Command to load driver in manufacturing mode insmod mwifiex.ko >> > mfg_mode=1 and mfg_firmware=mrvl/firmware. >> > >> > Tested-by: chunfan chen >> > Signed-off-by: Amitkumar Karwar >> >> Why the mfg_firmware module parameter? > > It's to specify a firmware name. Yeah, I got that. But why do you need that? Why not just hardcode the firmware name in the driver, which is the normal thing to do? -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v3 1/2] mwifiex: add manufacturing mode support
Hi Kalle, > -Original Message- > From: Kalle Valo [mailto:kv...@codeaurora.org] > Sent: Wednesday, July 13, 2016 10:01 PM > To: Amitkumar Karwar > Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam > Subject: Re: [PATCH v3 1/2] mwifiex: add manufacturing mode support > > Amitkumar Karwarwrites: > > > Hi Kalle, > > > >> -Original Message- > >> From: Kalle Valo [mailto:kv...@codeaurora.org] > >> Sent: Wednesday, July 13, 2016 9:20 PM > >> To: Amitkumar Karwar > >> Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam > >> Subject: Re: [PATCH v3 1/2] mwifiex: add manufacturing mode support > >> > >> Amitkumar Karwar writes: > >> > >> > By default normal mode is chosen when driver is loaded. This patch > >> > adds a provision to choose manufacturing mode via module > parameters. > >> > > >> > Command to load driver in manufacturing mode insmod mwifiex.ko > >> > mfg_mode=1 and mfg_firmware=mrvl/firmware. > >> > > >> > Tested-by: chunfan chen > >> > Signed-off-by: Amitkumar Karwar > >> > >> Why the mfg_firmware module parameter? > > > > It's to specify a firmware name. > > Yeah, I got that. But why do you need that? Why not just hardcode the > firmware name in the driver, which is the normal thing to do? Ok. I will do this in updated version. Regards, Amitkumar -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v3 1/2] mwifiex: add manufacturing mode support
Hi Kalle, > -Original Message- > From: Kalle Valo [mailto:kv...@codeaurora.org] > Sent: Wednesday, July 13, 2016 9:20 PM > To: Amitkumar Karwar > Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam > Subject: Re: [PATCH v3 1/2] mwifiex: add manufacturing mode support > > Amitkumar Karwarwrites: > > > By default normal mode is chosen when driver is loaded. This patch > > adds a provision to choose manufacturing mode via module parameters. > > > > Command to load driver in manufacturing mode insmod mwifiex.ko > > mfg_mode=1 and mfg_firmware=mrvl/firmware. > > > > Tested-by: chunfan chen > > Signed-off-by: Amitkumar Karwar > > Why the mfg_firmware module parameter? It's to specify a firmware name. Regards, Amitkumar Karwar -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support
Hi Kalle, > -Original Message- > From: Kalle Valo [mailto:kv...@codeaurora.org] > Sent: Wednesday, July 13, 2016 9:18 PM > To: Amitkumar Karwar > Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam; > Xinming Hu > Subject: Re: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support > > Amitkumar Karwarwrites: > > > Hi Kalle, > > > >> -Original Message- > >> From: Kalle Valo [mailto:kv...@codeaurora.org] > >> Sent: Wednesday, July 13, 2016 8:44 PM > >> To: Amitkumar Karwar > >> Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam; > >> Xinming Hu > >> Subject: Re: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support > >> > >> Amitkumar Karwar writes: > >> > >> > From: Xinming Hu > >> > > >> > This patch adds ndo_ioctl support to mwifiex netdev handlers. > >> > This will be used to download hostcmds to firmware from userspace. > >> > This is needed for manufacturing mode support in mwifiex. ndo_ioctl > >> > is allowed only when mfg mode is enabled via module load > parameters. > >> > > >> > Signed-off-by: Xinming Hu > >> > Signed-off-by: Amitkumar Karwar > >> > --- > >> > v3: Add "select WIRELESS_EXT" in Kconfig to resolve kbuild test > >> > robot > >> errors. > >> > WEXT_PRIV seems to have a dependency with WIRELESS_EXT. > >> > v2: 1) Sequence of these two patches are changed to resolve > >> compilation > >> > error seen if only 1/2 is applied. > >> > 2) Add "select WEXT_PRIV" in Kconfig to resolve warnings > >> > reported > >> by > >> > kbuild test robot. > >> > >> Why can't you use nl80211 testmode interface? > > > > These two patches facilitates user to configure manufacturing mode. We > > have a separate firmware for this mode. It's needed to run special > > WiFi conductive and radiated tests at factory. > > This is exactly what nl80211 testmode is for. > > > The userspace tools used for this purpose expects WEXT interface. > > So convert them to use nl80211. I have done that myself, multiple times > actually. > > And for wireless extensions, from my point of view it's dead and buried. > I'm not going to take any new wireless extension related code. Thanks for your feedback. We will change the tools and prepare driver patch using nl80211 testmode. Regards, Amitkumar -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 1/2] mwifiex: add manufacturing mode support
Amitkumar Karwarwrites: > By default normal mode is chosen when driver is loaded. This patch adds > a provision to choose manufacturing mode via module parameters. > > Command to load driver in manufacturing mode > insmod mwifiex.ko mfg_mode=1 and mfg_firmware=mrvl/firmware. > > Tested-by: chunfan chen > Signed-off-by: Amitkumar Karwar Why the mfg_firmware module parameter? -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: building brcmfmac driver for iMX6 Ultralite platform
>> Arend, > >What about my reply? ;) Sorry. No offense intended. I clearly need to not treat this as email. I'll figure out the protocol soon enough. > > >> That is news to me. I was under the impression that bcmdhd was >> Broadcom's proprietary (closed source) Linux driver and brcmfmac was >> the open source Linux driver. > >Don't top post. It's hard to say what you're replying to. bcmdhd is also open >source (not sure what license), just not mainline. > > >> Either way, I am now running >> >> insmod brcmutil.ko >> insmod brcmfmac.ko >> >> I receive no errors and no kernel messages. >> >> When I insert the 43341 module into the SDIO slot nothing happens. >> I'm guessing that the version of the brcmfmac driver that I built does >> not support that chip. > >Is is detected by the system? If so, what ID does it use? > The system recognizes that an mmc card has been inserted. The driver doesn't see the module, however. Looking at the page https://wireless.wiki.kernel.org/en/users/drivers/brcm80211 suggests that I simply need to move to a newer Linux kernel as I am using 3.14.38. NXP recently posted a 4.1.15 install so I will try getting the 43341 module up and running with that. > >> When I insert the 43362 module into the SDIO slot I receive the >> following errors >> >> mmc0: queuing unknown CIS tuple 0x80 (7 bytes) >> mmc0: new high speed SDIO card at address 0001 >> brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Jun >> 7 2012 >> 18:27:16 version 5.90.225 FWID 01-d8fe14bd >> brcmfmac: brcmf_fil_cmd_data: Failed err=-23 >> brcmfmac: brcmf_fil_cmd_data: Failed err=-23 >> brcmfmac: brcmf_fil_cmd_data: Failed err=-23 >> brcmfmac: brcmf_fil_cmd_data: Failed err=-23 >> brcmfmac: brcmf_add_if: ERROR: netdev:wlan0 already exists >> brcmfmac: brcmf_add_if: ignore IF event >> brcmfmac: brcmf_fil_cmd_data: Failed err=-23 >> brcmfmac: brcmf_construct_reginfo: channel 1: f=2412 bw=0 >> sb=-1998840228 >> brcmfmac: brcmf_construct_reginfo: channel 2: f=2417 bw=0 >> sb=-1998840228 >> >> and suddenly ifconfig shows the interface wlan0. The interface looks >> to be valid as it is displaying a MAC from our address range. >> >> Although the interface wlan0 is present I am not able to use wl >> commands to scan for networks. wl reports "wl driver adapter not >> found" for all command arguments. If I run the command >> >> iwlist wlan0 scan >> >> I'm told that the interface does not support scanning. If I run >> wpa_cli and then the commands scan and scanresults I don't see any networks. > >"wl" user space tool uses wlioctl, proprietary protocol, brcmfmac doesn't >support it. > >iwlist uses wext protocol, legacy one. > >Please use nl80211 based tools, e.g. "iw". I was able to scan with iw and join a WPA2 protected network using wpa_supplicant. It would appear that I have the 43362 up and running with the brcmfmac driver. I will try the other Linux install for the 43341. Thank you all for all your help. It is much appreciated. :-) -Mike -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support
Amitkumar Karwarwrites: > Hi Kalle, > >> -Original Message- >> From: Kalle Valo [mailto:kv...@codeaurora.org] >> Sent: Wednesday, July 13, 2016 8:44 PM >> To: Amitkumar Karwar >> Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam; >> Xinming Hu >> Subject: Re: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support >> >> Amitkumar Karwar writes: >> >> > From: Xinming Hu >> > >> > This patch adds ndo_ioctl support to mwifiex netdev handlers. >> > This will be used to download hostcmds to firmware from userspace. >> > This is needed for manufacturing mode support in mwifiex. ndo_ioctl is >> > allowed only when mfg mode is enabled via module load parameters. >> > >> > Signed-off-by: Xinming Hu >> > Signed-off-by: Amitkumar Karwar >> > --- >> > v3: Add "select WIRELESS_EXT" in Kconfig to resolve kbuild test robot >> errors. >> > WEXT_PRIV seems to have a dependency with WIRELESS_EXT. >> > v2: 1) Sequence of these two patches are changed to resolve >> compilation >> > error seen if only 1/2 is applied. >> > 2) Add "select WEXT_PRIV" in Kconfig to resolve warnings reported >> by >> > kbuild test robot. >> >> Why can't you use nl80211 testmode interface? > > These two patches facilitates user to configure manufacturing mode. We > have a separate firmware for this mode. It's needed to run special > WiFi conductive and radiated tests at factory. This is exactly what nl80211 testmode is for. > The userspace tools used for this purpose expects WEXT interface. So convert them to use nl80211. I have done that myself, multiple times actually. And for wireless extensions, from my point of view it's dead and buried. I'm not going to take any new wireless extension related code. -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support
Hi Kalle, > -Original Message- > From: Kalle Valo [mailto:kv...@codeaurora.org] > Sent: Wednesday, July 13, 2016 8:44 PM > To: Amitkumar Karwar > Cc: linux-wireless@vger.kernel.org; Cathy Luo; Nishant Sarmukadam; > Xinming Hu > Subject: Re: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support > > Amitkumar Karwarwrites: > > > From: Xinming Hu > > > > This patch adds ndo_ioctl support to mwifiex netdev handlers. > > This will be used to download hostcmds to firmware from userspace. > > This is needed for manufacturing mode support in mwifiex. ndo_ioctl is > > allowed only when mfg mode is enabled via module load parameters. > > > > Signed-off-by: Xinming Hu > > Signed-off-by: Amitkumar Karwar > > --- > > v3: Add "select WIRELESS_EXT" in Kconfig to resolve kbuild test robot > errors. > > WEXT_PRIV seems to have a dependency with WIRELESS_EXT. > > v2: 1) Sequence of these two patches are changed to resolve > compilation > > error seen if only 1/2 is applied. > > 2) Add "select WEXT_PRIV" in Kconfig to resolve warnings reported > by > > kbuild test robot. > > Why can't you use nl80211 testmode interface? These two patches facilitates user to configure manufacturing mode. We have a separate firmware for this mode. It's needed to run special WiFi conductive and radiated tests at factory. The userspace tools used for this purpose expects WEXT interface. Regards, Amitkumar -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support
Amitkumar Karwarwrites: > From: Xinming Hu > > This patch adds ndo_ioctl support to mwifiex netdev handlers. > This will be used to download hostcmds to firmware from userspace. > This is needed for manufacturing mode support in mwifiex. ndo_ioctl > is allowed only when mfg mode is enabled via module load parameters. > > Signed-off-by: Xinming Hu > Signed-off-by: Amitkumar Karwar > --- > v3: Add "select WIRELESS_EXT" in Kconfig to resolve kbuild test robot errors. > WEXT_PRIV seems to have a dependency with WIRELESS_EXT. > v2: 1) Sequence of these two patches are changed to resolve compilation > error seen if only 1/2 is applied. > 2) Add "select WEXT_PRIV" in Kconfig to resolve warnings reported by > kbuild test robot. Why can't you use nl80211 testmode interface? -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] mac80211: End the MPSP even if EOSP frame was not received
On Wed, Jul 13, 2016 at 04:04:35PM +0900, Masashi Honma wrote: > The mesh STA sends QoS frame with EOSP (end of service period) > subfiled=1 to end the MPSP(mesh peer service period). Previously, if > the frame was not acked by peer, the mesh STA did not end the MPSP. > This patch ends the MPSP even if the QoS frame was no acked. Hmm, my recollection on this stuff is a little fuzzy. So we only get here if the peer sta is in doze state, but it shouldn't do that if we are in an MPSP. So, is the real problem that we don't wait for an ack from the peer before marking ourselves in a MPSP? -- Bob Copeland %% http://bobcopeland.com/ -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v3 2/2] mwifiex: add hostcmd wext ioctl support
From: Xinming HuThis patch adds ndo_ioctl support to mwifiex netdev handlers. This will be used to download hostcmds to firmware from userspace. This is needed for manufacturing mode support in mwifiex. ndo_ioctl is allowed only when mfg mode is enabled via module load parameters. Signed-off-by: Xinming Hu Signed-off-by: Amitkumar Karwar --- v3: Add "select WIRELESS_EXT" in Kconfig to resolve kbuild test robot errors. WEXT_PRIV seems to have a dependency with WIRELESS_EXT. v2: 1) Sequence of these two patches are changed to resolve compilation error seen if only 1/2 is applied. 2) Add "select WEXT_PRIV" in Kconfig to resolve warnings reported by kbuild test robot. --- drivers/net/wireless/marvell/mwifiex/Kconfig | 6 +++ drivers/net/wireless/marvell/mwifiex/cmdevt.c | 59 +++ drivers/net/wireless/marvell/mwifiex/main.c | 38 + drivers/net/wireless/marvell/mwifiex/main.h | 9 +++- 4 files changed, 111 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/marvell/mwifiex/Kconfig b/drivers/net/wireless/marvell/mwifiex/Kconfig index 279167d..aed32ce 100644 --- a/drivers/net/wireless/marvell/mwifiex/Kconfig +++ b/drivers/net/wireless/marvell/mwifiex/Kconfig @@ -13,6 +13,8 @@ config MWIFIEX_SDIO depends on MWIFIEX && MMC select FW_LOADER select WANT_DEV_COREDUMP + select WIRELESS_EXT + select WEXT_PRIV ---help--- This adds support for wireless adapters based on Marvell 8786/8787/8797/8887/8897/8997 chipsets with SDIO interface. @@ -25,6 +27,8 @@ config MWIFIEX_PCIE depends on MWIFIEX && PCI select FW_LOADER select WANT_DEV_COREDUMP + select WIRELESS_EXT + select WEXT_PRIV ---help--- This adds support for wireless adapters based on Marvell 8766/8897/8997 chipsets with PCIe interface. @@ -36,6 +40,8 @@ config MWIFIEX_USB tristate "Marvell WiFi-Ex Driver for USB8766/8797/8997" depends on MWIFIEX && USB select FW_LOADER + select WIRELESS_EXT + select WEXT_PRIV ---help--- This adds support for wireless adapters based on Marvell 8797/8997 chipset with USB interface. diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c index 8d57493..d961305 100644 --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c @@ -826,6 +826,8 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) hostcmd = adapter->curr_cmd->data_buf; hostcmd->len = size; memcpy(hostcmd->cmd, resp, size); + adapter->hostcmd_resp_data.len = size; + memcpy(adapter->hostcmd_resp_data.cmd, resp, size); } } orig_cmdresp_no = le16_to_cpu(resp->command); @@ -1208,6 +1210,63 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter) false); } EXPORT_SYMBOL_GPL(mwifiex_process_hs_config); +/* This function get hostcmd data from userspace and construct a cmd + * to be download to FW. + */ +int mwifiex_process_host_command(struct mwifiex_private *priv, +struct iwreq *wrq) +{ + struct mwifiex_ds_misc_cmd *hostcmd_buf; + struct host_cmd_ds_command *cmd; + struct mwifiex_adapter *adapter = priv->adapter; + int ret; + + hostcmd_buf = kzalloc(sizeof(*hostcmd_buf), GFP_KERNEL); + if (!hostcmd_buf) + return -ENOMEM; + + cmd = (void *)hostcmd_buf->cmd; + + if (copy_from_user(cmd, wrq->u.data.pointer, + sizeof(cmd->command) + sizeof(cmd->size))) { + ret = -EFAULT; + goto done; + } + + hostcmd_buf->len = le16_to_cpu(cmd->size); + if (hostcmd_buf->len > MWIFIEX_SIZE_OF_CMD_BUFFER) { + ret = -EINVAL; + goto done; + } + + if (copy_from_user(cmd, wrq->u.data.pointer, hostcmd_buf->len)) { + ret = -EFAULT; + goto done; + } + + if (mwifiex_send_cmd(priv, 0, 0, 0, hostcmd_buf, true)) { + dev_err(priv->adapter->dev, "Failed to process hostcmd\n"); + ret = -EFAULT; + goto done; + } + + if (adapter->hostcmd_resp_data.len > hostcmd_buf->len) { + ret = -EFBIG; + goto done; + } + + if (copy_to_user(wrq->u.data.pointer, adapter->hostcmd_resp_data.cmd, +adapter->hostcmd_resp_data.len)) { + ret = -EFAULT; + goto done; + } + wrq->u.data.length = adapter->hostcmd_resp_data.len; + + ret = 0; +done: + kfree(hostcmd_buf); + return ret; +} /* * This function
[PATCH v3 1/2] mwifiex: add manufacturing mode support
By default normal mode is chosen when driver is loaded. This patch adds a provision to choose manufacturing mode via module parameters. Command to load driver in manufacturing mode insmod mwifiex.ko mfg_mode=1 and mfg_firmware=mrvl/firmware. Tested-by: chunfan chenSigned-off-by: Amitkumar Karwar --- drivers/net/wireless/marvell/mwifiex/cmdevt.c | 8 ++ drivers/net/wireless/marvell/mwifiex/init.c | 22 +++-- drivers/net/wireless/marvell/mwifiex/main.c | 35 --- drivers/net/wireless/marvell/mwifiex/main.h | 4 +++ drivers/net/wireless/marvell/mwifiex/pcie.c | 2 +- drivers/net/wireless/marvell/mwifiex/sdio.c | 2 +- drivers/net/wireless/marvell/mwifiex/usb.c| 2 +- 7 files changed, 61 insertions(+), 14 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c index c29f26d..8d57493 100644 --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c @@ -581,6 +581,14 @@ int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no, return -1; } } + /* We don't expect commands in manufacturing mode. They are cooked +* in application and ready to download buffer is passed to the driver + */ + if (adapter->mfg_mode && cmd_no) { + dev_dbg(adapter->dev, "Ignoring commands in manufacturing mode\n"); + return -1; + } + /* Get a new command node */ cmd_node = mwifiex_get_cmd_node(adapter); diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c index 1489c90..82839d9 100644 --- a/drivers/net/wireless/marvell/mwifiex/init.c +++ b/drivers/net/wireless/marvell/mwifiex/init.c @@ -298,6 +298,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter) memset(>arp_filter, 0, sizeof(adapter->arp_filter)); adapter->arp_filter_size = 0; adapter->max_mgmt_ie_index = MAX_MGMT_IE_INDEX; + adapter->mfg_mode = mfg_mode; adapter->key_api_major_ver = 0; adapter->key_api_minor_ver = 0; eth_broadcast_addr(adapter->perm_addr); @@ -553,15 +554,22 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter) return -1; } } + if (adapter->mfg_mode) { + adapter->hw_status = MWIFIEX_HW_STATUS_READY; + ret = -EINPROGRESS; + } else { + for (i = 0; i < adapter->priv_num; i++) { + if (adapter->priv[i]) { + ret = mwifiex_sta_init_cmd(adapter->priv[i], + first_sta, true); + if (ret == -1) + return -1; + + first_sta = false; + } + - for (i = 0; i < adapter->priv_num; i++) { - if (adapter->priv[i]) { - ret = mwifiex_sta_init_cmd(adapter->priv[i], first_sta, - true); - if (ret == -1) - return -1; - first_sta = false; } } diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c index 0e280f8..b54edf4 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.c +++ b/drivers/net/wireless/marvell/mwifiex/main.c @@ -36,6 +36,14 @@ static unsigned short driver_mode; module_param(driver_mode, ushort, 0); MODULE_PARM_DESC(driver_mode, "station=0x1(default), ap-sta=0x3, station-p2p=0x5, ap-sta-p2p=0x7"); +bool mfg_mode; +module_param(mfg_mode, bool, 0); +MODULE_PARM_DESC(mfg_mode, "0:disable 1:enable (bool)"); + +char *mfg_firmware = ""; +module_param(mfg_firmware, charp, 0); +MODULE_PARM_DESC(mfg_firmware, "firmware path"); + /* * This function registers the device and performs all the necessary @@ -559,10 +567,12 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) goto done; } /* Wait for mwifiex_init to complete */ - wait_event_interruptible(adapter->init_wait_q, -adapter->init_wait_q_woken); - if (adapter->hw_status != MWIFIEX_HW_STATUS_READY) - goto err_init_fw; + if (!adapter->mfg_mode) { + wait_event_interruptible(adapter->init_wait_q, +adapter->init_wait_q_woken); + if (adapter->hw_status != MWIFIEX_HW_STATUS_READY) + goto err_init_fw; + } priv = adapter->priv[MWIFIEX_BSS_ROLE_STA]; if (mwifiex_register_cfg80211(adapter)) { @@ -666,6 +676,23 @@ static int mwifiex_init_hw_fw(struct
Re: [PATCH 1/4] mac80211: mesh: flush stations before beacons are stopped
On Wed, Jul 13, 2016 at 10:11:25AM +, Machani, Yaniv wrote: > > > Some drivers (e.g. wl18xx) expect that the last stage in the > > > de-initialization process will be stopping the beacons, similar to ap. > > > Update ieee80211_stop_mesh() flow accordingly. > > > > > How well have you tested that with other drivers? > > > > Sorry for the delayed response (I've been out) and thanks for your comments, > I have tested it with RT3572 as well, and didn't see any issue. > I'll update the comment to reflect that. I'll give this a test on ath10k and wcn36xx as they are the ones most likely to care about ordering. -- Bob Copeland %% http://bobcopeland.com/ -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/2] mwifiex: add hostcmd wext ioctl support
Hi, [auto build test ERROR on wireless-drivers-next/master] [also build test ERROR on v4.7-rc7 next-20160712] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Amitkumar-Karwar/mwifiex-add-manufacturing-mode-support/20160713-192928 base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master config: arm-exynos_defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 5.3.1-8) 5.3.1 20160205 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=arm All errors (new ones prefixed by >>): net/wireless/wext-core.c: In function 'wireless_process_ioctl': >> net/wireless/wext-core.c:942:31: error: 'struct net_device' has no member >> named 'wireless_handlers' if (cmd == SIOCGIWPRIV && dev->wireless_handlers) ^ -- net/wireless/wext-priv.c: In function 'iw_handler_get_private': >> net/wireless/wext-priv.c:22:10: error: 'struct net_device' has no member >> named 'wireless_handlers' if ((dev->wireless_handlers->num_private_args == 0) || ^ net/wireless/wext-priv.c:23:9: error: 'struct net_device' has no member named 'wireless_handlers' (dev->wireless_handlers->private_args == NULL)) ^ net/wireless/wext-priv.c:27:29: error: 'struct net_device' has no member named 'wireless_handlers' if (wrqu->data.length < dev->wireless_handlers->num_private_args) { ^ net/wireless/wext-priv.c:31:26: error: 'struct net_device' has no member named 'wireless_handlers' wrqu->data.length = dev->wireless_handlers->num_private_args; ^ net/wireless/wext-priv.c:36:25: error: 'struct net_device' has no member named 'wireless_handlers' wrqu->data.length = dev->wireless_handlers->num_private_args; ^ net/wireless/wext-priv.c:39:19: error: 'struct net_device' has no member named 'wireless_handlers' memcpy(extra, dev->wireless_handlers->private_args, ^ net/wireless/wext-priv.c: In function 'get_priv_descr_and_size': net/wireless/wext-priv.c:100:21: error: 'struct net_device' has no member named 'wireless_handlers' for (i = 0; i < dev->wireless_handlers->num_private_args; i++) { ^ net/wireless/wext-priv.c:101:17: error: 'struct net_device' has no member named 'wireless_handlers' if (cmd == dev->wireless_handlers->private_args[i].cmd) { ^ net/wireless/wext-priv.c:102:16: error: 'struct net_device' has no member named 'wireless_handlers' descr = >wireless_handlers->private_args[i]; ^ vim +942 net/wireless/wext-core.c 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 936* (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) */ 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 937 if (cmd == SIOCGIWSTATS) 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 938 return standard(dev, iwr, cmd, info, 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 939 _handler_get_iwstats); ^1da177e net/core/wireless.c Linus Torvalds 2005-04-16 940 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 941 #ifdef CONFIG_WEXT_PRIV dd8ceabc net/wireless/wext.c Johannes Berg 2007-04-26 @942 if (cmd == SIOCGIWPRIV && dev->wireless_handlers) 0f5cabba net/wireless/wext.c David S. Miller 2008-06-03 943 return standard(dev, iwr, cmd, info, 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 944 iw_handler_get_private); 3d23e349 net/wireless/wext-core.c Johannes Berg 2009-09-29 945 #endif :: The code at line 942 was first introduced by commit :: dd8ceabcd10d47f6f28ecfaf2eac7beffca11b3c [WEXT]: Cleanup early ioctl call path. :: TO: Johannes Berg <johan...@sipsolutions.net> :: CC: David S. Miller <da...@davemloft.net> --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH] drivers: misc: ti-st: Use int instead of fuzzy char for callback status
Hi Geert, > On mips and parisc: > >drivers/bluetooth/btwilink.c: In function 'ti_st_open': >drivers/bluetooth/btwilink.c:174:21: warning: overflow in implicit > constant conversion [-Woverflow] > hst->reg_status = -EINPROGRESS; > >drivers/nfc/nfcwilink.c: In function 'nfcwilink_open': >drivers/nfc/nfcwilink.c:396:31: warning: overflow in implicit constant > conversion [-Woverflow] > drv->st_register_cb_status = -EINPROGRESS; > > There are actually two issues: > 1. Whether "char" is signed or unsigned depends on the architecture. > As the completion callback data is used to pass a (negative) error > code, it should always be signed. > 2. EINPROGRESS is 150 on mips, 245 on parisc. > Hence -EINPROGRESS doesn't fit in a signed 8-bit number. > > Change the callback status from "char" to "int" to fix these. > > Signed-off-by: Geert Uytterhoeven> --- > Compile-tested only. > --- > drivers/bluetooth/btwilink.c | 4 ++-- > drivers/media/radio/wl128x/fmdrv_common.c | 2 +- > drivers/misc/ti-st/st_core.c | 2 +- > drivers/nfc/nfcwilink.c | 4 ++-- > include/linux/ti_wilink_st.h | 2 +- > 5 files changed, 7 insertions(+), 7 deletions(-) patch has been applied to bluetooth-next tree. Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
Hello. On 7/13/2016 2:45 PM, Yaniv Machani wrote: The HT capab info field inside the HT capab IE of the mesh beacon is incorrect (in the case of 20MHz channel width). To fix this driver will check configuration from cfg and will build it accordingly. Signed-off-by: Meirav KamaSigned-off-by: Yaniv Machani --- V3 - Updated comment - Removed CFG changes, as they are not correct. net/mac80211/mesh.c | 33 - net/mac80211/util.c | 3 --- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index 9214bc1..275131d 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c @@ -422,6 +422,8 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, enum nl80211_band band = ieee80211_get_sdata_band(sdata); struct ieee80211_supported_band *sband; u8 *pos; + u16 cap; + Why add more empty lines where you already one? sband = local->hw.wiphy->bands[band]; if (!sband->ht_cap.ht_supported || @@ -430,11 +432,40 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) return 0; +/* determine capability flags */ Please use tab, not spaces. + cap = sband->ht_cap.cap; + +/* if channel width is 20MHz - configure HT capab accordingly*/ Likewise. + if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20) { + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; + cap &= ~IEEE80211_HT_CAP_DSSSCCK40; + } + + /* set SM PS mode properly */ + cap &= ~IEEE80211_HT_CAP_SM_PS; + switch (sdata->smps_mode) { + case IEEE80211_SMPS_AUTOMATIC: + case IEEE80211_SMPS_NUM_MODES: + WARN_ON(1); No *break*? You need a comment like /* FALL THRU */ then... + case IEEE80211_SMPS_OFF: + cap |= WLAN_HT_CAP_SM_PS_DISABLED << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + case IEEE80211_SMPS_STATIC: + cap |= WLAN_HT_CAP_SM_PS_STATIC << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + case IEEE80211_SMPS_DYNAMIC: + cap |= WLAN_HT_CAP_SM_PS_DYNAMIC << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + } + if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_cap)) return -ENOMEM; pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_cap)); - ieee80211_ie_build_ht_cap(pos, >ht_cap, sband->ht_cap.cap); + ieee80211_ie_build_ht_cap(pos, >ht_cap, cap); return 0; } [...] MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2] mac80211: rx: frames received out of order
From: Meirav KamaUpon forwarding frames from Rx to Tx in mesh, driver clones the skb. It zeros the tx_info and doesn't set hw_queue correctly. It then enqueues the frame in queue 0 (VOICE) instead of the correct queue. Upon re-queue of this frame, driver inserts it to the correct queue (e.g. BE). After that, driver dequeue frames from 2 different queues and sends them out of order. To fix this, driver will set the tx_info->hw_queue to the correct queue when cloning the skb. Signed-off-by: Meirav Kama Signed-off-by: Yaniv Machani --- V2 - Revised comment net/mac80211/rx.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 9a1eb70..88dc744 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -2392,6 +2392,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; info->control.vif = >sdata->vif; info->control.jiffies = jiffies; + info->hw_queue = q; if (is_multicast_ether_addr(fwd_hdr->addr1)) { IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast); memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] mac80211: rx: frames received out of order
From: Meirav KamaMP received data frames from another MP. Frames are forwarded from Rx to Tx to be transmitted to a third MP. Upon cloning the skb, the tx_info was zeroed, and the hw_queue wasn't set correctly, causing frames to be inserted to queue 0 (VOICE). If re-queue occurred for some reason, frame will be inserted to correct queue 2 (BE). In this case frames are now dequeued from 2 different queues and sent out of order. Signed-off-by: Meirav Kama Signed-off-by: Yaniv Machani --- net/mac80211/rx.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 9a1eb70..88dc744 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -2392,6 +2392,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; info->control.vif = >sdata->vif; info->control.jiffies = jiffies; + info->hw_queue = q; if (is_multicast_ether_addr(fwd_hdr->addr1)) { IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast); memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 2/3] mac80211: mesh: improve path resolving time
When a packet is received for transmission, a PREQ frame is sent to resolve the appropriate path to the desired destination. After path was established, any sequential PREQ will be sent only after dot11MeshHWMPpreqMinInterval, which usually set to few seconds. This implementation has an impact in cases where we would like to resolve the path quickly. A clear example is when a peer was disconnected from us, while he acted as a hop to our destination. Although the path table will be cleared, the next PREQ frame will be sent only after reaching the MinInterval. This will cause unwanted delay, possibly of few seconds until the traffic will resume. To improve that, added an 'immediate' flag to be used when the path needs to be resolved. Once set, a PREQ frame will be send w/o considering the MinInterval parameter. Signed-off-by: Maital HahnSigned-off-by: Yaniv Machani --- v2 - Updated comment to explain the scenario better. - Removed unnccesary changes that was alreay upstreamed. net/mac80211/mesh_hwmp.c | 42 +- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c index 8f9c3bd..9783d49 100644 --- a/net/mac80211/mesh_hwmp.c +++ b/net/mac80211/mesh_hwmp.c @@ -19,7 +19,7 @@ #define MAX_PREQ_QUEUE_LEN 64 -static void mesh_queue_preq(struct mesh_path *, u8); +static void mesh_queue_preq(struct mesh_path *, u8, bool); static inline u32 u32_field_get(const u8 *preq_elem, int offset, bool ae) { @@ -830,7 +830,8 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata, mhwmp_dbg(sdata, "time to refresh root mpath %pM\n", orig_addr); - mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); + mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH, + false); mpath->last_preq_to_root = jiffies; } @@ -925,7 +926,7 @@ void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, * Locking: the function must be called from within a rcu read lock block. * */ -static void mesh_queue_preq(struct mesh_path *mpath, u8 flags) +static void mesh_queue_preq(struct mesh_path *mpath, u8 flags, bool immediate) { struct ieee80211_sub_if_data *sdata = mpath->sdata; struct ieee80211_if_mesh *ifmsh = >u.mesh; @@ -964,18 +965,24 @@ static void mesh_queue_preq(struct mesh_path *mpath, u8 flags) ++ifmsh->preq_queue_len; spin_unlock_bh(>mesh_preq_queue_lock); - if (time_after(jiffies, ifmsh->last_preq + min_preq_int_jiff(sdata))) + if (immediate) { ieee80211_queue_work(>local->hw, >work); + } else { + if (time_after(jiffies, + ifmsh->last_preq + min_preq_int_jiff(sdata))) { + ieee80211_queue_work(>local->hw, >work); - else if (time_before(jiffies, ifmsh->last_preq)) { - /* avoid long wait if did not send preqs for a long time -* and jiffies wrapped around -*/ - ifmsh->last_preq = jiffies - min_preq_int_jiff(sdata) - 1; - ieee80211_queue_work(>local->hw, >work); - } else - mod_timer(>mesh_path_timer, ifmsh->last_preq + - min_preq_int_jiff(sdata)); + } else if (time_before(jiffies, ifmsh->last_preq)) { + /* avoid long wait if did not send preqs for a long time +* and jiffies wrapped around +*/ + ifmsh->last_preq = jiffies - + min_preq_int_jiff(sdata) - 1; + ieee80211_queue_work(>local->hw, >work); + } else + mod_timer(>mesh_path_timer, ifmsh->last_preq + + min_preq_int_jiff(sdata)); + } } /** @@ -1110,7 +1117,7 @@ int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata, } if (!(mpath->flags & MESH_PATH_RESOLVING)) - mesh_queue_preq(mpath, PREQ_Q_F_START); + mesh_queue_preq(mpath, PREQ_Q_F_START, true); if (skb_queue_len(>frame_queue) >= MESH_FRAME_QUEUE_LEN) skb_to_free = skb_dequeue(>frame_queue); @@ -1157,8 +1164,9 @@ int mesh_nexthop_lookup(struct ieee80211_sub_if_data *sdata, msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && ether_addr_equal(sdata->vif.addr, hdr->addr4) && !(mpath->flags & MESH_PATH_RESOLVING) && - !(mpath->flags & MESH_PATH_FIXED)) - mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); + !(mpath->flags & MESH_PATH_FIXED)) { + mesh_queue_preq(mpath, PREQ_Q_F_START |
[PATCH v2 1/3] mac80211: mesh: flush stations before beacons are stopped
From: Maital HahnSome drivers (e.g. wl18xx) expect that the last stage in the de-initialization process will be stopping the beacons, similar to AP flow. Update ieee80211_stop_mesh() flow accordingly. As peers can be removed dynamically, this would not impact other drivers. Tested also on Ralink RT3572 chipset. Signed-off-by: Maital Hahn Signed-off-by: Yaniv Machani --- V2- updated comment, patch was tested with RT3572 net/mac80211/mesh.c | 10 ++ 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index 21b1fdf..9214bc1 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c @@ -896,20 +896,22 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) netif_carrier_off(sdata->dev); + /* flush STAs and mpaths on this iface */ + sta_info_flush(sdata); + mesh_path_flush_by_iface(sdata); + /* stop the beacon */ ifmsh->mesh_id_len = 0; sdata->vif.bss_conf.enable_beacon = false; clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, >state); ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); + + /* remove beacon */ bcn = rcu_dereference_protected(ifmsh->beacon, lockdep_is_held(>wdev.mtx)); RCU_INIT_POINTER(ifmsh->beacon, NULL); kfree_rcu(bcn, rcu_head); - /* flush STAs and mpaths on this iface */ - sta_info_flush(sdata); - mesh_path_flush_by_iface(sdata); - /* free all potentially still buffered group-addressed frames */ local->total_ps_buffered -= skb_queue_len(>ps.bc_buf); skb_queue_purge(>ps.bc_buf); -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 0/3] Mesh mpm fixes and enhancements
This patch set is addressing some issues found in the current 802.11s implementation, specifically when using hostap mpm. It's aligning the beacon format and handling some corner cases. V2 - Updated patches following review comments. - Remove unneccary patches (already upsteamed) Maital Hahn (1): mac80211: mesh: flush stations before beacons are stopped Yaniv Machani (2): mac80211: mesh: improve path resolving time mac80211: mesh: fixed HT ies in beacon template net/mac80211/mesh.c | 43 ++- net/mac80211/mesh_hwmp.c | 42 +- net/mac80211/util.c | 3 --- 3 files changed, 63 insertions(+), 25 deletions(-) -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
The HT capab info field inside the HT capab IE of the mesh beacon is incorrect (in the case of 20MHz channel width). To fix this driver will check configuration from cfg and will build it accordingly. Signed-off-by: Meirav KamaSigned-off-by: Yaniv Machani --- V3 - Updated comment - Removed CFG changes, as they are not correct. net/mac80211/mesh.c | 33 - net/mac80211/util.c | 3 --- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index 9214bc1..275131d 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c @@ -422,6 +422,8 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, enum nl80211_band band = ieee80211_get_sdata_band(sdata); struct ieee80211_supported_band *sband; u8 *pos; + u16 cap; + sband = local->hw.wiphy->bands[band]; if (!sband->ht_cap.ht_supported || @@ -430,11 +432,40 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) return 0; +/* determine capability flags */ + cap = sband->ht_cap.cap; + +/* if channel width is 20MHz - configure HT capab accordingly*/ + if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20) { + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; + cap &= ~IEEE80211_HT_CAP_DSSSCCK40; + } + + /* set SM PS mode properly */ + cap &= ~IEEE80211_HT_CAP_SM_PS; + switch (sdata->smps_mode) { + case IEEE80211_SMPS_AUTOMATIC: + case IEEE80211_SMPS_NUM_MODES: + WARN_ON(1); + case IEEE80211_SMPS_OFF: + cap |= WLAN_HT_CAP_SM_PS_DISABLED << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + case IEEE80211_SMPS_STATIC: + cap |= WLAN_HT_CAP_SM_PS_STATIC << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + case IEEE80211_SMPS_DYNAMIC: + cap |= WLAN_HT_CAP_SM_PS_DYNAMIC << + IEEE80211_HT_CAP_SM_PS_SHIFT; + break; + } + if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_cap)) return -ENOMEM; pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_cap)); - ieee80211_ie_build_ht_cap(pos, >ht_cap, sband->ht_cap.cap); + ieee80211_ie_build_ht_cap(pos, >ht_cap, cap); return 0; } diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 42bf0b6..5375a82 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -2349,10 +2349,7 @@ u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap, ht_oper->operation_mode = cpu_to_le16(prot_mode); ht_oper->stbc_param = 0x; - /* It seems that Basic MCS set and Supported MCS set - are identical for the first 10 bytes */ memset(_oper->basic_set, 0, 16); - memcpy(_oper->basic_set, _cap->mcs, 10); return pos + sizeof(struct ieee80211_ht_operation); } -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 2/2] mwifiex: add hostcmd wext ioctl support
From: Xinming HuThis patch adds ndo_ioctl support to mwifiex netdev handlers. This will be used to download hostcmds to firmware from userspace. This is needed for manufacturing mode support in mwifiex. ndo_ioctl is allowed only when mfg mode is enabled via module load parameters. Signed-off-by: Xinming Hu Signed-off-by: Amitkumar Karwar --- Changes in v2: 1) Sequence of these two patches are changed to resolve compilation error seen if only 1/2 is applied. 2) Add "select WEXT_PRIV" in Kconfig to resolve warnings reported by kbuild test robot. --- drivers/net/wireless/marvell/mwifiex/Kconfig | 3 ++ drivers/net/wireless/marvell/mwifiex/cmdevt.c | 59 +++ drivers/net/wireless/marvell/mwifiex/main.c | 38 + drivers/net/wireless/marvell/mwifiex/main.h | 9 +++- 4 files changed, 108 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/marvell/mwifiex/Kconfig b/drivers/net/wireless/marvell/mwifiex/Kconfig index 279167d..5b1d52a 100644 --- a/drivers/net/wireless/marvell/mwifiex/Kconfig +++ b/drivers/net/wireless/marvell/mwifiex/Kconfig @@ -13,6 +13,7 @@ config MWIFIEX_SDIO depends on MWIFIEX && MMC select FW_LOADER select WANT_DEV_COREDUMP + select WEXT_PRIV ---help--- This adds support for wireless adapters based on Marvell 8786/8787/8797/8887/8897/8997 chipsets with SDIO interface. @@ -25,6 +26,7 @@ config MWIFIEX_PCIE depends on MWIFIEX && PCI select FW_LOADER select WANT_DEV_COREDUMP + select WEXT_PRIV ---help--- This adds support for wireless adapters based on Marvell 8766/8897/8997 chipsets with PCIe interface. @@ -36,6 +38,7 @@ config MWIFIEX_USB tristate "Marvell WiFi-Ex Driver for USB8766/8797/8997" depends on MWIFIEX && USB select FW_LOADER + select WEXT_PRIV ---help--- This adds support for wireless adapters based on Marvell 8797/8997 chipset with USB interface. diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c index 8d57493..d961305 100644 --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c @@ -826,6 +826,8 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) hostcmd = adapter->curr_cmd->data_buf; hostcmd->len = size; memcpy(hostcmd->cmd, resp, size); + adapter->hostcmd_resp_data.len = size; + memcpy(adapter->hostcmd_resp_data.cmd, resp, size); } } orig_cmdresp_no = le16_to_cpu(resp->command); @@ -1208,6 +1210,63 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter) false); } EXPORT_SYMBOL_GPL(mwifiex_process_hs_config); +/* This function get hostcmd data from userspace and construct a cmd + * to be download to FW. + */ +int mwifiex_process_host_command(struct mwifiex_private *priv, +struct iwreq *wrq) +{ + struct mwifiex_ds_misc_cmd *hostcmd_buf; + struct host_cmd_ds_command *cmd; + struct mwifiex_adapter *adapter = priv->adapter; + int ret; + + hostcmd_buf = kzalloc(sizeof(*hostcmd_buf), GFP_KERNEL); + if (!hostcmd_buf) + return -ENOMEM; + + cmd = (void *)hostcmd_buf->cmd; + + if (copy_from_user(cmd, wrq->u.data.pointer, + sizeof(cmd->command) + sizeof(cmd->size))) { + ret = -EFAULT; + goto done; + } + + hostcmd_buf->len = le16_to_cpu(cmd->size); + if (hostcmd_buf->len > MWIFIEX_SIZE_OF_CMD_BUFFER) { + ret = -EINVAL; + goto done; + } + + if (copy_from_user(cmd, wrq->u.data.pointer, hostcmd_buf->len)) { + ret = -EFAULT; + goto done; + } + + if (mwifiex_send_cmd(priv, 0, 0, 0, hostcmd_buf, true)) { + dev_err(priv->adapter->dev, "Failed to process hostcmd\n"); + ret = -EFAULT; + goto done; + } + + if (adapter->hostcmd_resp_data.len > hostcmd_buf->len) { + ret = -EFBIG; + goto done; + } + + if (copy_to_user(wrq->u.data.pointer, adapter->hostcmd_resp_data.cmd, +adapter->hostcmd_resp_data.len)) { + ret = -EFAULT; + goto done; + } + wrq->u.data.length = adapter->hostcmd_resp_data.len; + + ret = 0; +done: + kfree(hostcmd_buf); + return ret; +} /* * This function handles the command response of a sleep confirm command. diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c index b54edf4..e3e1fe9 100644 ---
Re: [PATCH v4] brcmfmac: Decrease 8021x_cnt for dropped packets
On 12-7-2016 12:23, Per Förlin wrote: > 2016-07-12 11:48 GMT+02:00 Arend Van Spriel: >> >> >> On 12-7-2016 10:35, Per Förlin wrote: >>> 2016-07-06 11:53 GMT+02:00 Per Förlin : I have now verified this patch on backports 4.4. 2016-04-12 23:55 GMT+02:00 : > From: Per Forlin > > This patch resolves an issue where pend_8021x_cnt was not decreased > on txfinalize. This caused brcmf_netdev_wait_pend8021x to timeout > because the counter indicated pending packets. > > WARNING: at .../brcmfmac/core.c:1289 brcmf_netdev_wait_pend8021x > (warn_slowpath_common) > (warn_slowpath_null) > (brcmf_netdev_wait_pend8021x [brcmfmac]) > (send_key_to_dongle [brcmfmac]) > (brcmf_cfg80211_del_key [brcmfmac]) > (nl80211_del_key [cfg80211]) > (genl_rcv_msg) > (netlink_rcv_skb) > (genl_rcv) > (netlink_unicast) > (netlink_sendmsg) > (sock_sendmsg) > (___sys_sendmsg) > (__sys_sendmsg) > (SyS_sendmsg) > > The solution is to pull back the header offset in case > of an error in txdata(), which may happen in case of >>> Clarification: >>> >>> txdata=brcmf_proto_bcdc_txdata() >>> brcmf_proto_bcdc_txdata(): Calls brcmf_proto_bcdc_hdrpush() >>> >>> The header needs to be pulled back in case of error otherwise >>> the error handling and cleanup up will fail to decrease the counter >>> of pending packets. >> >> Yes, this part of the patch is clear to me. >> > Thanks, I wasn't sure. > > packet overload in brcmf_sdio_bus_txdata. > > Overloading an WLAN interface is not an unlikely scenario. >> >> So here is where things start to look suspicious and I have mentioned >> this before. My thought here was "How the hell can you end up with a >> 2048 packets on the sdio queue", which I mentioned to you before. There >> is a high watermark on the queue upon which we do a netif_stop_queue() >> so network layer does not keep pushing tx packets our way. Looking >> further into this I found that we introduced a bug with commit >> 9cd18359d31e ("brcmfmac: Make FWS queueing configurable.") so we ended >> up doing nothing except increasing as statistics debug counter :-( >> > Is there a fix available for the high watermark issue or is it > something you will look into? > > To produce a load on the wlan interface I run > iperf -c 239.255.1.3 -u -b 10m -f m -i 60 -t 3000 > and this is enough in my case to fill up the 2048 queue. > > In case of packet overload the error print "out of bus->txq" > is very verbose. To reduce SPAM degrade it to a debug print. > > Signed-off-by: Per Forlin > --- > Change log: > v2 - Add variable to know whether the counter is increased or not > v3 - txfinalize should decrease the counter. Adjust skb header offset > v4 - Fix build error > > drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 4 > drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 4 +++- > drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +- > 3 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c > b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c > index ed9998b..f342f7c 100644 > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c > @@ -541,6 +541,9 @@ void brcmf_txfinalize(struct brcmf_if *ifp, struct > sk_buff *txp, bool success) > struct ethhdr *eh; > u16 type; > > + if (!ifp) > + goto free; > + >> >> This may not be needed. >> > This is not strictly needed. I can remove it. > > eh = (struct ethhdr *)(txp->data); > type = ntohs(eh->h_proto); > > @@ -553,6 +556,7 @@ void brcmf_txfinalize(struct brcmf_if *ifp, struct > sk_buff *txp, bool success) > if (!success) > ifp->stats.tx_errors++; > > +free: > brcmu_pkt_buf_free_skb(txp); > } > > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c > b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c > index f82c9ab..98cb83f 100644 > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c > @@ -1899,8 +1899,10 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, > struct sk_buff *skb) > > if (fws->avoid_queueing) { > rc = brcmf_proto_txdata(drvr, ifp->ifidx, 0, skb); > - if (rc < 0) > + if (rc < 0) { > + (void)brcmf_proto_hdrpull(drvr, false, skb, ); >> >> Could it be that the ifp is
[PATCH v2 1/2] mwifiex: add manufacturing mode support
By default normal mode is chosen when driver is loaded. This patch adds a provision to choose manufacturing mode via module parameters. Command to load driver in manufacturing mode insmod mwifiex.ko mfg_mode=1 and mfg_firmware=mrvl/firmware. Tested-by: chunfan chenSigned-off-by: Amitkumar Karwar --- drivers/net/wireless/marvell/mwifiex/cmdevt.c | 8 ++ drivers/net/wireless/marvell/mwifiex/init.c | 22 +++-- drivers/net/wireless/marvell/mwifiex/main.c | 35 --- drivers/net/wireless/marvell/mwifiex/main.h | 4 +++ drivers/net/wireless/marvell/mwifiex/pcie.c | 2 +- drivers/net/wireless/marvell/mwifiex/sdio.c | 2 +- drivers/net/wireless/marvell/mwifiex/usb.c| 2 +- 7 files changed, 61 insertions(+), 14 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c index c29f26d..8d57493 100644 --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c @@ -581,6 +581,14 @@ int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no, return -1; } } + /* We don't expect commands in manufacturing mode. They are cooked +* in application and ready to download buffer is passed to the driver + */ + if (adapter->mfg_mode && cmd_no) { + dev_dbg(adapter->dev, "Ignoring commands in manufacturing mode\n"); + return -1; + } + /* Get a new command node */ cmd_node = mwifiex_get_cmd_node(adapter); diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c index 1489c90..82839d9 100644 --- a/drivers/net/wireless/marvell/mwifiex/init.c +++ b/drivers/net/wireless/marvell/mwifiex/init.c @@ -298,6 +298,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter) memset(>arp_filter, 0, sizeof(adapter->arp_filter)); adapter->arp_filter_size = 0; adapter->max_mgmt_ie_index = MAX_MGMT_IE_INDEX; + adapter->mfg_mode = mfg_mode; adapter->key_api_major_ver = 0; adapter->key_api_minor_ver = 0; eth_broadcast_addr(adapter->perm_addr); @@ -553,15 +554,22 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter) return -1; } } + if (adapter->mfg_mode) { + adapter->hw_status = MWIFIEX_HW_STATUS_READY; + ret = -EINPROGRESS; + } else { + for (i = 0; i < adapter->priv_num; i++) { + if (adapter->priv[i]) { + ret = mwifiex_sta_init_cmd(adapter->priv[i], + first_sta, true); + if (ret == -1) + return -1; + + first_sta = false; + } + - for (i = 0; i < adapter->priv_num; i++) { - if (adapter->priv[i]) { - ret = mwifiex_sta_init_cmd(adapter->priv[i], first_sta, - true); - if (ret == -1) - return -1; - first_sta = false; } } diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c index 0e280f8..b54edf4 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.c +++ b/drivers/net/wireless/marvell/mwifiex/main.c @@ -36,6 +36,14 @@ static unsigned short driver_mode; module_param(driver_mode, ushort, 0); MODULE_PARM_DESC(driver_mode, "station=0x1(default), ap-sta=0x3, station-p2p=0x5, ap-sta-p2p=0x7"); +bool mfg_mode; +module_param(mfg_mode, bool, 0); +MODULE_PARM_DESC(mfg_mode, "0:disable 1:enable (bool)"); + +char *mfg_firmware = ""; +module_param(mfg_firmware, charp, 0); +MODULE_PARM_DESC(mfg_firmware, "firmware path"); + /* * This function registers the device and performs all the necessary @@ -559,10 +567,12 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) goto done; } /* Wait for mwifiex_init to complete */ - wait_event_interruptible(adapter->init_wait_q, -adapter->init_wait_q_woken); - if (adapter->hw_status != MWIFIEX_HW_STATUS_READY) - goto err_init_fw; + if (!adapter->mfg_mode) { + wait_event_interruptible(adapter->init_wait_q, +adapter->init_wait_q_woken); + if (adapter->hw_status != MWIFIEX_HW_STATUS_READY) + goto err_init_fw; + } priv = adapter->priv[MWIFIEX_BSS_ROLE_STA]; if (mwifiex_register_cfg80211(adapter)) { @@ -666,6 +676,23 @@ static int mwifiex_init_hw_fw(struct
RE: [PATCH 3/4] mac80211: mesh: fixed HT ies in beacon template
On Wed, Jun 29, 2016 at 10:17:35, Johannes Berg wrote: > Cc: Kama, Meirav > Subject: Re: [PATCH 3/4] mac80211: mesh: fixed HT ies in beacon > template > > On Tue, 2016-06-28 at 14:13 +0300, Yaniv Machani wrote: > > > > net/mac80211/mesh.c | 33 - > > net/mac80211/util.c | 3 --- > > net/wireless/mesh.c | 2 +- > > That's not a good patch - one change is mac80211 and the other cfg80211. > > > - .ht_opmode = > IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED, > > + .ht_opmode = IEEE80211_HT_OP_MODE_PROTECTION_NONE, > > > How are you planning to comply with 802.11 now? Good point, this changed should be removed. The reason for this change was that we've noticed a difference between mesh beacon (built by the mac80211) and mesh actions (built by the supplicant) in the HT information IE. In beacons the HT operational mode is Mixed Mode (0x11) while in actions it is None (0x00). After a second look, it seems that it's the Supplicant that doesn't set the default value correctly. We'll send an updated patch for it. Thanks, Yaniv > > The HT Protection field in a mesh STA may be set to no protection mode > only if — All STAs detected in the primary or the secondary channel > are HT > STAs, and > — All mesh STA members of this MBSS that are one-hop neighbors of the > transmitting mesh STA are either: > — 20/40 MHz HT mesh STAs in a 20/40 MHz MBSS, or > — 20 MHz HT mesh STAs in a 20 MHz MBSS. > > johannes
Re: [PATCH] drivers: misc: ti-st: Use int instead of fuzzy char for callback status
Hi Marcel, On Wed, Jul 13, 2016 at 11:56:02AM +0100, Marcel Holtmann wrote: > Hi Mauro, > > >> On mips and parisc: > >> > >>drivers/bluetooth/btwilink.c: In function 'ti_st_open': > >>drivers/bluetooth/btwilink.c:174:21: warning: overflow in implicit > >> constant conversion [-Woverflow] > >> hst->reg_status = -EINPROGRESS; > >> > >>drivers/nfc/nfcwilink.c: In function 'nfcwilink_open': > >>drivers/nfc/nfcwilink.c:396:31: warning: overflow in implicit constant > >> conversion [-Woverflow] > >> drv->st_register_cb_status = -EINPROGRESS; > >> > >> There are actually two issues: > >> 1. Whether "char" is signed or unsigned depends on the architecture. > >> As the completion callback data is used to pass a (negative) error > >> code, it should always be signed. > >> 2. EINPROGRESS is 150 on mips, 245 on parisc. > >> Hence -EINPROGRESS doesn't fit in a signed 8-bit number. > >> > >> Change the callback status from "char" to "int" to fix these. > >> > >> Signed-off-by: Geert Uytterhoeven> > > > Patch looks sane to me, but who will apply it? > > > > Anyway: > > > > Acked-by: Mauro Carvalho Chehab > > I can take it through bluetooth-next if there is no objection. > > Samuel, are you fine with that? Yes, please go ahead. Cheers, Samuel. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] drivers: misc: ti-st: Use int instead of fuzzy char for callback status
Hi Mauro, >> On mips and parisc: >> >>drivers/bluetooth/btwilink.c: In function 'ti_st_open': >>drivers/bluetooth/btwilink.c:174:21: warning: overflow in implicit >> constant conversion [-Woverflow] >> hst->reg_status = -EINPROGRESS; >> >>drivers/nfc/nfcwilink.c: In function 'nfcwilink_open': >>drivers/nfc/nfcwilink.c:396:31: warning: overflow in implicit constant >> conversion [-Woverflow] >> drv->st_register_cb_status = -EINPROGRESS; >> >> There are actually two issues: >> 1. Whether "char" is signed or unsigned depends on the architecture. >> As the completion callback data is used to pass a (negative) error >> code, it should always be signed. >> 2. EINPROGRESS is 150 on mips, 245 on parisc. >> Hence -EINPROGRESS doesn't fit in a signed 8-bit number. >> >> Change the callback status from "char" to "int" to fix these. >> >> Signed-off-by: Geert Uytterhoeven> > Patch looks sane to me, but who will apply it? > > Anyway: > > Acked-by: Mauro Carvalho Chehab I can take it through bluetooth-next if there is no objection. Samuel, are you fine with that? Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] drivers: misc: ti-st: Use int instead of fuzzy char for callback status
Em Mon, 6 Jun 2016 11:02:03 +0200 Geert Uytterhoevenescreveu: > On mips and parisc: > > drivers/bluetooth/btwilink.c: In function 'ti_st_open': > drivers/bluetooth/btwilink.c:174:21: warning: overflow in implicit > constant conversion [-Woverflow] >hst->reg_status = -EINPROGRESS; > > drivers/nfc/nfcwilink.c: In function 'nfcwilink_open': > drivers/nfc/nfcwilink.c:396:31: warning: overflow in implicit constant > conversion [-Woverflow] > drv->st_register_cb_status = -EINPROGRESS; > > There are actually two issues: > 1. Whether "char" is signed or unsigned depends on the architecture. > As the completion callback data is used to pass a (negative) error > code, it should always be signed. > 2. EINPROGRESS is 150 on mips, 245 on parisc. > Hence -EINPROGRESS doesn't fit in a signed 8-bit number. > > Change the callback status from "char" to "int" to fix these. > > Signed-off-by: Geert Uytterhoeven Patch looks sane to me, but who will apply it? Anyway: Acked-by: Mauro Carvalho Chehab > --- > Compile-tested only. > --- > drivers/bluetooth/btwilink.c | 4 ++-- > drivers/media/radio/wl128x/fmdrv_common.c | 2 +- > drivers/misc/ti-st/st_core.c | 2 +- > drivers/nfc/nfcwilink.c | 4 ++-- > include/linux/ti_wilink_st.h | 2 +- > 5 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/drivers/bluetooth/btwilink.c b/drivers/bluetooth/btwilink.c > index 24a652f9252be899..485281b3f1677678 100644 > --- a/drivers/bluetooth/btwilink.c > +++ b/drivers/bluetooth/btwilink.c > @@ -51,7 +51,7 @@ > */ > struct ti_st { > struct hci_dev *hdev; > - char reg_status; > + int reg_status; > long (*st_write) (struct sk_buff *); > struct completion wait_reg_completion; > }; > @@ -83,7 +83,7 @@ static inline void ti_st_tx_complete(struct ti_st *hst, int > pkt_type) > * status.ti_st_open() function will wait for signal from this > * API when st_register() function returns ST_PENDING. > */ > -static void st_reg_completion_cb(void *priv_data, char data) > +static void st_reg_completion_cb(void *priv_data, int data) > { > struct ti_st *lhst = priv_data; > > diff --git a/drivers/media/radio/wl128x/fmdrv_common.c > b/drivers/media/radio/wl128x/fmdrv_common.c > index 3f9e6df7d837ac27..642b89c66bcb99eb 100644 > --- a/drivers/media/radio/wl128x/fmdrv_common.c > +++ b/drivers/media/radio/wl128x/fmdrv_common.c > @@ -1472,7 +1472,7 @@ static long fm_st_receive(void *arg, struct sk_buff > *skb) > * Called by ST layer to indicate protocol registration completion > * status. > */ > -static void fm_st_reg_comp_cb(void *arg, char data) > +static void fm_st_reg_comp_cb(void *arg, int data) > { > struct fmdev *fmdev; > > diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c > index dcdbd58672ccc6d2..00051590e00f9647 100644 > --- a/drivers/misc/ti-st/st_core.c > +++ b/drivers/misc/ti-st/st_core.c > @@ -141,7 +141,7 @@ static void st_send_frame(unsigned char chnl_id, struct > st_data_s *st_gdata) > * This function is being called with spin lock held, protocol drivers are > * only expected to complete their waits and do nothing more than that. > */ > -static void st_reg_complete(struct st_data_s *st_gdata, char err) > +static void st_reg_complete(struct st_data_s *st_gdata, int err) > { > unsigned char i = 0; > pr_info(" %s ", __func__); > diff --git a/drivers/nfc/nfcwilink.c b/drivers/nfc/nfcwilink.c > index f81e500e765061fd..3fbd18b8e473f696 100644 > --- a/drivers/nfc/nfcwilink.c > +++ b/drivers/nfc/nfcwilink.c > @@ -94,7 +94,7 @@ struct nfcwilink { > struct nci_dev *ndev; > unsigned long flags; > > - charst_register_cb_status; > + int st_register_cb_status; > long(*st_write) (struct sk_buff *); > > struct completion completed; > @@ -320,7 +320,7 @@ exit: > } > > /* Called by ST when registration is complete */ > -static void nfcwilink_register_complete(void *priv_data, char data) > +static void nfcwilink_register_complete(void *priv_data, int data) > { > struct nfcwilink *drv = priv_data; > > diff --git a/include/linux/ti_wilink_st.h b/include/linux/ti_wilink_st.h > index 0a0d56834c8eb412..f2293028ab9d65e6 100644 > --- a/include/linux/ti_wilink_st.h > +++ b/include/linux/ti_wilink_st.h > @@ -71,7 +71,7 @@ struct st_proto_s { > enum proto_type type; > long (*recv) (void *, struct sk_buff *); > unsigned char (*match_packet) (const unsigned char *data); > - void (*reg_complete_cb) (void *, char data); > + void (*reg_complete_cb) (void *, int data); > long (*write) (struct sk_buff *skb); > void *priv_data; > -- Thanks, Mauro -- To
Re: [PATCH RESEND] iwlwifi, Do not implement thermal zone unless ucode is loaded
On 07/13/2016 03:24 AM, Luca Coelho wrote: > On Wed, 2016-07-13 at 09:50 +0300, Kalle Valo wrote: >> Prarit Bhargavawrites: >> We implement thermal zone because we do support it, but the problem is that we need the firmware to be loaded for that. So you can argue that we should register *later* when the firmware is loaded. But this is really not helping all that much because the firmware can also be stopped at any time. So you'd want us to register / unregister the thermal zone anytime the firmware is loaded / unloaded? >>> >>> You might have to do that. I think that if the firmware enables a >>> feature then >>> the act of loading the firmware should run the code that enables >>> the feature. >>> IMO of course. >> >> But I suspect that the iwlwifi firmware is loaded during interface up >> (and unloaded during interface down) and in that case >> register/unregister would be happening all the time. That doesn't >> sound >> like a good idea. I would rather try to fix the thermal interface to >> handle the cases when the measurement is not available. > > I totally agree with Emmanuel and Kalle. We should not change this. > It is a design decision to return an error when the interface is down, > this is very common with other subsystems as well. Please show me another subsystem or driver that does this. I've looked around the kernel but cannot find one that updates the firmware and implements new features on the fly like this. I have come across several drivers that allow for an update, but they do not implement new features based on the firmware. Additionally, what happens when someone back revs firmware versions (which happens far more than you and I would expect)? Does that mean I now go from a functional system to a non-functional system wrt to userspace? The userspace > should be able to handle errors and report something like "unavailable" > when this kind of error is returned. > I myself have made the same arguments wrt to cpufreq code & bad userspace choices. I just went through this a few months back with what went from a simple patch and turned out to be a hideous patch in cpufreq. You cannot break userspace like this. See commit 51443fbf3d2c ("cpufreq: intel_pstate: Fix intel_pstate powersave min_perf_pct value"). What should have been a trivial change resulted in a massive change because of broken userspace. > I'm not sure EIO is the best we can have, but for me that's exactly > what it is. The thermal zone *is* there, but cannot be accessed > because the firmware is not available. I'm okay to change it to EBUSY, > if that would help userspace, but I think that's a bit misleading. The > device is not busy, on the contrary, it's not even running at all. > I understand that, but by returning -EIO we end up with an error. > Furthermore, I don't think this is "breaking userspace" in the sense of > being a regression. I run (let's say 4.5 kernel). sensors works. I update to 4.7. sensors doesn't work. How is that not a regression? That's _exactly_ what it should be reported as. The userspace API has always been implemented with > the possibility of returning errors. It's not a good design if a > single device returning an error causes all the other devices to also > fail. > If that were the case we would never have to worry about "breaking userspace"? For any kernel change I could just say that the userspace design was bad and be done with it. Why fix anything then? I don't see any harm in waiting to register the sysfs files for hwmon until the firmware has been validated. IIUC, the up/down'ing of the device doesn't happen that often (during initial boot, and suspend/resume, switching wifi connections, shutdown?). This would make the iwlwifi community happy (IMO) and sensors would still work. At the same time I could write a patch for lm-sensors to fix this issue if it comes up in future versions. [Aside: I'm going to have the reproducing system available today and will test this out. It looks like just moving some code around.] The bottom line is that lm-sensors is currently broken with this change in iwlwifi. AFAICT, no other thermal device returns an error this way, and IMO that means the iwlwifi driver is doing something new and unexpected wrt to userspace. P. > -- > Cheers, > Luca. > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH 1/4] mac80211: mesh: flush stations before beacons are stopped
On Wed, Jun 29, 2016 at 10:14:19, Johannes Berg wrote: > Cc: Hahn, Maital > Subject: Re: [PATCH 1/4] mac80211: mesh: flush stations before beacons > are stopped > > On Tue, 2016-06-28 at 14:13 +0300, Yaniv Machani wrote: > > From: Maital Hahn> > > > Some drivers (e.g. wl18xx) expect that the last stage in the > > de-initialization process will be stopping the beacons, similar to ap. > > Update ieee80211_stop_mesh() flow accordingly. > > > How well have you tested that with other drivers? > Sorry for the delayed response (I've been out) and thanks for your comments, I have tested it with RT3572 as well, and didn't see any issue. I'll update the comment to reflect that. Thanks, Yaniv > Changing behaviour to something a single driver desires isn't > necessarily the best thing to do, since there always are multiple drivers. > > If you're able to demonstrate that it works with the other drivers I'm > willing to take that - the change makes sense after all, and it seems > drivers must support this ordering since peers are also removed > dynamically... But still. Don't just make a change like that without > even giving any indication why you think it's fine for other drivers! > > johannes N�r��yb�X��ǧv�^�){.n�+{��*ޕ�,�{ay�ʇڙ�,j��f���h���z��w��� ���j:+v���w�j�mzZ+�ݢj"��!�i
Re: [PATCH RESEND] iwlwifi, Do not implement thermal zone unless ucode is loaded
On 07/13/2016 02:50 AM, Kalle Valo wrote: > Prarit Bhargavawrites: > >>> We implement thermal zone because we do support it, but the problem is >>> that we need the firmware to be loaded for that. So you can argue that >>> we should register *later* when the firmware is loaded. But this is >>> really not helping all that much because the firmware can also be >>> stopped at any time. So you'd want us to register / unregister the >>> thermal zone anytime the firmware is loaded / unloaded? >> >> You might have to do that. I think that if the firmware enables a feature >> then >> the act of loading the firmware should run the code that enables the feature. >> IMO of course. > > But I suspect that the iwlwifi firmware is loaded during interface up > (and unloaded during interface down) and in that case > register/unregister would be happening all the time. You make it sound like the interface is coming and going a 1000 times a second. Maybe this happens once during runtime & during suspend/resume cycles? What about the cases when the firmware isn't present (and that's what lead me to this bug)? That doesn't sound > like a good idea. I would rather try to fix the thermal interface to > handle the cases when the measurement is not available. > Userspace is broken because of this change. I've had to make another horrible change to cpufreq for a similar change so I don't see the argument here to just blame userspace and ignore the outcome of the patch. P. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH] wlcore/wl18xx: mesh: added initial mesh support for wl8
On Tue, Jun 28, 2016 at 13:41:35, Machani, Yaniv wrote: > Guy; Johannes Berg; Arik Nemtsov; linux-wireless@vger.kernel.org; > net...@vger.kernel.org > Subject: [PATCH] wlcore/wl18xx: mesh: added initial mesh support for > wl8 > > From: Maital Hahn> > 1. Added support for interface and role of mesh type. > 2. Enabled enable/start of mesh-point role, >and opening and closing a connection with a mesh peer. > 3. Added multirole combination of mesh and ap >under the same limits of dual ap mode. > 4. Add support for 'sta_rc_update' opcode for mesh IF. >The 'sta_rc_update' opcode is being used in mesh_plink.c. > Add support in wlcore to handle this opcode correctly for mesh (as > opposed to current implementation that handles STA only). > 5. Bumped the firmware version to support new Mesh functionality > > Signed-off-by: Maital Hahn > Signed-off-by: Yaniv Machani > --- Any comments on this patch ? Can this be pulled ? Thanks, Yaniv -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: TCP performance regression in mac80211 triggered by the fq code
On Wed, Jul 13, 2016 at 10:53 AM, Felix Fietkauwrote: >> To me this implies a contending lock issue, too much work in the irq >> handler or too delayed work in the softirq handler >> >> I thought you were very brave to try and backport this. > I don't think this has anything to do with contending locks, CPU > utilization, etc. The code does something to the packets that TCP really > doesn't like. With your 70% idle figure, I am inclined to agree... could you get an aircap of the two different tests? - as well as a regular packetcap taken at the client or server? And put somewhere I can get at them? What version of OSX are you running? I will setup an ath9k box shortly... -- Dave Täht Let's go make home routers and wifi faster! With better software! http://blog.cerowrt.org -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] mac80211: remove skb header offset mangling in ieee80211_build_hdr
Since the code only touches the MAC headers, the offsets to the network/transport headers remain the same throughout this function. Remove pointless pieces of code that try to 'preserve' them. Signed-off-by: Felix Fietkau--- net/mac80211/tx.c | 28 ++-- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 24ec38a..cc2ca09 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -2325,7 +2325,6 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, struct mesh_path __maybe_unused *mppath = NULL, *mpath = NULL; const u8 *encaps_data; int encaps_len, skip_header_bytes; - int nh_pos, h_pos; bool wme_sta = false, authorized = false; bool tdls_peer; bool multicast; @@ -2634,13 +2633,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, encaps_len = 0; } - nh_pos = skb_network_header(skb) - skb->data; - h_pos = skb_transport_header(skb) - skb->data; - skb_pull(skb, skip_header_bytes); - nh_pos -= skip_header_bytes; - h_pos -= skip_header_bytes; - head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb); head_need += padsize; @@ -2667,18 +2660,12 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, } } - if (encaps_data) { + if (encaps_data) memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len); - nh_pos += encaps_len; - h_pos += encaps_len; - } #ifdef CONFIG_MAC80211_MESH - if (meshhdrlen > 0) { + if (meshhdrlen > 0) memcpy(skb_push(skb, meshhdrlen), _hdr, meshhdrlen); - nh_pos += meshhdrlen; - h_pos += meshhdrlen; - } #endif if (padsize) @@ -2697,15 +2684,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, } else memcpy(skb_push(skb, hdrlen), , hdrlen); - nh_pos += hdrlen + padsize; - h_pos += hdrlen + padsize; - - /* Update skb pointers to various headers since this modified frame -* is going to go through Linux networking code that may potentially -* need things like pointer to IP header. */ skb_reset_mac_header(skb); - skb_set_network_header(skb, nh_pos); - skb_set_transport_header(skb, h_pos); info = IEEE80211_SKB_CB(skb); memset(info, 0, sizeof(*info)); @@ -4391,9 +4370,6 @@ void __ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata, int ac = ieee802_1d_to_ac[tid & 7]; skb_reset_mac_header(skb); - skb_reset_network_header(skb); - skb_reset_transport_header(skb); - skb_set_queue_mapping(skb, ac); skb->priority = tid; -- 2.8.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: TCP performance regression in mac80211 triggered by the fq code
On 2016-07-13 09:57, Dave Taht wrote: > On Tue, Jul 12, 2016 at 4:02 PM, Dave Tahtwrote: >> On Tue, Jul 12, 2016 at 3:21 PM, Felix Fietkau wrote: >>> On 2016-07-12 14:13, Dave Taht wrote: On Tue, Jul 12, 2016 at 12:09 PM, Felix Fietkau wrote: > Hi, > > With Toke's ath9k txq patch I've noticed a pretty nasty performance > regression when running local iperf on an AP (running the txq stuff) to > a wireless client. Your kernel? cpu architecture? >>> QCA9558, 720 MHz, running Linux 4.4.14 > > So this is a single core at the near-bottom end of the range. I guess > we also should find a MIPS 24c derivative that runs at 400Mhz or so. > > What HZ? (I no longer know how much higher HZ settings make any > difference, but I'm usually at NOHZ and 250, rather than 100.) > > And all the testing to date was on much higher end multi-cores. > What happens when going through the AP to a server from the wireless client? >>> Will test that next. > > And? Single stream: 130 Mbit/s, 70% idle Two streams: 50-80 Mbit/s (wildly fluctuating), 73% idle. Which direction? >>> AP->STA, iperf running on the AP. Client is a regular MacBook Pro >>> (Broadcom). >> >> There are always 2 wifi chips in play. Like the Sith. >> > Here's some things that I found: > - when I use only one TCP stream I get around 90-110 Mbit/s with how much cpu left over? >>> ~20% >>> > - when running multiple TCP streams, I get only 35-40 Mbit/s total with how much cpu left over? >>> ~30% > > To me this implies a contending lock issue, too much work in the irq > handler or too delayed work in the softirq handler > > I thought you were very brave to try and backport this. I don't think this has anything to do with contending locks, CPU utilization, etc. The code does something to the packets that TCP really doesn't like. - Felix -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: TCP performance regression in mac80211 triggered by the fq code
On Tue, Jul 12, 2016 at 4:02 PM, Dave Tahtwrote: > On Tue, Jul 12, 2016 at 3:21 PM, Felix Fietkau wrote: >> On 2016-07-12 14:13, Dave Taht wrote: >>> On Tue, Jul 12, 2016 at 12:09 PM, Felix Fietkau wrote: Hi, With Toke's ath9k txq patch I've noticed a pretty nasty performance regression when running local iperf on an AP (running the txq stuff) to a wireless client. >>> >>> Your kernel? cpu architecture? >> QCA9558, 720 MHz, running Linux 4.4.14 So this is a single core at the near-bottom end of the range. I guess we also should find a MIPS 24c derivative that runs at 400Mhz or so. What HZ? (I no longer know how much higher HZ settings make any difference, but I'm usually at NOHZ and 250, rather than 100.) And all the testing to date was on much higher end multi-cores. >>> What happens when going through the AP to a server from the wireless client? >> Will test that next. And? >> >>> Which direction? >> AP->STA, iperf running on the AP. Client is a regular MacBook Pro >> (Broadcom). > > There are always 2 wifi chips in play. Like the Sith. > Here's some things that I found: - when I use only one TCP stream I get around 90-110 Mbit/s >>> >>> with how much cpu left over? >> ~20% >> - when running multiple TCP streams, I get only 35-40 Mbit/s total >>> with how much cpu left over? >> ~30% To me this implies a contending lock issue, too much work in the irq handler or too delayed work in the softirq handler I thought you were very brave to try and backport this. > > Hmm. > > Care to try netperf? > >> >>> context switch difference between the two tests? >> What's the easiest way to track that? > > if you have gnu "time" time -v the_process > > or: > > perf record -e context-switches -ag > > or: process /proc/$PID/status for cntx > >>> tcp_limit_output_bytes is? >> 262144 > > I keep hoping to be able to reduce this to something saner like 4096 > one day. It got bumped to 64k based on bad wifi performance once, and > then to it's current size to make the Xen folk happier. > > The other param I'd like to see fiddled with is tcp_notsent_lowat. > > In both cases reductions will increase your context switches but > reduce memory pressure and lead to a more reactive tcp. > > And in neither case I think this is the real cause of this problem. > > >>> got perf? >> Need to make a new build for that. >> - fairness between TCP streams looks completely fine >>> >>> A codel will get to long term fairness pretty fast. Packet captures >>> from a fq will show much more regular interleaving of packets, >>> regardless. >>> - there's no big queue buildup, the code never actually drops any packets >>> >>> A "trick" I have been using to observe codel behavior has been to >>> enable ecn on server and client, then checking in wireshark for ect(3) >>> marked packets. >> I verified this with printk. The same issue already appears if I have >> just the fq patch (with the codel patch reverted). > > OK. A four flow test "should" trigger codel > > Running out of cpu (or hitting some other bottleneck), without > loss/marking "should" result in a tcptrace -G and xplot.org of the > packet capture showing the window continuing to increase > > - if I put a hack in the fq code to force the hash to a constant value >>> >>> You could also set "flows" to 1 to keep the hash being generated, but >>> not actually use it. >>> (effectively disabling fq without disabling codel), the problem disappears and even multiple streams get proper performance. >>> >>> Meaning you get 90-110Mbits ? >> Right. >> >>> Do you have a "before toke" figure for this platform? >> It's quite similar. >> Please let me know if you have any ideas. >>> >>> I am in berlin, packing hardware... >> Nice! >> >> - Felix >> > > > > -- > Dave Täht > Let's go make home routers and wifi faster! With better software! > http://blog.cerowrt.org -- Dave Täht Let's go make home routers and wifi faster! With better software! http://blog.cerowrt.org -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: pull-request: iwlwifi 2016-07-11
Luca Coelhowrites: > This is a fix for a warning that was spotted by Linus. We already have > this patch queued in -next, but it should have gone to -fixes. I hope > it is still possible to send it for 4.7. And it shouldn't be a problem > to have it in both, right? I guess git merge would take care of that. Like we discussed privately, even if iwlwifi was printing warnings the connection was still working for Linus so this is not critical enough for 4.7 so late in the cycle. So let's drop this and the fix can go to 4.8 as planned. -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4 1/3] Documentation: dt: net: add ath9k wireless device binding
On Wednesday, July 13, 2016 10:02:39 AM CEST Kalle Valo wrote: > Martin Blumenstinglwrites: > > > Add documentation how devicetree can be used to configure ath9k based > > devices. > > > > Signed-off-by: Martin Blumenstingl > > --- > > .../devicetree/bindings/net/wireless/qca,ath9k.txt | 59 > > ++ > > 1 file changed, 59 insertions(+) > > create mode 100644 > > Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > > > > diff --git a/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > > b/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > > new file mode 100644 > > index 000..7c62c59 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > > @@ -0,0 +1,59 @@ > > +* Qualcomm Atheros ath9k wireless devices > > + > > +This node provides properties for configuring the ath9k wireless device. > > The > > +node is expected to be specified as a child node of the PCI controller to > > +which the wireless chip is connected. > > + > > +Required properties: > > +- compatible: Should be "qca,ath9k" > > Isn't this supposed to use the chipset name? ath9k is the driver name > and something like ar9462 is the chip name. I know in ath10k we used > "qca,ath10k" but I'm starting to suspect that was a mistake. > You are right, but it's actually more complicated than that. For PCI devices, the format of the compatible strings is defined in http://www.o3one.org/hwdocs/openfirmware/pci_supplement_2_1.pdf and it doesn't use the "vendor,device" syntax at all but instead uses pci, where and are the hexadecimal (without leading 0x) vendor and device ID numbers. The document also specifies seven other formats and in theory you should list them all, but that really only makes sense for Open Firmware that programatically creates those strings. For a hand-written DTS source, I'd just use the shortest one of those. Linux actually doesn't care at all, as PCI drivers don't use the compatible string but instead look at the config register values that were read by the PCI core. For USB, we do basically the same thing, but have very few examples of that as Linux only recently started supporting this. For SDIO devices we should have done the same thing but screwed up when we made the generic binding and we have no policy, the example even lists one that makes no sense at all ("brcm,bcm43xx-fmac") as it is neither a specific device nor something derived from the IDs. For on-chip devices, we should follow the common policy for on-chip devices and use the "vendor,chip-funcion" with fallbacks for compatible devices such as: compatible = "tplink,tp9343-wifi", "qca,qca9561-wifi", "atheros,ar9001-wifi"; For a chip that is branded by TP-Link and derived from a Qualcomm Atheros chip it is 100% compatible with, and in turn derived from an older implementation (just guessing which one was the original ath9k). Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH RESEND] iwlwifi, Do not implement thermal zone unless ucode is loaded
On Wed, 2016-07-13 at 09:50 +0300, Kalle Valo wrote: > Prarit Bhargavawrites: > > > > We implement thermal zone because we do support it, but the > > > problem is > > > that we need the firmware to be loaded for that. So you can argue > > > that > > > we should register *later* when the firmware is loaded. But this > > > is > > > really not helping all that much because the firmware can also be > > > stopped at any time. So you'd want us to register / unregister > > > the > > > thermal zone anytime the firmware is loaded / unloaded? > > > > You might have to do that. I think that if the firmware enables a > > feature then > > the act of loading the firmware should run the code that enables > > the feature. > > IMO of course. > > But I suspect that the iwlwifi firmware is loaded during interface up > (and unloaded during interface down) and in that case > register/unregister would be happening all the time. That doesn't > sound > like a good idea. I would rather try to fix the thermal interface to > handle the cases when the measurement is not available. I totally agree with Emmanuel and Kalle. We should not change this. It is a design decision to return an error when the interface is down, this is very common with other subsystems as well. The userspace should be able to handle errors and report something like "unavailable" when this kind of error is returned. I'm not sure EIO is the best we can have, but for me that's exactly what it is. The thermal zone *is* there, but cannot be accessed because the firmware is not available. I'm okay to change it to EBUSY, if that would help userspace, but I think that's a bit misleading. The device is not busy, on the contrary, it's not even running at all. Furthermore, I don't think this is "breaking userspace" in the sense of being a regression. The userspace API has always been implemented with the possibility of returning errors. It's not a good design if a single device returning an error causes all the other devices to also fail. -- Cheers, Luca. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: 4.8 merge window closing
Kalle Valowrites: > Linus released 4.7-rc6 last Sunday but didn't give any hints how close > the real release is, but nevertheless the merge window for 4.8 is > getting quite close so if there's anything you want to have in > wireless-drivers-next for 4.8 better send them NOW. Especially as I > won't have that much time to apply patches the next two weeks. Due to travelling Linus gave us one more week so the deadline for wireless-drivers patches is now next Sunday (or so). As I'm taking it easy this week still I will start actively applying patches only next week, but better to have the patches reviewed and ready by then. -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] mac80211: End the MPSP even if EOSP frame was not received
The mesh STA sends QoS frame with EOSP (end of service period) subfiled=1 to end the MPSP(mesh peer service period). Previously, if the frame was not acked by peer, the mesh STA did not end the MPSP. This patch ends the MPSP even if the QoS frame was no acked. Signed-off-by: Masashi Honma--- net/mac80211/status.c | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/mac80211/status.c b/net/mac80211/status.c index c6d5c72..a2a6826 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c @@ -771,6 +771,13 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) clear_sta_flag(sta, WLAN_STA_SP); acked = !!(info->flags & IEEE80211_TX_STAT_ACK); + + /* mesh Peer Service Period support */ + if (ieee80211_vif_is_mesh(>sdata->vif) && + ieee80211_is_data_qos(fc)) + ieee80211_mpsp_trigger_process( + ieee80211_get_qos_ctl(hdr), sta, true, acked); + if (!acked && test_sta_flag(sta, WLAN_STA_PS_STA)) { /* * The STA is in power save mode, so assume @@ -781,13 +788,6 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) return; } - /* mesh Peer Service Period support */ - if (ieee80211_vif_is_mesh(>sdata->vif) && - ieee80211_is_data_qos(fc)) - ieee80211_mpsp_trigger_process( - ieee80211_get_qos_ctl(hdr), - sta, true, acked); - if (ieee80211_hw_check(>hw, HAS_RATE_CONTROL) && (ieee80211_is_data(hdr->frame_control)) && (rates_idx != -1)) -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4 1/3] Documentation: dt: net: add ath9k wireless device binding
Martin Blumenstinglwrites: > Add documentation how devicetree can be used to configure ath9k based > devices. > > Signed-off-by: Martin Blumenstingl > --- > .../devicetree/bindings/net/wireless/qca,ath9k.txt | 59 > ++ > 1 file changed, 59 insertions(+) > create mode 100644 > Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > > diff --git a/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > b/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > new file mode 100644 > index 000..7c62c59 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt > @@ -0,0 +1,59 @@ > +* Qualcomm Atheros ath9k wireless devices > + > +This node provides properties for configuring the ath9k wireless device. The > +node is expected to be specified as a child node of the PCI controller to > +which the wireless chip is connected. > + > +Required properties: > +- compatible: Should be "qca,ath9k" Isn't this supposed to use the chipset name? ath9k is the driver name and something like ar9462 is the chip name. I know in ath10k we used "qca,ath10k" but I'm starting to suspect that was a mistake. -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH RESEND] iwlwifi, Do not implement thermal zone unless ucode is loaded
Prarit Bhargavawrites: >> We implement thermal zone because we do support it, but the problem is >> that we need the firmware to be loaded for that. So you can argue that >> we should register *later* when the firmware is loaded. But this is >> really not helping all that much because the firmware can also be >> stopped at any time. So you'd want us to register / unregister the >> thermal zone anytime the firmware is loaded / unloaded? > > You might have to do that. I think that if the firmware enables a feature > then > the act of loading the firmware should run the code that enables the feature. > IMO of course. But I suspect that the iwlwifi firmware is loaded during interface up (and unloaded during interface down) and in that case register/unregister would be happening all the time. That doesn't sound like a good idea. I would rather try to fix the thermal interface to handle the cases when the measurement is not available. -- Kalle Valo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: iwlwifi + wpa2-leap + multiple AP's = call trace
On 13-7-2016 2:29, Ismael Farfán wrote: > Hello list > > I searched this error around and didn't find anything, so here it goes. > > Today I tried to connect to an enterprise network, which means, > literally, tens of AP's sharing the same name... the network requieres > user/password authentication (wpa2-leap). > > I'm using Arch > $ uname -a > Linux 4.6.3-1-ARCH #1 SMP PREEMPT Fri Jun 24 21:19:13 CEST 2016 x86_64 > GNU/Linux > > Since the thing just didn't connect, I checked dmesg and found this: > > Any ideas? >From the stack trace it seems wpa_supplicant on Arch is using WEXT API. You could try and change it to use NL80211 API. Personally, I have not used Arch Linux so no idea where to change that. The warning is here [1]: 503 IWL_DEBUG_TE(mvm, "Add new TE, duration %d TU\n", 504 le32_to_cpu(te_cmd->duration)); 505 506 spin_lock_bh(>time_event_lock); 507 if (WARN_ON(te_data->id != TE_MAX)) { 508 spin_unlock_bh(>time_event_lock); 509 return -EIO; 510 } It seems this function is called with te_data that is already in use, but that is my uneducated guess so I may be wrong. Regards, Arend [1] http://lxr.free-electrons.com/source/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c#L507 > > [ 83.030072] wifi0: aborting authentication with xx:xx:xx:xx:xx:xx > by local choice (Reason: 3=DEAUTH_LEAVING) > [ 83.030073] [ cut here ] > [ 83.030082] WARNING: CPU: 2 PID: 1087 at > drivers/net/wireless/intel/iwlwifi/mvm/time-event.c:507 iwl_mvm_tim > e_event_send_add+0x1c6/0x200 [iwlmvm] > [ 83.030157] CPU: 2 PID: 1087 Comm: wpa_supplicant Tainted: G >O4.6.3-1-ARCH #1 > [ 83.030158] Hardware name: Notebook > P65_P67SA /P65_P67SA > , BIOS 1.03.01 07/22/2015 > [ 83.030160] 0286 09e998bc 880403a5b940 > 812e54c2 > [ 83.030162] 880403a5b980 > 8107a6bb > [ 83.030164] 01fb81a8a180 88041b443580 88041c329548 > fffb > [ 83.030167] Call Trace: > [ 83.030172] [] dump_stack+0x63/0x81 > [ 83.030174] [] __warn+0xcb/0xf0 > [ 83.030176] [] warn_slowpath_null+0x1d/0x20 > [ 83.030181] [] > iwl_mvm_time_event_send_add+0x1c6/0x200 [iwlmvm] > [ 83.030184] [] ? up+0x32/0x50 > [ 83.030187] [] ? wake_up_klogd+0x3b/0x50 > [ 83.030189] [] ? console_unlock+0x4e9/0x590 > [ 83.030193] [] > iwl_mvm_protect_session+0x220/0x280 [iwlmvm] > [ 83.030196] [] ? iwl_mvm_ref_sync+0x2e/0x140 [iwlmvm] > [ 83.030199] [] ? vprintk_default+0x1f/0x30 > [ 83.030202] [] > iwl_mvm_mac_mgd_prepare_tx+0x5a/0xa0 [iwlmvm] > [ 83.030216] [] ieee80211_mgd_deauth+0x338/0x4d0 > [mac80211] > [ 83.030219] [] ? enqueue_entity+0x323/0xd70 > [ 83.030228] [] ieee80211_deauth+0x18/0x20 [mac80211] > [ 83.030237] [] cfg80211_mlme_deauth+0x9f/0x1a0 > [cfg80211] > [ 83.030242] [] cfg80211_disconnect+0x9a/0x200 [cfg80211] > [ 83.030248] [] > cfg80211_mgd_wext_siwessid+0xa9/0x170 [cfg80211] > [ 83.030255] [] cfg80211_wext_siwessid+0x22/0x40 > [cfg80211] > [ 83.030258] [] ioctl_standard_iw_point+0x133/0x350 > [ 83.030264] [] ? > cfg80211_wext_giwessid+0x50/0x50 [cfg80211] > [ 83.030266] [] ? wake_up_q+0x32/0x70 > [ 83.030268] [] ? iw_handler_get_private+0x60/0x60 > [ 83.030271] [] ioctl_standard_call+0x87/0xd0 > [ 83.030273] [] ? call_commit_handler.part.4+0x30/0x30 > [ 83.030275] [] wireless_process_ioctl+0x1f0/0x230 > [ 83.030278] [] ? dev_get_by_name_rcu+0x5e/0x80 > [ 83.030280] [] wext_handle_ioctl+0x78/0xd0 > [ 83.030283] [] dev_ioctl+0x2a7/0x5a0 > [ 83.030285] [] sock_ioctl+0x126/0x290 > [ 83.030287] [] do_vfs_ioctl+0xa3/0x5d0 > [ 83.030290] [] ? vfs_write+0x142/0x190 > [ 83.030292] [] SyS_ioctl+0x79/0x90 > [ 83.030294] [] entry_SYSCALL_64_fastpath+0x1a/0xa4 > [ 83.030296] ---[ end trace 8247b235a66a1a21 ]--- > > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html