From: Sebastian Gottschall <s.gottschall@dd-wrt.com>
To: Ben Caradoc-Davies <ben@transient.nz>,
Johannes Berg <johannes.berg@intel.com>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [PATCH] Revert "mac80211: use QoS NDP for AP probing"
Date: Mon, 26 Feb 2018 01:45:13 +0100 [thread overview]
Message-ID: <eb4f796b-27ef-cbf6-38ea-a632fd084502@dd-wrt.com> (raw)
In-Reply-To: <20180225211541.29931-1-ben@transient.nz>
mmh i'm not sure, but i believe i have the same issue with pci chipsets
and ath9k under high load
Sebastian
Am 25.02.2018 um 22:15 schrieb Ben Caradoc-Davies:
> This reverts commit 7b6ddeaf27eca72795ceeae2f0f347db1b5f9a30.
>
> The above commit causes an Atheros AR9271 ath9k_htc USB WiFi adapter
> connected to an AP with QoS/WME enabled to lose all IP connectivity after
> something like 10 to 90 minutes. The adapter remains up and associated
> and "iw dev wlan0 station dump" shows byte and packet counters that keep
> increasing, but all IP connectivity fails, including ping, DNS, and web.
> The host cannot be pinged by other hosts on the WLAN. Network can be
> restored by unloading and reloading the ath9k_htc module, or physically
> unplugging and replugging the adapter, triggering NetworkManager to
> reconnect.
>
> The problematic commit is on torvalds/master and linux-stable/linux-4.15.y.
> On linux-stable/linux-4.14.y: e23090a7d8f05f03cf564148472130286f5ca9bf.
>
> Problem confirmed on Debian linux-image-4.14.0-3-amd64 4.14.17-1 and
> Debian linux-image-4.15.0-1-amd64 4.15.4-1 and vanilla 4.14.16
> (git e23090a7d8f0 from linux-stable/linux-4.14.y) and vanilla 4.16.0-rc2
> (git 3664ce2d9309 from torvalds/master).
>
> Fix tested by reverting the commit on vanilla 4.16.0-rc2 (git 3664ce2d9309
> from torvalds/master) and applying the patch to Debian
> linux-image-4.15.0-1-amd64 4.15.4-1. Both tests resulted in stable IP
> connectivity.
>
> See also Debian Bug#891060:
> Atheros AR9271 ath9k_htc USB WiFi connected but IP traffic stops
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=891060
>
> Signed-off-by: Ben Caradoc-Davies <ben@transient.nz>
> ---
> drivers/net/wireless/ath/ath9k/channel.c | 2 +-
> drivers/net/wireless/st/cw1200/sta.c | 4 ++--
> drivers/net/wireless/ti/wl1251/main.c | 2 +-
> drivers/net/wireless/ti/wlcore/cmd.c | 5 ++---
> include/net/mac80211.h | 8 +-------
> net/mac80211/mlme.c | 2 +-
> net/mac80211/tx.c | 29 ++---------------------------
> 7 files changed, 10 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c
> index 1b05b5d7a038..dfb26f03c1a2 100644
> --- a/drivers/net/wireless/ath/ath9k/channel.c
> +++ b/drivers/net/wireless/ath/ath9k/channel.c
> @@ -1113,7 +1113,7 @@ ath_chanctx_send_vif_ps_frame(struct ath_softc *sc, struct ath_vif *avp,
> if (!avp->assoc)
> return false;
>
> - skb = ieee80211_nullfunc_get(sc->hw, vif, false);
> + skb = ieee80211_nullfunc_get(sc->hw, vif);
> if (!skb)
> return false;
>
> diff --git a/drivers/net/wireless/st/cw1200/sta.c b/drivers/net/wireless/st/cw1200/sta.c
> index 38678e9a0562..03687a80d6e9 100644
> --- a/drivers/net/wireless/st/cw1200/sta.c
> +++ b/drivers/net/wireless/st/cw1200/sta.c
> @@ -198,7 +198,7 @@ void __cw1200_cqm_bssloss_sm(struct cw1200_common *priv,
>
> priv->bss_loss_state++;
>
> - skb = ieee80211_nullfunc_get(priv->hw, priv->vif, false);
> + skb = ieee80211_nullfunc_get(priv->hw, priv->vif);
> WARN_ON(!skb);
> if (skb)
> cw1200_tx(priv->hw, NULL, skb);
> @@ -2265,7 +2265,7 @@ static int cw1200_upload_null(struct cw1200_common *priv)
> .rate = 0xFF,
> };
>
> - frame.skb = ieee80211_nullfunc_get(priv->hw, priv->vif, false);
> + frame.skb = ieee80211_nullfunc_get(priv->hw, priv->vif);
> if (!frame.skb)
> return -ENOMEM;
>
> diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c
> index 037defd10b91..99a6889a6540 100644
> --- a/drivers/net/wireless/ti/wl1251/main.c
> +++ b/drivers/net/wireless/ti/wl1251/main.c
> @@ -566,7 +566,7 @@ static int wl1251_build_null_data(struct wl1251 *wl)
> size = sizeof(struct wl12xx_null_data_template);
> ptr = NULL;
> } else {
> - skb = ieee80211_nullfunc_get(wl->hw, wl->vif, false);
> + skb = ieee80211_nullfunc_get(wl->hw, wl->vif);
> if (!skb)
> goto out;
> size = skb->len;
> diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
> index 761cf8573a80..2bfc12fdc929 100644
> --- a/drivers/net/wireless/ti/wlcore/cmd.c
> +++ b/drivers/net/wireless/ti/wlcore/cmd.c
> @@ -1069,8 +1069,7 @@ int wl12xx_cmd_build_null_data(struct wl1271 *wl, struct wl12xx_vif *wlvif)
> ptr = NULL;
> } else {
> skb = ieee80211_nullfunc_get(wl->hw,
> - wl12xx_wlvif_to_vif(wlvif),
> - false);
> + wl12xx_wlvif_to_vif(wlvif));
> if (!skb)
> goto out;
> size = skb->len;
> @@ -1097,7 +1096,7 @@ int wl12xx_cmd_build_klv_null_data(struct wl1271 *wl,
> struct sk_buff *skb = NULL;
> int ret = -ENOMEM;
>
> - skb = ieee80211_nullfunc_get(wl->hw, vif, false);
> + skb = ieee80211_nullfunc_get(wl->hw, vif);
> if (!skb)
> goto out;
>
> diff --git a/include/net/mac80211.h b/include/net/mac80211.h
> index c96511fa9198..03280be484b2 100644
> --- a/include/net/mac80211.h
> +++ b/include/net/mac80211.h
> @@ -4478,24 +4478,18 @@ struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw,
> * ieee80211_nullfunc_get - retrieve a nullfunc template
> * @hw: pointer obtained from ieee80211_alloc_hw().
> * @vif: &struct ieee80211_vif pointer from the add_interface callback.
> - * @qos_ok: QoS NDP is acceptable to the caller, this should be set
> - * if at all possible
> *
> * Creates a Nullfunc template which can, for example, uploaded to
> * hardware. The template must be updated after association so that correct
> * BSSID and address is used.
> *
> - * If @qos_ndp is set and the association is to an AP with QoS/WMM, the
> - * returned packet will be QoS NDP.
> - *
> * Note: Caller (or hardware) is responsible for setting the
> * &IEEE80211_FCTL_PM bit as well as Duration and Sequence Control fields.
> *
> * Return: The nullfunc template. %NULL on error.
> */
> struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
> - struct ieee80211_vif *vif,
> - bool qos_ok);
> + struct ieee80211_vif *vif);
>
> /**
> * ieee80211_probereq_get - retrieve a Probe Request template
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index 39b660b9a908..cc55ff8ae979 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -896,7 +896,7 @@ void ieee80211_send_nullfunc(struct ieee80211_local *local,
> struct ieee80211_hdr_3addr *nullfunc;
> struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
>
> - skb = ieee80211_nullfunc_get(&local->hw, &sdata->vif, true);
> + skb = ieee80211_nullfunc_get(&local->hw, &sdata->vif);
> if (!skb)
> return;
>
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 25904af38839..16bc1dacf1b3 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -4440,15 +4440,13 @@ struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw,
> EXPORT_SYMBOL(ieee80211_pspoll_get);
>
> struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
> - struct ieee80211_vif *vif,
> - bool qos_ok)
> + struct ieee80211_vif *vif)
> {
> struct ieee80211_hdr_3addr *nullfunc;
> struct ieee80211_sub_if_data *sdata;
> struct ieee80211_if_managed *ifmgd;
> struct ieee80211_local *local;
> struct sk_buff *skb;
> - bool qos = false;
>
> if (WARN_ON(vif->type != NL80211_IFTYPE_STATION))
> return NULL;
> @@ -4457,17 +4455,7 @@ struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
> ifmgd = &sdata->u.mgd;
> local = sdata->local;
>
> - if (qos_ok) {
> - struct sta_info *sta;
> -
> - rcu_read_lock();
> - sta = sta_info_get(sdata, ifmgd->bssid);
> - qos = sta && sta->sta.wme;
> - rcu_read_unlock();
> - }
> -
> - skb = dev_alloc_skb(local->hw.extra_tx_headroom +
> - sizeof(*nullfunc) + 2);
> + skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*nullfunc));
> if (!skb)
> return NULL;
>
> @@ -4477,19 +4465,6 @@ struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
> nullfunc->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
> IEEE80211_STYPE_NULLFUNC |
> IEEE80211_FCTL_TODS);
> - if (qos) {
> - __le16 qos = cpu_to_le16(7);
> -
> - BUILD_BUG_ON((IEEE80211_STYPE_QOS_NULLFUNC |
> - IEEE80211_STYPE_NULLFUNC) !=
> - IEEE80211_STYPE_QOS_NULLFUNC);
> - nullfunc->frame_control |=
> - cpu_to_le16(IEEE80211_STYPE_QOS_NULLFUNC);
> - skb->priority = 7;
> - skb_set_queue_mapping(skb, IEEE80211_AC_VO);
> - skb_put_data(skb, &qos, sizeof(qos));
> - }
> -
> memcpy(nullfunc->addr1, ifmgd->bssid, ETH_ALEN);
> memcpy(nullfunc->addr2, vif->addr, ETH_ALEN);
> memcpy(nullfunc->addr3, ifmgd->bssid, ETH_ALEN);
--
Mit freundlichen Grüssen / Regards
Sebastian Gottschall / CTO
NewMedia-NET GmbH - DD-WRT
Firmensitz: Stubenwaldallee 21a, 64625 Bensheim
Registergericht: Amtsgericht Darmstadt, HRB 25473
Geschäftsführer: Peter Steinhäuser, Christian Scheele
http://www.dd-wrt.com
email: s.gottschall@dd-wrt.com
Tel.: +496251-582650 / Fax: +496251-5826565
next prev parent reply other threads:[~2018-02-26 0:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-25 21:15 [PATCH] Revert "mac80211: use QoS NDP for AP probing" Ben Caradoc-Davies
2018-02-26 0:45 ` Sebastian Gottschall [this message]
2018-02-27 10:04 ` Johannes Berg
2018-03-03 4:01 ` Ben Caradoc-Davies
2018-03-08 12:39 ` Ben Caradoc-Davies
2018-03-17 20:56 ` Ben Caradoc-Davies
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eb4f796b-27ef-cbf6-38ea-a632fd084502@dd-wrt.com \
--to=s.gottschall@dd-wrt.com \
--cc=ben@transient.nz \
--cc=johannes.berg@intel.com \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).