linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired
@ 2019-06-12 19:35 James Prestwood
  2019-06-12 19:35 ` [PATCH 2/3] nl80211: send event when CMD_FRAME duration expires James Prestwood
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: James Prestwood @ 2019-06-12 19:35 UTC (permalink / raw)
  To: linux-wireless; +Cc: James Prestwood

Signed-off-by: James Prestwood <james.prestwood@linux.intel.com>
---
 net/wireless/trace.h | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 2abfff925aac..4fbb91a511ae 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -2752,6 +2752,24 @@ TRACE_EVENT(cfg80211_ready_on_channel_expired,
 		  WDEV_PR_ARG, __entry->cookie, CHAN_PR_ARG)
 );
 
+TRACE_EVENT(cfg80211_tx_mgmt_expired,
+	TP_PROTO(struct wireless_dev *wdev, u64 cookie,
+		 struct ieee80211_channel *chan),
+	TP_ARGS(wdev, cookie, chan),
+	TP_STRUCT__entry(
+		WDEV_ENTRY
+		__field(u64, cookie)
+		CHAN_ENTRY
+	),
+	TP_fast_assign(
+		WDEV_ASSIGN;
+		__entry->cookie = cookie;
+		CHAN_ASSIGN(chan);
+	),
+	TP_printk(WDEV_PR_FMT ", cookie: %llu, " CHAN_PR_FMT,
+		  WDEV_PR_ARG, __entry->cookie, CHAN_PR_ARG)
+);
+
 TRACE_EVENT(cfg80211_new_sta,
 	TP_PROTO(struct net_device *netdev, const u8 *mac_addr,
 		 struct station_info *sinfo),
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] nl80211: send event when CMD_FRAME duration expires
  2019-06-12 19:35 [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired James Prestwood
@ 2019-06-12 19:35 ` James Prestwood
  2019-06-12 19:35 ` [PATCH 3/3] mac80211: notify offchannel expire on mgmt_tx James Prestwood
  2019-06-14 13:42 ` [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired Johannes Berg
  2 siblings, 0 replies; 4+ messages in thread
From: James Prestwood @ 2019-06-12 19:35 UTC (permalink / raw)
  To: linux-wireless; +Cc: James Prestwood

cfg80211_remain_on_channel_expired is used to notify userspace when
the remain on channel duration expired by sending an event. There is
no such equivalent to CMD_FRAME, where if offchannel and a duration
is provided, the card will go offchannel for that duration. Currently
there is no way for userspace to tell when that duration expired
apart from setting an independent timeout. This timeout is quite
erroneous as the kernel may not immediately send out the frame
because of scheduling or work queue delays. In testing, it was found
this timeout had to be quite large to accomidate any potential delays.

A better solution is to have the kernel send an event when this
duration has expired. There is already NL80211_CMD_FRAME_WAIT_CANCEL
which can be used to cancel a NL80211_CMD_FRAME offchannel. Using this
command matches perfectly to how NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL
works, where its both used to cancel and notify if the duration has
expired.

Signed-off-by: James Prestwood <james.prestwood@linux.intel.com>
---
 include/net/cfg80211.h | 11 +++++++++++
 net/wireless/nl80211.c | 13 +++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 948139690a58..57f9774d8c90 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -6492,6 +6492,17 @@ void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
 					struct ieee80211_channel *chan,
 					gfp_t gfp);
 
+/**
+ * cfg80211_tx_mgmt_expired - tx_mgmt duration expired
+ * @wdev: wireless device
+ * @cookie: the requested cookie
+ * @chan: The current channel (from tx_mgmt request)
+ * @gfp: allocation flags
+ */
+void cfg80211_tx_mgmt_expired(struct wireless_dev *wdev, u64 cookie,
+					struct ieee80211_channel *chan,
+					gfp_t gfp);
+
 /**
  * cfg80211_sinfo_alloc_tid_stats - allocate per-tid statistics.
  *
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index e3c0805af415..74dbe6000fe3 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -15375,6 +15375,19 @@ void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
 }
 EXPORT_SYMBOL(cfg80211_remain_on_channel_expired);
 
+void cfg80211_tx_mgmt_expired(struct wireless_dev *wdev, u64 cookie,
+					struct ieee80211_channel *chan,
+					gfp_t gfp)
+{
+	struct wiphy *wiphy = wdev->wiphy;
+	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
+
+	trace_cfg80211_tx_mgmt_expired(wdev, cookie, chan);
+	nl80211_send_remain_on_chan_event(NL80211_CMD_FRAME_WAIT_CANCEL,
+					  rdev, wdev, cookie, chan, 0, gfp);
+}
+EXPORT_SYMBOL(cfg80211_tx_mgmt_expired);
+
 void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
 		      struct station_info *sinfo, gfp_t gfp)
 {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] mac80211: notify offchannel expire on mgmt_tx
  2019-06-12 19:35 [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired James Prestwood
  2019-06-12 19:35 ` [PATCH 2/3] nl80211: send event when CMD_FRAME duration expires James Prestwood
@ 2019-06-12 19:35 ` James Prestwood
  2019-06-14 13:42 ` [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired Johannes Berg
  2 siblings, 0 replies; 4+ messages in thread
From: James Prestwood @ 2019-06-12 19:35 UTC (permalink / raw)
  To: linux-wireless; +Cc: James Prestwood

Signed-off-by: James Prestwood <james.prestwood@linux.intel.com>
---
 net/mac80211/offchannel.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
index 8ef4153cd299..b07aec5e7da4 100644
--- a/net/mac80211/offchannel.c
+++ b/net/mac80211/offchannel.c
@@ -202,6 +202,11 @@ static void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc)
 		cfg80211_remain_on_channel_expired(&roc->sdata->wdev,
 						   roc->cookie, roc->chan,
 						   GFP_KERNEL);
+	else
+		cfg80211_tx_mgmt_expired(&roc->sdata->wdev,
+						   roc->mgmt_tx_cookie,
+						   roc->chan,
+						   GFP_KERNEL);
 
 	list_del(&roc->list);
 	kfree(roc);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired
  2019-06-12 19:35 [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired James Prestwood
  2019-06-12 19:35 ` [PATCH 2/3] nl80211: send event when CMD_FRAME duration expires James Prestwood
  2019-06-12 19:35 ` [PATCH 3/3] mac80211: notify offchannel expire on mgmt_tx James Prestwood
@ 2019-06-14 13:42 ` Johannes Berg
  2 siblings, 0 replies; 4+ messages in thread
From: Johannes Berg @ 2019-06-14 13:42 UTC (permalink / raw)
  To: James Prestwood, linux-wireless

Applied, but

 * I squashed 1 and 2, there's no point in 1 standalone
 * please be more careful with indentation in the future,
   I fixed a few places.

johannes


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-06-14 13:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-12 19:35 [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired James Prestwood
2019-06-12 19:35 ` [PATCH 2/3] nl80211: send event when CMD_FRAME duration expires James Prestwood
2019-06-12 19:35 ` [PATCH 3/3] mac80211: notify offchannel expire on mgmt_tx James Prestwood
2019-06-14 13:42 ` [PATCH 1/3] net: wireless: trace: add trace for tx_mgmt_expired Johannes Berg

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).