diff mbox series

[v3,1/5] cfg80211: add KHz variants of frame RX API

Message ID 20200430010642.22552-2-thomas@adapt-ip.com (mailing list archive)
State Superseded
Delegated to: Johannes Berg
Headers show
Series initial S1G defines | expand

Commit Message

Thomas Pedersen April 30, 2020, 1:06 a.m. UTC
Drivers may wish to report the RX frequency in units of
KHz. Provide cfg80211_rx_mgmt_khz() and wrap it with
cfg80211_rx_mgmt() so exisiting drivers which can't report
KHz anyway don't need to change. Add a similar wrapper for
cfg80211_report_obss_beacon() so the frequency units stay
somewhat consistent.

This doesn't actually change the nl80211 API yet.

Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>

---
v3:
wrap functions with _khz() (Johannes)
update trace entries with PR_KHZ()
---
 include/linux/ieee80211.h |  1 +
 include/net/cfg80211.h    | 54 +++++++++++++++++++++++++++++++++++----
 net/mac80211/rx.c         |  8 +++---
 net/wireless/mlme.c       |  8 +++---
 net/wireless/nl80211.c    | 14 +++++-----
 net/wireless/trace.h      | 12 ++++-----
 6 files changed, 72 insertions(+), 25 deletions(-)

Comments

kernel test robot April 30, 2020, 8:06 a.m. UTC | #1
Hi Thomas,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on mac80211-next/master]
[cannot apply to mac80211/master v5.7-rc3 next-20200429]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Thomas-Pedersen/initial-S1G-defines/20200430-091307
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=parisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/trace/define_trace.h:102,
                    from net/wireless/trace.h:3537,
                    from net/wireless/trace.c:5:
   net/wireless/./trace.h: In function 'trace_raw_output_cfg80211_rx_mgmt_khz':
>> include/trace/trace_events.h:359:9: error: unable to generate reloads for:
     359 |  struct trace_event_raw_##call *field;    \
         |         ^~~~~~~~~~~~~~~~
   include/trace/trace_events.h:75:2: note: in expansion of macro 'DECLARE_EVENT_CLASS'
      75 |  DECLARE_EVENT_CLASS(name,          \
         |  ^~~~~~~~~~~~~~~~~~~
   net/wireless/./trace.h:2830:1: note: in expansion of macro 'TRACE_EVENT'
    2830 | TRACE_EVENT(cfg80211_rx_mgmt_khz,
         | ^~~~~~~~~~~
   (insn 27 26 22 4 (set (reg:SF 28 %r28 [113])
           (float:SF (reg:SI 28 %r28 [orig:114 field_12->freq ] [114]))) "net/wireless/./trace.h":2830:1 96 {floatsisf2}
        (expr_list:REG_DEAD (reg:SI 28 %r28 [orig:114 field_12->freq ] [114])
           (nil)))
   during RTL pass: reload
   include/trace/trace_events.h:359:9: internal compiler error: in find_reloads, at reload.c:3814
     359 |  struct trace_event_raw_##call *field;    \
         |         ^~~~~~~~~~~~~~~~
   include/trace/trace_events.h:75:2: note: in expansion of macro 'DECLARE_EVENT_CLASS'
      75 |  DECLARE_EVENT_CLASS(name,          \
         |  ^~~~~~~~~~~~~~~~~~~
   net/wireless/./trace.h:2830:1: note: in expansion of macro 'TRACE_EVENT'
    2830 | TRACE_EVENT(cfg80211_rx_mgmt_khz,
         | ^~~~~~~~~~~
   0x513fa0 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
   	/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/rtl-error.c:108
   0x513967 find_reloads(rtx_insn*, int, int, int, short*)
   	/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload.c:3814
   0x984bb6 calculate_needs_all_insns
   	/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload1.c:1474
   0x984bb6 reload(rtx_insn*, int)
   	/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload1.c:986
   0x847ef0 do_reload
   	/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/ira.c:5535
   0x847ef0 execute
   	/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/ira.c:5707
   Please submit a full bug report,
   with preprocessed source if appropriate.
   Please include the complete backtrace with any bug report.
   See <https://gcc.gnu.org/bugs/> for instructions.

vim +359 include/trace/trace_events.h

2fc1b6f0d0a719 include/trace/ftrace.h       liubo                    2011-04-19  328  
5a2e3995951176 include/trace/ftrace.h       Kei Tokunaga             2010-04-01  329  #undef __print_hex
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann          2017-01-25  330  #define __print_hex(buf, buf_len)					\
3898fac1f488c7 include/trace/trace_events.h Daniel Borkmann          2017-02-02  331  	trace_print_hex_seq(p, buf, buf_len, false)
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann          2017-01-25  332  
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann          2017-01-25  333  #undef __print_hex_str
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann          2017-01-25  334  #define __print_hex_str(buf, buf_len)					\
3898fac1f488c7 include/trace/trace_events.h Daniel Borkmann          2017-02-02  335  	trace_print_hex_seq(p, buf, buf_len, true)
5a2e3995951176 include/trace/ftrace.h       Kei Tokunaga             2010-04-01  336  
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  337  #undef __print_array
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  338  #define __print_array(array, count, el_size)				\
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  339  	({								\
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  340  		BUILD_BUG_ON(el_size != 1 && el_size != 2 &&		\
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  341  			     el_size != 4 && el_size != 8);		\
645df987f7c174 include/trace/trace_events.h Steven Rostedt (Red Hat  2015-05-04  342) 		trace_print_array_seq(p, array, count, el_size);	\
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  343  	})
6ea22486ba46bc include/trace/ftrace.h       Dave Martin              2015-01-28  344  
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz            2019-11-07  345  #undef __print_hex_dump
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz            2019-11-07  346  #define __print_hex_dump(prefix_str, prefix_type,			\
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz            2019-11-07  347  			 rowsize, groupsize, buf, len, ascii)		\
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz            2019-11-07  348  	trace_print_hex_dump_seq(p, prefix_str, prefix_type,		\
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz            2019-11-07  349  				 rowsize, groupsize, buf, len, ascii)
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz            2019-11-07  350  
091ad3658e3c76 include/trace/ftrace.h       Ingo Molnar              2009-11-26  351  #undef DECLARE_EVENT_CLASS
091ad3658e3c76 include/trace/ftrace.h       Ingo Molnar              2009-11-26  352  #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print)	\
83f0d53993b296 include/trace/ftrace.h       Steven Rostedt           2010-02-16  353  static notrace enum print_line_t					\
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat  2015-05-05  354) trace_raw_output_##call(struct trace_iterator *iter, int flags,		\
80decc70afc57c include/trace/ftrace.h       Steven Rostedt           2010-04-23  355  			struct trace_event *trace_event)		\
f42c85e74faa42 include/trace/ftrace.h       Steven Rostedt           2009-04-13  356  {									\
f42c85e74faa42 include/trace/ftrace.h       Steven Rostedt           2009-04-13  357  	struct trace_seq *s = &iter->seq;				\
f71130de5c7fba include/trace/ftrace.h       Li Zefan                 2013-02-21  358  	struct trace_seq __maybe_unused *p = &iter->tmp_seq;		\
a7237765730a10 include/trace/trace_events.h Steven Rostedt (Red Hat  2015-05-13 @359) 	struct trace_event_raw_##call *field;				\
f42c85e74faa42 include/trace/ftrace.h       Steven Rostedt           2009-04-13  360  	int ret;							\
f42c85e74faa42 include/trace/ftrace.h       Steven Rostedt           2009-04-13  361  									\
f71130de5c7fba include/trace/ftrace.h       Li Zefan                 2013-02-21  362  	field = (typeof(field))iter->ent;				\
80decc70afc57c include/trace/ftrace.h       Steven Rostedt           2010-04-23  363  									\
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat  2015-05-05  364) 	ret = trace_raw_output_prep(iter, trace_event);			\
8e2e095cbecad2 include/trace/ftrace.h       Steven Rostedt (Red Hat  2014-11-14  365) 	if (ret != TRACE_TYPE_HANDLED)					\
f71130de5c7fba include/trace/ftrace.h       Li Zefan                 2013-02-21  366  		return ret;						\
f71130de5c7fba include/trace/ftrace.h       Li Zefan                 2013-02-21  367  									\
19a7fe206232cc include/trace/ftrace.h       Steven Rostedt (Red Hat  2014-11-12  368) 	trace_seq_printf(s, print);					\
f42c85e74faa42 include/trace/ftrace.h       Steven Rostedt           2009-04-13  369  									\
19a7fe206232cc include/trace/ftrace.h       Steven Rostedt (Red Hat  2014-11-12  370) 	return trace_handle_return(s);					\
80decc70afc57c include/trace/ftrace.h       Steven Rostedt           2010-04-23  371  }									\
3ad017bac94ac8 include/trace/trace_events.h Steven Rostedt (Red Hat  2015-05-13  372) static struct trace_event_functions trace_event_type_funcs_##call = {	\
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat  2015-05-05  373) 	.trace			= trace_raw_output_##call,		\
80decc70afc57c include/trace/ftrace.h       Steven Rostedt           2010-04-23  374  };
ff038f5c37c207 include/trace/ftrace.h       Steven Rostedt           2009-11-18  375  

:::::: The code at line 359 was first introduced by commit
:::::: a7237765730a10d429736f47ac4b89779ec6c534 tracing: Rename ftrace_raw_##call event structures to trace_event_raw_##call

:::::: TO: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
:::::: CC: Steven Rostedt <rostedt@goodmis.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
kernel test robot April 30, 2020, 9:05 a.m. UTC | #2
Hi Thomas,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on mac80211-next/master]
[cannot apply to mac80211/master v5.7-rc3 next-20200429]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Thomas-Pedersen/initial-S1G-defines/20200430-091307
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: arm-exynos_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   arm-linux-gnueabi-ld: net/wireless/trace.o: in function `trace_raw_output_cfg80211_rx_mgmt_khz':
>> trace.c:(.text+0x4ef4): undefined reference to `__aeabi_i2f'
>> arm-linux-gnueabi-ld: trace.c:(.text+0x4f00): undefined reference to `__aeabi_fdiv'
>> arm-linux-gnueabi-ld: trace.c:(.text+0x4f04): undefined reference to `__aeabi_f2d'
   arm-linux-gnueabi-ld: net/wireless/trace.o: in function `trace_raw_output_cfg80211_report_obss_beacon_khz':
   trace.c:(.text+0x56b0): undefined reference to `__aeabi_i2f'
   arm-linux-gnueabi-ld: trace.c:(.text+0x56bc): undefined reference to `__aeabi_fdiv'
   arm-linux-gnueabi-ld: trace.c:(.text+0x56c0): undefined reference to `__aeabi_f2d'

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Johannes Berg April 30, 2020, 11:37 a.m. UTC | #3
On Wed, 2020-04-29 at 18:06 -0700, Thomas Pedersen wrote:
> 
> +#define PR_KHZ(f) KHZ_TO_MHZ((float) f)

You can't use float, sorry.

johannes
Thomas Pedersen April 30, 2020, 4:57 p.m. UTC | #4
On 4/30/20 4:37 AM, Johannes Berg wrote:
> On Wed, 2020-04-29 at 18:06 -0700, Thomas Pedersen wrote:
>>
>> +#define PR_KHZ(f) KHZ_TO_MHZ((float) f)
> 
> You can't use float, sorry.

OK, I'll need to do something else, thanks.
diff mbox series

Patch

diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index a561db435a4b..a152f7cfc8de 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -3333,6 +3333,7 @@  static inline int ieee80211_get_tdls_action(struct sk_buff *skb, u32 hdr_size)
 /* convert frequencies */
 #define MHZ_TO_KHZ(freq) ((freq) * 1000)
 #define KHZ_TO_MHZ(freq) ((freq) / 1000)
+#define PR_KHZ(f) KHZ_TO_MHZ((float) f)
 
 /* convert powers */
 #define DBI_TO_MBI(gain) ((gain) * 100)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index a82fc59a1d82..3746b52c954e 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -6986,6 +6986,26 @@  void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
 			  enum nl80211_connect_failed_reason reason,
 			  gfp_t gfp);
 
+/**
+ * cfg80211_rx_mgmt_khz - notification of received, unprocessed management frame
+ * @wdev: wireless device receiving the frame
+ * @freq: Frequency on which the frame was received in KHz
+ * @sig_dbm: signal strength in dBm, or 0 if unknown
+ * @buf: Management frame (header + body)
+ * @len: length of the frame data
+ * @flags: flags, as defined in enum nl80211_rxmgmt_flags
+ *
+ * This function is called whenever an Action frame is received for a station
+ * mode interface, but is not processed in kernel.
+ *
+ * Return: %true if a user space application has registered for this frame.
+ * For action frames, that makes it responsible for rejecting unrecognized
+ * action frames; %false otherwise, in which case for action frames the
+ * driver is responsible for rejecting the frame.
+ */
+bool cfg80211_rx_mgmt_khz(struct wireless_dev *wdev, int freq, int sig_dbm,
+			  const u8 *buf, size_t len, u32 flags);
+
 /**
  * cfg80211_rx_mgmt - notification of received, unprocessed management frame
  * @wdev: wireless device receiving the frame
@@ -7003,8 +7023,13 @@  void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
  * action frames; %false otherwise, in which case for action frames the
  * driver is responsible for rejecting the frame.
  */
-bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
-		      const u8 *buf, size_t len, u32 flags);
+static inline bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq,
+				    int sig_dbm, const u8 *buf, size_t len,
+				    u32 flags)
+{
+	return cfg80211_rx_mgmt_khz(wdev, MHZ_TO_KHZ(freq), sig_dbm, buf, len,
+				    flags);
+}
 
 /**
  * cfg80211_mgmt_tx_status - notification of TX status for management frame
@@ -7202,6 +7227,21 @@  void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
 			   u64 cookie, bool acked, s32 ack_signal,
 			   bool is_valid_ack_signal, gfp_t gfp);
 
+/**
+ * cfg80211_report_obss_beacon_khz - report beacon from other APs
+ * @wiphy: The wiphy that received the beacon
+ * @frame: the frame
+ * @len: length of the frame
+ * @freq: frequency the frame was received on in KHz
+ * @sig_dbm: signal strength in dBm, or 0 if unknown
+ *
+ * Use this function to report to userspace when a beacon was
+ * received. It is not useful to call this when there is no
+ * netdev that is in AP/GO mode.
+ */
+void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
+				     size_t len, int freq, int sig_dbm);
+
 /**
  * cfg80211_report_obss_beacon - report beacon from other APs
  * @wiphy: The wiphy that received the beacon
@@ -7214,9 +7254,13 @@  void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
  * received. It is not useful to call this when there is no
  * netdev that is in AP/GO mode.
  */
-void cfg80211_report_obss_beacon(struct wiphy *wiphy,
-				 const u8 *frame, size_t len,
-				 int freq, int sig_dbm);
+static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
+					       const u8 *frame, size_t len,
+					       int freq, int sig_dbm)
+{
+	cfg80211_report_obss_beacon_khz(wiphy, frame, len, MHZ_TO_KHZ(freq),
+					sig_dbm);
+}
 
 /**
  * cfg80211_reg_can_beacon - check if beaconing is allowed
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index eaf8931e4627..007eca52afe6 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -3097,7 +3097,8 @@  ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
 
 		cfg80211_report_obss_beacon(rx->local->hw.wiphy,
 					    rx->skb->data, rx->skb->len,
-					    status->freq, sig);
+					    ieee80211_rx_status_to_khz(status),
+					    sig);
 		rx->flags |= IEEE80211_RX_BEACON_REPORTED;
 	}
 
@@ -3443,8 +3444,9 @@  ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
 	    !(status->flag & RX_FLAG_NO_SIGNAL_VAL))
 		sig = status->signal;
 
-	if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig,
-			     rx->skb->data, rx->skb->len, 0)) {
+	if (cfg80211_rx_mgmt_khz(&rx->sdata->wdev,
+				 ieee80211_rx_status_to_khz(status), sig,
+				 rx->skb->data, rx->skb->len, 0)) {
 		if (rx->sta)
 			rx->sta->rx_stats.packets++;
 		dev_kfree_skb(rx->skb);
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index 409497a3527d..ca51fbf89b80 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -729,8 +729,8 @@  int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
 	return rdev_mgmt_tx(rdev, wdev, params, cookie);
 }
 
-bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
-		      const u8 *buf, size_t len, u32 flags)
+bool cfg80211_rx_mgmt_khz(struct wireless_dev *wdev, int freq, int sig_dbm,
+			  const u8 *buf, size_t len, u32 flags)
 {
 	struct wiphy *wiphy = wdev->wiphy;
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
@@ -745,7 +745,7 @@  bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
 		cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE);
 	u16 stype;
 
-	trace_cfg80211_rx_mgmt(wdev, freq, sig_dbm);
+	trace_cfg80211_rx_mgmt_khz(wdev, freq, sig_dbm);
 	stype = (le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE) >> 4;
 
 	if (!(stypes->rx & BIT(stype))) {
@@ -785,7 +785,7 @@  bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
 	trace_cfg80211_return_bool(result);
 	return result;
 }
-EXPORT_SYMBOL(cfg80211_rx_mgmt);
+EXPORT_SYMBOL(cfg80211_rx_mgmt_khz);
 
 void cfg80211_sched_dfs_chan_update(struct cfg80211_registered_device *rdev)
 {
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 3d27b24c68b2..755701132d71 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -16256,7 +16256,7 @@  int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
 					netdev->ifindex)) ||
 	    nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev),
 			      NL80211_ATTR_PAD) ||
-	    nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) ||
+	    nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, KHZ_TO_MHZ(freq)) ||
 	    (sig_dbm &&
 	     nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) ||
 	    nla_put(msg, NL80211_ATTR_FRAME, len, buf) ||
@@ -16882,16 +16882,15 @@  void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
 }
 EXPORT_SYMBOL(cfg80211_probe_status);
 
-void cfg80211_report_obss_beacon(struct wiphy *wiphy,
-				 const u8 *frame, size_t len,
-				 int freq, int sig_dbm)
+void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
+				     size_t len, int freq, int sig_dbm)
 {
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
 	struct sk_buff *msg;
 	void *hdr;
 	struct cfg80211_beacon_registration *reg;
 
-	trace_cfg80211_report_obss_beacon(wiphy, frame, len, freq, sig_dbm);
+	trace_cfg80211_report_obss_beacon_khz(wiphy, frame, len, freq, sig_dbm);
 
 	spin_lock_bh(&rdev->beacon_registrations_lock);
 	list_for_each_entry(reg, &rdev->beacon_registrations, list) {
@@ -16907,7 +16906,8 @@  void cfg80211_report_obss_beacon(struct wiphy *wiphy,
 
 		if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
 		    (freq &&
-		     nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq)) ||
+		     nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
+				 KHZ_TO_MHZ(freq))) ||
 		    (sig_dbm &&
 		     nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) ||
 		    nla_put(msg, NL80211_ATTR_FRAME, len, frame))
@@ -16924,7 +16924,7 @@  void cfg80211_report_obss_beacon(struct wiphy *wiphy,
 	spin_unlock_bh(&rdev->beacon_registrations_lock);
 	nlmsg_free(msg);
 }
-EXPORT_SYMBOL(cfg80211_report_obss_beacon);
+EXPORT_SYMBOL(cfg80211_report_obss_beacon_khz);
 
 #ifdef CONFIG_PM
 static int cfg80211_net_detect_results(struct sk_buff *msg,
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 53c887ea67c7..889c1784fd86 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -2827,7 +2827,7 @@  DEFINE_EVENT(cfg80211_netdev_mac_evt, cfg80211_del_sta,
 	TP_ARGS(netdev, macaddr)
 );
 
-TRACE_EVENT(cfg80211_rx_mgmt,
+TRACE_EVENT(cfg80211_rx_mgmt_khz,
 	TP_PROTO(struct wireless_dev *wdev, int freq, int sig_dbm),
 	TP_ARGS(wdev, freq, sig_dbm),
 	TP_STRUCT__entry(
@@ -2840,8 +2840,8 @@  TRACE_EVENT(cfg80211_rx_mgmt,
 		__entry->freq = freq;
 		__entry->sig_dbm = sig_dbm;
 	),
-	TP_printk(WDEV_PR_FMT ", freq: %d, sig dbm: %d",
-		  WDEV_PR_ARG, __entry->freq, __entry->sig_dbm)
+	TP_printk(WDEV_PR_FMT ", freq: %g, sig dbm: %d",
+		  WDEV_PR_ARG, PR_KHZ(__entry->freq), __entry->sig_dbm)
 );
 
 TRACE_EVENT(cfg80211_mgmt_tx_status,
@@ -3107,7 +3107,7 @@  TRACE_EVENT(cfg80211_pmksa_candidate_notify,
 		  BOOL_TO_STR(__entry->preauth))
 );
 
-TRACE_EVENT(cfg80211_report_obss_beacon,
+TRACE_EVENT(cfg80211_report_obss_beacon_khz,
 	TP_PROTO(struct wiphy *wiphy, const u8 *frame, size_t len,
 		 int freq, int sig_dbm),
 	TP_ARGS(wiphy, frame, len, freq, sig_dbm),
@@ -3121,8 +3121,8 @@  TRACE_EVENT(cfg80211_report_obss_beacon,
 		__entry->freq = freq;
 		__entry->sig_dbm = sig_dbm;
 	),
-	TP_printk(WIPHY_PR_FMT ", freq: %d, sig_dbm: %d",
-		  WIPHY_PR_ARG, __entry->freq, __entry->sig_dbm)
+	TP_printk(WIPHY_PR_FMT ", freq: %g, sig_dbm: %d",
+		  WIPHY_PR_ARG, PR_KHZ(__entry->freq), __entry->sig_dbm)
 );
 
 TRACE_EVENT(cfg80211_tdls_oper_request,