Message ID | 20240125055039.826200-3-quic_adisi@quicinc.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Johannes Berg |
Headers | show |
Series | wifi: cfg80211/mac80211: add link_id handling in AP channel switch during Multi-Link Operation | expand |
Hi Aditya, kernel test robot noticed the following build errors: [auto build test ERROR on acf868ff60b1cd1f2e597f0b15aee2ff43f9fcd3] url: https://github.com/intel-lab-lkp/linux/commits/Aditya-Kumar-Singh/wifi-cfg80211-send-link-id-in-channel_switch-ops/20240125-135353 base: acf868ff60b1cd1f2e597f0b15aee2ff43f9fcd3 patch link: https://lore.kernel.org/r/20240125055039.826200-3-quic_adisi%40quicinc.com patch subject: [PATCH v4 2/3] wifi: mac80211: add support for AP channel switch with MLO config: hexagon-allmodconfig (https://download.01.org/0day-ci/archive/20240125/202401251832.Nz3Re4bq-lkp@intel.com/config) compiler: clang version 18.0.0git (https://github.com/llvm/llvm-project a31a60074717fc40887cfe132b77eec93bedd307) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240125/202401251832.Nz3Re4bq-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202401251832.Nz3Re4bq-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:24: In file included from include/linux/usb.h:16: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 547 | val = __raw_readb(PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' 37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ^ In file included from drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:24: In file included from include/linux/usb.h:16: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' 35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ^ In file included from drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:24: In file included from include/linux/usb.h:16: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 584 | __raw_writeb(value, PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ >> drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:5740:28: error: too few arguments to function call, expected 2, have 1 5740 | ieee80211_csa_finish(vif); | ~~~~~~~~~~~~~~~~~~~~ ^ include/net/mac80211.h:5491:6: note: 'ieee80211_csa_finish' declared here 5491 | void ieee80211_csa_finish(struct ieee80211_vif *vif, unsigned int link_id); | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 warnings and 1 error generated. -- In file included from drivers/net/wireless/marvell/mwifiex/cfg80211.c:8: In file included from drivers/net/wireless/marvell/mwifiex/cfg80211.h:11: In file included from include/net/cfg80211.h:13: In file included from include/linux/ethtool.h:18: In file included from include/linux/if_ether.h:19: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 547 | val = __raw_readb(PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' 37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ^ In file included from drivers/net/wireless/marvell/mwifiex/cfg80211.c:8: In file included from drivers/net/wireless/marvell/mwifiex/cfg80211.h:11: In file included from include/net/cfg80211.h:13: In file included from include/linux/ethtool.h:18: In file included from include/linux/if_ether.h:19: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' 35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ^ In file included from drivers/net/wireless/marvell/mwifiex/cfg80211.c:8: In file included from drivers/net/wireless/marvell/mwifiex/cfg80211.h:11: In file included from include/net/cfg80211.h:13: In file included from include/linux/ethtool.h:18: In file included from include/linux/if_ether.h:19: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 584 | __raw_writeb(value, PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ >> drivers/net/wireless/marvell/mwifiex/cfg80211.c:4260:20: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_csa_settings *)' with an expression of type 'int (struct wiphy *, struct net_device *, struct cfg80211_csa_settings *, unsigned int)' [-Wincompatible-function-pointer-types] 4260 | .channel_switch = mwifiex_cfg80211_channel_switch, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 warnings and 1 error generated. vim +4260 drivers/net/wireless/marvell/mwifiex/cfg80211.c 1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4207 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4208 /* station cfg80211 operations */ 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4209 static struct cfg80211_ops mwifiex_cfg80211_ops = { 93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4210 .add_virtual_intf = mwifiex_add_virtual_intf, 93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4211 .del_virtual_intf = mwifiex_del_virtual_intf, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4212 .change_virtual_intf = mwifiex_cfg80211_change_virtual_intf, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4213 .scan = mwifiex_cfg80211_scan, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4214 .connect = mwifiex_cfg80211_connect, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4215 .disconnect = mwifiex_cfg80211_disconnect, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4216 .get_station = mwifiex_cfg80211_get_station, f85aae6bec6707 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4217 .dump_station = mwifiex_cfg80211_dump_station, 6bc6c49f1e2f3a drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2014-10-31 4218 .dump_survey = mwifiex_cfg80211_dump_survey, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4219 .set_wiphy_params = mwifiex_cfg80211_set_wiphy_params, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4220 .join_ibss = mwifiex_cfg80211_join_ibss, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4221 .leave_ibss = mwifiex_cfg80211_leave_ibss, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4222 .add_key = mwifiex_cfg80211_add_key, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4223 .del_key = mwifiex_cfg80211_del_key, 89951db2be5310 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-09-20 4224 .set_default_mgmt_key = mwifiex_cfg80211_set_default_mgmt_key, e39faa73ef14f6 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4225 .mgmt_tx = mwifiex_cfg80211_mgmt_tx, 6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4226 .update_mgmt_frame_registrations = 6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4227 mwifiex_cfg80211_update_mgmt_frame_registrations, 7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4228 .remain_on_channel = mwifiex_cfg80211_remain_on_channel, 7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4229 .cancel_remain_on_channel = mwifiex_cfg80211_cancel_remain_on_channel, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4230 .set_default_key = mwifiex_cfg80211_set_default_key, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4231 .set_power_mgmt = mwifiex_cfg80211_set_power_mgmt, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4232 .set_tx_power = mwifiex_cfg80211_set_tx_power, 7d54bacadce17f drivers/net/wireless/marvell/mwifiex/cfg80211.c Javier Martinez Canillas 2016-06-06 4233 .get_tx_power = mwifiex_cfg80211_get_tx_power, 5d82c53a380ca9 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-07-11 4234 .set_bitrate_mask = mwifiex_cfg80211_set_bitrate_mask, 12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4235 .start_ap = mwifiex_cfg80211_start_ap, 12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4236 .stop_ap = mwifiex_cfg80211_stop_ap, 5370c83684d9e7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-06-28 4237 .change_beacon = mwifiex_cfg80211_change_beacon, fa444bf88ce2ba drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4238 .set_cqm_rssi_config = mwifiex_cfg80211_set_cqm_rssi_config, 8a279d5b4dc128 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-07-02 4239 .set_antenna = mwifiex_cfg80211_set_antenna, 3ee712857958c2 drivers/net/wireless/marvell/mwifiex/cfg80211.c Shengzhen Li 2016-06-06 4240 .get_antenna = mwifiex_cfg80211_get_antenna, 0f9e9b8ba72bc7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2013-05-17 4241 .del_station = mwifiex_cfg80211_del_station, 0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4242 .sched_scan_start = mwifiex_cfg80211_sched_scan_start, 0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4243 .sched_scan_stop = mwifiex_cfg80211_sched_scan_stop, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4244 #ifdef CONFIG_PM 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4245 .suspend = mwifiex_cfg80211_suspend, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4246 .resume = mwifiex_cfg80211_resume, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4247 .set_wakeup = mwifiex_cfg80211_set_wakeup, f6b1cbe029f682 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-04-05 4248 .set_rekey_data = mwifiex_set_rekey_data, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4249 #endif d1e2586f484dfc drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2013-08-09 4250 .set_coalesce = mwifiex_cfg80211_set_coalesce, b23bce29656801 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4251 .tdls_mgmt = mwifiex_cfg80211_tdls_mgmt, 429d90d2212b56 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4252 .tdls_oper = mwifiex_cfg80211_tdls_oper, b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4253 .tdls_channel_switch = mwifiex_cfg80211_tdls_chan_switch, b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4254 .tdls_cancel_channel_switch = mwifiex_cfg80211_tdls_cancel_chan_switch, e48e0de0053f07 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4255 .add_station = mwifiex_cfg80211_add_station, 1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4256 .change_station = mwifiex_cfg80211_change_station, 3935ccc14d2c68 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-09-02 4257 CFG80211_TESTMODE_CMD(mwifiex_tm_cmd) 7ee38bf4edeac8 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-03 4258 .get_channel = mwifiex_cfg80211_get_channel, 85afb18621be39 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 4259 .start_radar_detection = mwifiex_cfg80211_start_radar_detection, 7d652034d1a08b drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 @4260 .channel_switch = mwifiex_cfg80211_channel_switch, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4261 }; 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4262
Hi Aditya, kernel test robot noticed the following build errors: [auto build test ERROR on acf868ff60b1cd1f2e597f0b15aee2ff43f9fcd3] url: https://github.com/intel-lab-lkp/linux/commits/Aditya-Kumar-Singh/wifi-cfg80211-send-link-id-in-channel_switch-ops/20240125-135353 base: acf868ff60b1cd1f2e597f0b15aee2ff43f9fcd3 patch link: https://lore.kernel.org/r/20240125055039.826200-3-quic_adisi%40quicinc.com patch subject: [PATCH v4 2/3] wifi: mac80211: add support for AP channel switch with MLO config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20240125/202401252118.VhbB1Yqf-lkp@intel.com/config) compiler: alpha-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240125/202401252118.VhbB1Yqf-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202401252118.VhbB1Yqf-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/net/wireless/marvell/mwifiex/cfg80211.c:4260:27: error: initialization of 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_csa_settings *)' from incompatible pointer type 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_csa_settings *, unsigned int)' [-Werror=incompatible-pointer-types] 4260 | .channel_switch = mwifiex_cfg80211_channel_switch, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/wireless/marvell/mwifiex/cfg80211.c:4260:27: note: (near initialization for 'mwifiex_cfg80211_ops.channel_switch') cc1: some warnings being treated as errors -- drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c: In function 'rtl8xxxu_update_beacon_work_callback': >> drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:5740:25: error: too few arguments to function 'ieee80211_csa_finish' 5740 | ieee80211_csa_finish(vif); | ^~~~~~~~~~~~~~~~~~~~ In file included from drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:31: include/net/mac80211.h:5491:6: note: declared here 5491 | void ieee80211_csa_finish(struct ieee80211_vif *vif, unsigned int link_id); | ^~~~~~~~~~~~~~~~~~~~ vim +4260 drivers/net/wireless/marvell/mwifiex/cfg80211.c 1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4207 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4208 /* station cfg80211 operations */ 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4209 static struct cfg80211_ops mwifiex_cfg80211_ops = { 93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4210 .add_virtual_intf = mwifiex_add_virtual_intf, 93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4211 .del_virtual_intf = mwifiex_del_virtual_intf, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4212 .change_virtual_intf = mwifiex_cfg80211_change_virtual_intf, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4213 .scan = mwifiex_cfg80211_scan, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4214 .connect = mwifiex_cfg80211_connect, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4215 .disconnect = mwifiex_cfg80211_disconnect, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4216 .get_station = mwifiex_cfg80211_get_station, f85aae6bec6707 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4217 .dump_station = mwifiex_cfg80211_dump_station, 6bc6c49f1e2f3a drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2014-10-31 4218 .dump_survey = mwifiex_cfg80211_dump_survey, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4219 .set_wiphy_params = mwifiex_cfg80211_set_wiphy_params, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4220 .join_ibss = mwifiex_cfg80211_join_ibss, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4221 .leave_ibss = mwifiex_cfg80211_leave_ibss, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4222 .add_key = mwifiex_cfg80211_add_key, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4223 .del_key = mwifiex_cfg80211_del_key, 89951db2be5310 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-09-20 4224 .set_default_mgmt_key = mwifiex_cfg80211_set_default_mgmt_key, e39faa73ef14f6 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4225 .mgmt_tx = mwifiex_cfg80211_mgmt_tx, 6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4226 .update_mgmt_frame_registrations = 6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4227 mwifiex_cfg80211_update_mgmt_frame_registrations, 7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4228 .remain_on_channel = mwifiex_cfg80211_remain_on_channel, 7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4229 .cancel_remain_on_channel = mwifiex_cfg80211_cancel_remain_on_channel, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4230 .set_default_key = mwifiex_cfg80211_set_default_key, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4231 .set_power_mgmt = mwifiex_cfg80211_set_power_mgmt, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4232 .set_tx_power = mwifiex_cfg80211_set_tx_power, 7d54bacadce17f drivers/net/wireless/marvell/mwifiex/cfg80211.c Javier Martinez Canillas 2016-06-06 4233 .get_tx_power = mwifiex_cfg80211_get_tx_power, 5d82c53a380ca9 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-07-11 4234 .set_bitrate_mask = mwifiex_cfg80211_set_bitrate_mask, 12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4235 .start_ap = mwifiex_cfg80211_start_ap, 12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4236 .stop_ap = mwifiex_cfg80211_stop_ap, 5370c83684d9e7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-06-28 4237 .change_beacon = mwifiex_cfg80211_change_beacon, fa444bf88ce2ba drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4238 .set_cqm_rssi_config = mwifiex_cfg80211_set_cqm_rssi_config, 8a279d5b4dc128 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-07-02 4239 .set_antenna = mwifiex_cfg80211_set_antenna, 3ee712857958c2 drivers/net/wireless/marvell/mwifiex/cfg80211.c Shengzhen Li 2016-06-06 4240 .get_antenna = mwifiex_cfg80211_get_antenna, 0f9e9b8ba72bc7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2013-05-17 4241 .del_station = mwifiex_cfg80211_del_station, 0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4242 .sched_scan_start = mwifiex_cfg80211_sched_scan_start, 0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4243 .sched_scan_stop = mwifiex_cfg80211_sched_scan_stop, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4244 #ifdef CONFIG_PM 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4245 .suspend = mwifiex_cfg80211_suspend, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4246 .resume = mwifiex_cfg80211_resume, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4247 .set_wakeup = mwifiex_cfg80211_set_wakeup, f6b1cbe029f682 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-04-05 4248 .set_rekey_data = mwifiex_set_rekey_data, 7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4249 #endif d1e2586f484dfc drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2013-08-09 4250 .set_coalesce = mwifiex_cfg80211_set_coalesce, b23bce29656801 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4251 .tdls_mgmt = mwifiex_cfg80211_tdls_mgmt, 429d90d2212b56 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4252 .tdls_oper = mwifiex_cfg80211_tdls_oper, b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4253 .tdls_channel_switch = mwifiex_cfg80211_tdls_chan_switch, b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4254 .tdls_cancel_channel_switch = mwifiex_cfg80211_tdls_cancel_chan_switch, e48e0de0053f07 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4255 .add_station = mwifiex_cfg80211_add_station, 1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4256 .change_station = mwifiex_cfg80211_change_station, 3935ccc14d2c68 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-09-02 4257 CFG80211_TESTMODE_CMD(mwifiex_tm_cmd) 7ee38bf4edeac8 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-03 4258 .get_channel = mwifiex_cfg80211_get_channel, 85afb18621be39 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 4259 .start_radar_detection = mwifiex_cfg80211_start_radar_detection, 7d652034d1a08b drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 @4260 .channel_switch = mwifiex_cfg80211_channel_switch, 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4261 }; 5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4262
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 090bcf148d0c..07c5c51ff7b2 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -2047,7 +2047,7 @@ static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif) ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n", ret); } else { - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); } } diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c index 88befe92f95d..7ba3ef805fc5 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c @@ -3885,7 +3885,7 @@ void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb) */ if (arvif->vif->bss_conf.csa_active && ieee80211_beacon_cntdwn_is_complete(arvif->vif)) { - ieee80211_csa_finish(arvif->vif); + ieee80211_csa_finish(arvif->vif, 0); continue; } diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c index 8a65fa04b48d..3944a4d2e4d2 100644 --- a/drivers/net/wireless/ath/ath11k/wmi.c +++ b/drivers/net/wireless/ath/ath11k/wmi.c @@ -8267,7 +8267,7 @@ ath11k_wmi_process_csa_switch_count_event(struct ath11k_base *ab, } if (arvif->is_up && arvif->vif->bss_conf.csa_active) - ieee80211_csa_finish(arvif->vif); + ieee80211_csa_finish(arvif->vif, 0); } rcu_read_unlock(); } diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/ath/ath12k/wmi.c index 11cc3005c0f9..d505aa8c2225 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.c +++ b/drivers/net/wireless/ath/ath12k/wmi.c @@ -6446,7 +6446,7 @@ ath12k_wmi_process_csa_switch_count_event(struct ath12k_base *ab, } if (arvif->is_up && arvif->vif->bss_conf.csa_active) - ieee80211_csa_finish(arvif->vif); + ieee80211_csa_finish(arvif->vif, 0); } rcu_read_unlock(); } diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c index ee72faac2f1d..4e48407138b2 100644 --- a/drivers/net/wireless/ath/ath9k/beacon.c +++ b/drivers/net/wireless/ath/ath9k/beacon.c @@ -368,7 +368,7 @@ bool ath9k_csa_is_finished(struct ath_softc *sc, struct ieee80211_vif *vif) if (!ieee80211_beacon_cntdwn_is_complete(vif)) return false; - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); return true; } diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c index 533471e69400..8179d35dc310 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c @@ -517,7 +517,7 @@ bool ath9k_htc_csa_is_finished(struct ath9k_htc_priv *priv) if (!ieee80211_beacon_cntdwn_is_complete(vif)) return false; - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); priv->csa_vif = NULL; return true; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c index c4f96125cf33..3b6819f75430 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c @@ -1486,7 +1486,7 @@ static void iwl_mvm_csa_count_down(struct iwl_mvm *mvm, } } else if (!iwl_mvm_te_scheduled(&mvmvif->time_event_data)) { /* we don't have CSA NoA scheduled yet, switch now */ - ieee80211_csa_finish(csa_vif); + ieee80211_csa_finish(csa_vif, 0); RCU_INIT_POINTER(mvm->csa_vif, NULL); } } @@ -1832,7 +1832,7 @@ void iwl_mvm_channel_switch_start_notif(struct iwl_mvm *mvm, msecs_to_jiffies(IWL_MVM_CS_UNBLOCK_TX_TIMEOUT * csa_vif->bss_conf.beacon_int)); - ieee80211_csa_finish(csa_vif); + ieee80211_csa_finish(csa_vif, 0); rcu_read_unlock(); diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c index 218fdf1ed530..b2f9771ae713 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c @@ -168,7 +168,7 @@ static void iwl_mvm_csa_noa_start(struct iwl_mvm *mvm) goto out_unlock; } - ieee80211_csa_finish(csa_vif); + ieee80211_csa_finish(csa_vif, 0); rcu_read_unlock(); diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c index b909a7665e9c..ab8862ceaa27 100644 --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c @@ -3963,7 +3963,8 @@ mwifiex_cfg80211_add_station(struct wiphy *wiphy, struct net_device *dev, static int mwifiex_cfg80211_channel_switch(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_csa_settings *params) + struct cfg80211_csa_settings *params, + unsigned int link_id) { struct ieee_types_header *chsw_ie; struct ieee80211_channel_sw_ie *channel_sw; diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c index 8a3a90d1bfac..8bf82755ca4c 100644 --- a/drivers/net/wireless/mediatek/mt76/mac80211.c +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c @@ -1614,7 +1614,7 @@ static void __mt76_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) { if (vif->bss_conf.csa_active && ieee80211_beacon_cntdwn_is_complete(vif)) - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); } void mt76_csa_finish(struct mt76_dev *dev) diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c index ae34d019e588..c807bd8d928d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c @@ -353,7 +353,7 @@ static void mt7615_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) { if (vif->bss_conf.csa_active) - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); } static void diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c index c67c4f6ca2aa..f1522c7f0597 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c @@ -228,7 +228,7 @@ mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) if (!vif->bss_conf.csa_active || vif->type == NL80211_IFTYPE_STATION) return; - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); } static void diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c index 3c729b563edc..0eeaf428179b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c @@ -341,7 +341,7 @@ mt7996_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) if (!vif->bss_conf.csa_active || vif->type == NL80211_IFTYPE_STATION) return; - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); } static void diff --git a/drivers/net/wireless/ti/wlcore/event.c b/drivers/net/wireless/ti/wlcore/event.c index 1e082d039b82..2499dc908305 100644 --- a/drivers/net/wireless/ti/wlcore/event.c +++ b/drivers/net/wireless/ti/wlcore/event.c @@ -233,7 +233,7 @@ void wlcore_event_channel_switch(struct wl1271 *wl, cancel_delayed_work(&wlvif->channel_switch_work); } else { set_bit(WLVIF_FLAG_BEACON_DISABLED, &wlvif->flags); - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, 0); } } } diff --git a/drivers/net/wireless/virtual/mac80211_hwsim.c b/drivers/net/wireless/virtual/mac80211_hwsim.c index a84340c2075f..a410ecdca6d1 100644 --- a/drivers/net/wireless/virtual/mac80211_hwsim.c +++ b/drivers/net/wireless/virtual/mac80211_hwsim.c @@ -2285,7 +2285,7 @@ static void mac80211_hwsim_beacon_tx(void *arg, u8 *mac, } if (link_conf->csa_active && ieee80211_beacon_cntdwn_is_complete(vif)) - ieee80211_csa_finish(vif); + ieee80211_csa_finish(vif, link_id); } static enum hrtimer_restart diff --git a/include/net/mac80211.h b/include/net/mac80211.h index d400fe2e8668..850053ed2366 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -5482,12 +5482,13 @@ void ieee80211_beacon_set_cntdwn(struct ieee80211_vif *vif, u8 counter); /** * ieee80211_csa_finish - notify mac80211 about channel switch * @vif: &struct ieee80211_vif pointer from the add_interface callback. + * @link_id: valid link_id during MLO or 0 for non-MLO * * After a channel switch announcement was scheduled and the counter in this * announcement hits 1, this function must be called by the driver to * notify mac80211 that the channel can be changed. */ -void ieee80211_csa_finish(struct ieee80211_vif *vif); +void ieee80211_csa_finish(struct ieee80211_vif *vif, unsigned int link_id); /** * ieee80211_beacon_cntdwn_is_complete - find out if countdown reached 1 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 489dd97f5172..a5d1c7b043db 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -1588,6 +1588,8 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev, link->csa_block_tx = false; } + wiphy_work_cancel(wiphy, &link->csa_finalize_work); + ieee80211_free_next_beacon(link); /* turn off carrier for this interface and dependent VLANs */ @@ -3540,13 +3542,24 @@ cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon) return new_beacon; } -void ieee80211_csa_finish(struct ieee80211_vif *vif) +void ieee80211_csa_finish(struct ieee80211_vif *vif, unsigned int link_id) { struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); struct ieee80211_local *local = sdata->local; + struct ieee80211_link_data *link_data; + + if (WARN_ON(link_id > IEEE80211_MLD_MAX_NUM_LINKS)) + return; rcu_read_lock(); + link_data = rcu_dereference(sdata->link[link_id]); + if (WARN_ON(!link_data)) { + rcu_read_unlock(); + return; + } + + /* TODO: MBSSID with MLO changes */ if (vif->mbssid_tx_vif == vif) { /* Trigger ieee80211_csa_finish() on the non-transmitting * interfaces when channel switch is received on @@ -3565,7 +3578,7 @@ void ieee80211_csa_finish(struct ieee80211_vif *vif) &iter->deflink.csa_finalize_work); } } - wiphy_work_queue(local->hw.wiphy, &sdata->deflink.csa_finalize_work); + wiphy_work_queue(local->hw.wiphy, &link_data->csa_finalize_work); rcu_read_unlock(); } @@ -3583,20 +3596,21 @@ void ieee80211_channel_switch_disconnect(struct ieee80211_vif *vif, bool block_t } EXPORT_SYMBOL(ieee80211_channel_switch_disconnect); -static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata, +static int ieee80211_set_after_csa_beacon(struct ieee80211_link_data *link_data, u64 *changed) { + struct ieee80211_sub_if_data *sdata = link_data->sdata; int err; switch (sdata->vif.type) { case NL80211_IFTYPE_AP: - if (!sdata->deflink.u.ap.next_beacon) + if (!link_data->u.ap.next_beacon) return -EINVAL; - err = ieee80211_assign_beacon(sdata, &sdata->deflink, - sdata->deflink.u.ap.next_beacon, + err = ieee80211_assign_beacon(sdata, link_data, + link_data->u.ap.next_beacon, NULL, NULL, changed); - ieee80211_free_next_beacon(&sdata->deflink); + ieee80211_free_next_beacon(link_data); if (err < 0) return err; @@ -3625,6 +3639,7 @@ static int __ieee80211_csa_finalize(struct ieee80211_link_data *link_data) { struct ieee80211_sub_if_data *sdata = link_data->sdata; struct ieee80211_local *local = sdata->local; + struct ieee80211_bss_conf *link_conf = link_data->conf; u64 changed = 0; int err; @@ -3646,22 +3661,21 @@ static int __ieee80211_csa_finalize(struct ieee80211_link_data *link_data) if (link_data->reserved_ready) return 0; - return ieee80211_link_use_reserved_context(&sdata->deflink); + return ieee80211_link_use_reserved_context(link_data); } - if (!cfg80211_chandef_identical(&link_data->conf->chandef, + if (!cfg80211_chandef_identical(&link_conf->chandef, &link_data->csa_chandef)) return -EINVAL; - sdata->vif.bss_conf.csa_active = false; + link_conf->csa_active = false; - err = ieee80211_set_after_csa_beacon(sdata, &changed); + err = ieee80211_set_after_csa_beacon(link_data, &changed); if (err) return err; - if (sdata->vif.bss_conf.eht_puncturing != sdata->vif.bss_conf.csa_punct_bitmap) { - sdata->vif.bss_conf.eht_puncturing = - sdata->vif.bss_conf.csa_punct_bitmap; + if (link_conf->eht_puncturing != link_conf->csa_punct_bitmap) { + link_conf->eht_puncturing = link_conf->csa_punct_bitmap; changed |= BSS_CHANGED_EHT_PUNCTURING; } @@ -3689,7 +3703,8 @@ static void ieee80211_csa_finalize(struct ieee80211_link_data *link_data) struct ieee80211_sub_if_data *sdata = link_data->sdata; if (__ieee80211_csa_finalize(link_data)) { - sdata_info(sdata, "failed to finalize CSA, disconnecting\n"); + sdata_info(sdata, "failed to finalize CSA on link %d, disconnecting\n", + link_data->link_id); cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev, GFP_KERNEL); } @@ -3714,18 +3729,19 @@ void ieee80211_csa_finalize_work(struct wiphy *wiphy, struct wiphy_work *work) ieee80211_csa_finalize(link); } -static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata, +static int ieee80211_set_csa_beacon(struct ieee80211_link_data *link_data, struct cfg80211_csa_settings *params, u64 *changed) { + struct ieee80211_sub_if_data *sdata = link_data->sdata; struct ieee80211_csa_settings csa = {}; int err; switch (sdata->vif.type) { case NL80211_IFTYPE_AP: - sdata->deflink.u.ap.next_beacon = + link_data->u.ap.next_beacon = cfg80211_beacon_dup(¶ms->beacon_after); - if (!sdata->deflink.u.ap.next_beacon) + if (!link_data->u.ap.next_beacon) return -ENOMEM; /* @@ -3751,7 +3767,7 @@ static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata, IEEE80211_MAX_CNTDWN_COUNTERS_NUM) || (params->n_counter_offsets_presp > IEEE80211_MAX_CNTDWN_COUNTERS_NUM)) { - ieee80211_free_next_beacon(&sdata->deflink); + ieee80211_free_next_beacon(link_data); return -EINVAL; } @@ -3761,11 +3777,11 @@ static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata, csa.n_counter_offsets_presp = params->n_counter_offsets_presp; csa.count = params->count; - err = ieee80211_assign_beacon(sdata, &sdata->deflink, + err = ieee80211_assign_beacon(sdata, link_data, ¶ms->beacon_csa, &csa, NULL, changed); if (err < 0) { - ieee80211_free_next_beacon(&sdata->deflink); + ieee80211_free_next_beacon(link_data); return err; } @@ -3864,7 +3880,10 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_channel_switch ch_switch; struct ieee80211_chanctx_conf *conf; struct ieee80211_chanctx *chanctx; + struct ieee80211_bss_conf *link_conf; + struct ieee80211_link_data *link_data; u64 changed = 0; + u8 link_id = params->link_id; int err; lockdep_assert_wiphy(local->hw.wiphy); @@ -3875,16 +3894,23 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev, if (sdata->wdev.cac_started) return -EBUSY; - if (cfg80211_chandef_identical(¶ms->chandef, - &sdata->vif.bss_conf.chandef)) + if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS)) + return -EINVAL; + + link_data = wiphy_dereference(wiphy, sdata->link[link_id]); + if (!link_data) + return -ENOLINK; + + link_conf = link_data->conf; + + if (cfg80211_chandef_identical(¶ms->chandef, &link_conf->chandef)) return -EINVAL; /* don't allow another channel switch if one is already active. */ - if (sdata->vif.bss_conf.csa_active) + if (link_conf->csa_active) return -EBUSY; - conf = rcu_dereference_protected(sdata->vif.bss_conf.chanctx_conf, - lockdep_is_held(&local->hw.wiphy->mtx)); + conf = wiphy_dereference(wiphy, link_conf->chanctx_conf); if (!conf) { err = -EBUSY; goto out; @@ -3908,7 +3934,7 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev, if (err) goto out; - err = ieee80211_link_reserve_chanctx(&sdata->deflink, ¶ms->chandef, + err = ieee80211_link_reserve_chanctx(link_data, ¶ms->chandef, chanctx->mode, params->radar_required); if (err) @@ -3917,44 +3943,44 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev, /* if reservation is invalid then this will fail */ err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0); if (err) { - ieee80211_link_unreserve_chanctx(&sdata->deflink); + ieee80211_link_unreserve_chanctx(link_data); goto out; } /* if there is a color change in progress, abort it */ - if (sdata->vif.bss_conf.color_change_active) + if (link_conf->color_change_active) ieee80211_color_change_abort(sdata); - err = ieee80211_set_csa_beacon(sdata, params, &changed); + err = ieee80211_set_csa_beacon(link_data, params, &changed); if (err) { - ieee80211_link_unreserve_chanctx(&sdata->deflink); + ieee80211_link_unreserve_chanctx(link_data); goto out; } - if (params->punct_bitmap && !sdata->vif.bss_conf.eht_support) + if (params->punct_bitmap && link_conf->eht_support) goto out; - sdata->deflink.csa_chandef = params->chandef; - sdata->deflink.csa_block_tx = params->block_tx; - sdata->vif.bss_conf.csa_active = true; - sdata->vif.bss_conf.csa_punct_bitmap = params->punct_bitmap; + link_data->csa_chandef = params->chandef; + link_data->csa_block_tx = params->block_tx; + link_conf->csa_active = true; + link_conf->csa_punct_bitmap = params->punct_bitmap; - if (sdata->deflink.csa_block_tx) + if (link_data->csa_block_tx) ieee80211_stop_vif_queues(local, sdata, IEEE80211_QUEUE_STOP_REASON_CSA); cfg80211_ch_switch_started_notify(sdata->dev, - &sdata->deflink.csa_chandef, 0, + &link_data->csa_chandef, link_id, params->count, params->block_tx, - sdata->vif.bss_conf.csa_punct_bitmap); + link_conf->csa_punct_bitmap); if (changed) { - ieee80211_link_info_change_notify(sdata, &sdata->deflink, - changed); + ieee80211_link_info_change_notify(sdata, link_data, changed); + /* link_id to be passed here? */ drv_channel_switch_beacon(sdata, ¶ms->chandef); } else { /* if the beacon didn't change, we can finalize immediately */ - ieee80211_csa_finalize(&sdata->deflink); + ieee80211_csa_finalize(link_data); } out:
Currently, during channel switch, deflink (or link_id 0) is always considered. However, with Multi-Link Operation (MLO), there is a need to handle link specific data structures based on the actual operational link_id during channel switch operation. Hence, add support for the same. Non-MLO based operations will use link_id as 0 or deflink member as applicable Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> --- drivers/net/wireless/ath/ath10k/mac.c | 2 +- drivers/net/wireless/ath/ath10k/wmi.c | 2 +- drivers/net/wireless/ath/ath11k/wmi.c | 2 +- drivers/net/wireless/ath/ath12k/wmi.c | 2 +- drivers/net/wireless/ath/ath9k/beacon.c | 2 +- .../net/wireless/ath/ath9k/htc_drv_beacon.c | 2 +- .../net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 4 +- .../wireless/intel/iwlwifi/mvm/time-event.c | 2 +- .../net/wireless/marvell/mwifiex/cfg80211.c | 3 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 2 +- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 2 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 2 +- .../net/wireless/mediatek/mt76/mt7996/mcu.c | 2 +- drivers/net/wireless/ti/wlcore/event.c | 2 +- drivers/net/wireless/virtual/mac80211_hwsim.c | 2 +- include/net/mac80211.h | 3 +- net/mac80211/cfg.c | 110 +++++++++++------- 17 files changed, 87 insertions(+), 59 deletions(-)