Message ID | 20240618200104.3213638262ef.I2a0031b37623d7763fd0c5405477ea7206a3e923@changeid (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Johannes Berg |
Headers | show |
Series | wifi: iwlwifi: bugfixes - 18-06-24 | expand |
The commit 5c38bedac16a ("wifi: iwlwifi: mvm: unify and fix interface combinations") breaks mvm hard. wlan interface can't be created and even rmmod fails. On driver load I get: WARNING: CPU: 5 PID: 1358 at net/wireless/core.c:689 wiphy_register+0x8ee/0x920 [cfg80211] Modules linked in: snd_ctl_led snd_soc_skl_hda_dsp(+) snd_soc_hdac_hdmi snd_soc_intel_hda_dsp_common snd_sof_probes snd_hda_codec_realtek snd_hda_codec_generic snd_hda_scodec_compon ent snd_soc_dmic snd_sof_pci_intel_tgl snd_sof_pci_intel_cnl snd_sof_intel_hda_generic soundwire_intel soundwire_cadence snd_sof_intel_hda_common snd_sof_intel_hda_mlink snd_sof_intel_hda snd_sof_pci snd_sof_x tensa_dsp snd_sof snd_sof_utils snd_soc_hdac_hda snd_soc_acpi_intel_match soundwire_generic_allocation snd_soc_acpi soundwire_bus snd_soc_avs snd_soc_hda_codec snd_hda_ext_core intel_uncore_frequency intel_unc ore_frequency_common intel_tcc_cooling snd_soc_core x86_pkg_temp_thermal intel_powerclamp coretemp snd_compress snd_hda_codec_hdmi ac97_bus iwlmvm(+) snd_pcm_dmaengine kvm_intel snd_hda_intel vfat kvm mac80211 snd_intel_dspcfg fat snd_intel_sdw_acpi snd_hda_codec iTCO_wdt nouveau(+) intel_pmc_bxt libarc4 rapl processor_thermal_device_pci intel_rapl_msr mei_wdt iTCO_vendor_support snd_hda_core processor_thermal_devi ce Jul 01 16:15:41 Ohm kernel: snd_hwdep processor_thermal_wt_hint iwlwifi intel_cstate processor_thermal_rfim snd_pcm drm_ttm_helper processor_thermal_rapl gpu_sched intel_rapl_common nxp_nci_i2c snd_timer thin k_lmi(+) intel_uncore pcspkr firmware_attributes_class wmi_bmof nxp_nci snd mei_me processor_thermal_wt_req nci drm_gpuvm cfg80211 i2c_i801 soundcore mei drm_exec processor_thermal_power_floor idma64 i2c_smbus mxm_wmi processor_thermal_mbox nfc intel_pmc_core rfkill int3403_thermal intel_vsec int340x_thermal_zone int3400_thermal pmt_telemetry intel_hid acpi_thermal_rel pmt_class acpi_tad acpi_pad sparse_keymap joyd ev loop fuse nfnetlink mmc_block nvme nvme_core crct10dif_pclmul crc32_pclmul crc32c_intel rtsx_pci_sdmmc polyval_clmulni polyval_generic ghash_clmulni_intel sha512_ssse3 mmc_core sha256_ssse3 hid_multitouch u csi_acpi sha1_ssse3 typec_ucsi thunderbolt rtsx_pci vmd typec i2c_hid_acpi i2c_hid pinctrl_alderlake serio_raw CPU: 5 PID: 1358 Comm: modprobe Not tainted 6.10.0-rc5-wt+ #17 Hardware name: LENOVO 21D6CTO1WW/21D6CTO1WW, BIOS N3FET34W (1.19 ) 03/10/2023 RIP: 0010:wiphy_register+0x8ee/0x920 [cfg80211] Code: ef f8 ff ff 0f 0b e9 e8 f8 ff ff 0f 0b e9 e1 f8 ff ff 0f 0b e9 da f8 ff ff bf 01 00 00 00 e9 a4 fc ff ff 0f 0b e9 c9 f8 ff ff <0f> 0b e9 c2 f8 ff ff 0f 0b e9 f1 fe ff ff f7 d1 e9 d4 fe ff ff 0f RSP: 0018:ffffc9000167f7d0 EFLAGS: 00010297 skl_hda_dsp_generic skl_hda_dsp_generic: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3 RAX: 0000000000000300 RBX: ffff888121b983c0 RCX: 0000000000000300 RDX: ffffffffc11f2b28 RSI: ffffffffc11f2ae0 RDI: 0000000000000000 RBP: ffffc9000167f840 R08: 0000000000000002 R09: 0000000000000000 R10: 0000000000000003 R11: ffffffffc11f2b10 R12: ffffffffc11f2b28 R13: 0000000000000001 R14: 0000000000000005 R15: 000000000000000c FS: 00007f9b91560080(0000) GS:ffff88902ee80000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007fbbe4015608 CR3: 00000001454da000 CR4: 0000000000f50ef0 PKRU: 55555554 Call Trace: <TASK> ? wiphy_register+0x8ee/0x920 [cfg80211] ? __warn.cold+0x8e/0xe8 ? wiphy_register+0x8ee/0x920 [cfg80211] ? report_bug+0xfb/0x140 ? handle_bug+0x3c/0x80 ? exc_invalid_op+0x13/0x60 ? asm_exc_invalid_op+0x16/0x20 ? wiphy_register+0x8ee/0x920 [cfg80211] ? netdev_run_todo+0x60/0x4f0 ? kvmalloc_node_noprof+0x36/0xc0 ieee80211_register_hw+0x832/0xd60 [mac80211] iwl_mvm_mac_setup_register+0xb62/0xd50 [iwlmvm] iwl_mvm_start_post_nvm+0x5f/0xe0 [iwlmvm] iwl_op_mode_mvm_start+0x86a/0x990 [iwlmvm] _iwl_op_mode_start.isra.0+0x3f/0x80 [iwlwifi] iwl_opmode_register+0x6d/0xe0 [iwlwifi] ? __pfx_iwl_mvm_init+0x10/0x10 [iwlmvm] iwl_mvm_init+0x34/0xff0 [iwlmvm] ? __pfx_iwl_mvm_init+0x10/0x10 [iwlmvm] do_one_initcall+0x54/0x2e0 do_init_module+0x82/0x230 init_module_from_file+0x86/0xc0 idempotent_init_module+0x121/0x2b0 __x64_sys_finit_module+0x5a/0xb0 do_syscall_64+0x7e/0x190 ? vfs_read+0x152/0x370 ? __rseq_handle_notify_resume+0xa2/0x480 ? sysvec_call_function+0xa/0x90 ? asm_sysvec_call_function+0x16/0x20 ? __pfx_generic_file_llseek+0x10/0x10 ? syscall_exit_to_user_mode+0x76/0x210 ? do_syscall_64+0x8a/0x190 ? __pfx_page_put_link+0x10/0x10 ? do_sys_openat2+0x9c/0xe0 ? syscall_exit_to_user_mode+0x76/0x210 ? do_syscall_64+0x8a/0x190 ? do_syscall_64+0x8a/0x190 ? exc_page_fault+0x7a/0x180 entry_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7f9b9167275d Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 9b 16 0d 00 f7 d8 64 89 01 48 RSP: 002b:00007ffff874b378 EFLAGS: 00000246 ORIG_RAX: 0000000000000139 RAX: ffffffffffffffda RBX: 000055b8e84a7ee0 RCX: 00007f9b9167275d RDX: 0000000000000000 RSI: 000055b8d1da19ca RDI: 0000000000000002 RBP: 0000000000000000 R08: 0000000000000070 R09: 000055b8e84aa7e0 R10: 00007f9b91744b20 R11: 0000000000000246 R12: 000055b8d1da19ca R13: 0000000000040000 R14: 000055b8e84a7ff0 R15: 0000000000000000 </TASK> ---[ end trace 0000000000000000 ]--- After bisecting the issue and reverting the identified commit service is restored.
On 7/2/24 12:41 PM, Alexander Wetzel wrote: > The commit 5c38bedac16a ("wifi: iwlwifi: mvm: unify and fix interface > combinations") breaks mvm hard. wlan interface can't be created and even > rmmod fails. > > On driver load I get: > > WARNING: CPU: 5 PID: 1358 at net/wireless/core.c:689 wiphy_register+0x8ee/0x920 [cfg80211] ran into the same issue. Debugging revealed that the " - 1" is the problem because wiphy_verify_combinations checks if the specified limits in n_limits.max adds up to at least max_interfaces (=3), which isn't true anymore with the " - 1" as the ieee80211_iface_limit with NL80211_IFTYPE_P2P_DEVICE is missing. Not sure, if this needs fixing in cfg80211 or iwlwifi. But I can confirm that this patch "works" (not sure if it's correct/intended though). --- diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index 60bfe42d5386..e40f993b17fd 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c @@ -59,13 +59,13 @@ static const struct ieee80211_iface_combination iwl_mvm_iface_combinations[] = { .num_different_channels = 2, .max_interfaces = 3, .limits = iwl_mvm_limits, - .n_limits = ARRAY_SIZE(iwl_mvm_limits) - 1, + .n_limits = ARRAY_SIZE(iwl_mvm_limits), }, { .num_different_channels = 1, .max_interfaces = 3, .limits = iwl_mvm_limits_ap, - .n_limits = ARRAY_SIZE(iwl_mvm_limits_ap) - 1, + .n_limits = ARRAY_SIZE(iwl_mvm_limits_ap), }, }; --- relevant iw phy dump valid interface combinations: * #{ managed } <= 1, #{ P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1, total <= 3, #channels <= 2 * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1, total <= 3, #channels <= 1 Cheers, Christian
On Wed, 2024-07-03 at 20:16 +0200, Christian Lamparter wrote: > On 7/2/24 12:41 PM, Alexander Wetzel wrote: > > The commit 5c38bedac16a ("wifi: iwlwifi: mvm: unify and fix interface > > combinations") breaks mvm hard. wlan interface can't be created and even > > rmmod fails. > > > > On driver load I get: > > > > WARNING: CPU: 5 PID: 1358 at net/wireless/core.c:689 wiphy_register+0x8ee/0x920 [cfg80211] > ran into the same issue. Debugging revealed that the " - 1" is the problem > because wiphy_verify_combinations checks if the specified limits in n_limits.max > adds up to at least max_interfaces (=3), which isn't true anymore with the > " - 1" as the ieee80211_iface_limit with NL80211_IFTYPE_P2P_DEVICE is missing. > > Not sure, if this needs fixing in cfg80211 or iwlwifi. But I can confirm that this > patch "works" (not sure if it's correct/intended though). > I sent the exact same patch yesterday :) https://lore.kernel.org/20240702130001.8c871a3f0b5a.I08a6542f52f63c5bd66bf3feb09e1998ce7c60e5@changeid/ We have a version that has another array entry for NAN support and then subtracts 1 here to add it conditionally again later etc., and this got mixed up when sending out the patch. johannes
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index 18ce060df9b5..eeec425dc4d5 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c @@ -30,21 +30,28 @@ #include "iwl-nvm-parse.h" #include "time-sync.h" +#define IWL_MVM_LIMITS(ap) \ + { \ + .max = 1, \ + .types = BIT(NL80211_IFTYPE_STATION), \ + }, \ + { \ + .max = 1, \ + .types = ap | \ + BIT(NL80211_IFTYPE_P2P_CLIENT) | \ + BIT(NL80211_IFTYPE_P2P_GO), \ + }, \ + { \ + .max = 1, \ + .types = BIT(NL80211_IFTYPE_P2P_DEVICE), \ + } + static const struct ieee80211_iface_limit iwl_mvm_limits[] = { - { - .max = 1, - .types = BIT(NL80211_IFTYPE_STATION), - }, - { - .max = 1, - .types = BIT(NL80211_IFTYPE_AP) | - BIT(NL80211_IFTYPE_P2P_CLIENT) | - BIT(NL80211_IFTYPE_P2P_GO), - }, - { - .max = 1, - .types = BIT(NL80211_IFTYPE_P2P_DEVICE), - }, + IWL_MVM_LIMITS(0) +}; + +static const struct ieee80211_iface_limit iwl_mvm_limits_ap[] = { + IWL_MVM_LIMITS(BIT(NL80211_IFTYPE_AP)) }; static const struct ieee80211_iface_combination iwl_mvm_iface_combinations[] = { @@ -52,7 +59,13 @@ static const struct ieee80211_iface_combination iwl_mvm_iface_combinations[] = { .num_different_channels = 2, .max_interfaces = 3, .limits = iwl_mvm_limits, - .n_limits = ARRAY_SIZE(iwl_mvm_limits), + .n_limits = ARRAY_SIZE(iwl_mvm_limits) - 1, + }, + { + .num_different_channels = 1, + .max_interfaces = 3, + .limits = iwl_mvm_limits_ap, + .n_limits = ARRAY_SIZE(iwl_mvm_limits_ap) - 1, }, };