Search Linux Wireless

Problem in iwl_pcie_gen2_enqueue_hcmd if irqs are disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I get the following error on linux-next when bringing the device up.
It's such an obvious error that I wonder how it could pass your QA.

led_trigger_event() disables interrupts, and spin_unlock_bh() complains
about this. The following fixes the warning for me.

I'd say this means also commit "iwlwifi: pcie: don't disable interrupts
for reg_lock" is wrong.


diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
index 4456abb9a..34bde8c87 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
@@ -40,6 +40,7 @@ int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
 	const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
 	u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
 	struct iwl_tfh_tfd *tfd;
+	unsigned long flags;
 
 	copy_size = sizeof(struct iwl_cmd_header_wide);
 	cmd_size = sizeof(struct iwl_cmd_header_wide);
@@ -108,14 +109,14 @@ int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
 		goto free_dup_buf;
 	}
 
-	spin_lock_bh(&txq->lock);
+	spin_lock_irqsave(&txq->lock, flags);
 
 	idx = iwl_txq_get_cmd_index(txq, txq->write_ptr);
 	tfd = iwl_txq_get_tfd(trans, txq, txq->write_ptr);
 	memset(tfd, 0, sizeof(*tfd));
 
 	if (iwl_txq_space(trans, txq) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
-		spin_unlock_bh(&txq->lock);
+		spin_unlock_irqrestore(&txq->lock, flags);
 
 		IWL_ERR(trans, "No space in command queue\n");
 		iwl_op_mode_cmd_queue_full(trans->op_mode);
@@ -250,7 +251,7 @@ int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
 	spin_unlock(&trans_pcie->reg_lock);
 
 out:
-	spin_unlock_bh(&txq->lock);
+	spin_unlock_irqrestore(&txq->lock, flags);
 free_dup_buf:
 	if (idx < 0)
 		kfree(dup_buf);
-- 
2.31.0







[   19.783986] ------------[ cut here ]------------
[   19.784096] WARNING: CPU: 1 PID: 2318 at kernel/softirq.c:178 __local_bh_enable_ip+0x85/0xc0
[   19.784166] Modules linked in: snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio cmac bnep iwlmvm led_class vfat fat mac80211 libarc4 x86_pkg_temp_thermal coretemp iwlwifi btusb btintel snd_hda_intel snd_intel_dspcfg bluetooth aesni_intel i915 snd_hda_codec crypto_simd snd_hda_core ecdh_generic cryptd ecc snd_pcm r8169 i2c_i801 intel_gtt realtek snd_timer i2c_algo_bit i2c_smbus snd mdio_devres drm_kms_helper cfg80211 syscopyarea sysfillrect libphy sysimgblt rfkill mei_me fb_sys_fops mei sch_fq_codel crypto_user drm efivarfs ext4 mbcache jbd2 ums_realtek crc32c_intel ahci libahci libata
[   19.784646] CPU: 1 PID: 2318 Comm: ip Not tainted 5.12.0-rc3-next-20210315+ #1
[   19.784699] Hardware name: NA ZBOX-CI327NANO-GS-01/ZBOX-CI327NANO-GS-01, BIOS 5.12 04/28/2020
[   19.784759] RIP: 0010:__local_bh_enable_ip+0x85/0xc0
[   19.784800] Code: 8b 05 7f c9 da 62 a9 00 ff ff 00 74 32 65 ff 0d 71 c9 da 62 e8 2c be 0e 00 fb 5b 41 5c 5d c3 65 8b 05 3b cf da 62 85 c0 75 ae <0f> 0b eb aa e8 42 bd 0e 00 eb ab 4c 89 e7 e8 b8 fa 05 00 eb b4 65
[   19.784922] RSP: 0018:ffff9ef9c038f1b8 EFLAGS: 00010046
[   19.784962] RAX: 0000000000000000 RBX: 0000000000000201 RCX: 0000000000000000
[   19.785011] RDX: 0000000000000003 RSI: 0000000000000201 RDI: ffffffffc09488b4
[   19.785062] RBP: ffff9ef9c038f1c8 R08: 0000000000000000 R09: 0000000000000001
[   19.785111] R10: 0000000000000001 R11: 0000000000000000 R12: ffffffffc09488b4
[   19.785159] R13: ffff8ed2c29f6b40 R14: 0000000000000000 R15: 000000000000000c
[   19.785210] FS:  00007f5948d9b740(0000) GS:ffff8ed33bc80000(0000) knlGS:0000000000000000
[   19.785267] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   19.785308] CR2: 0000559281ddfcc0 CR3: 000000010b378000 CR4: 00000000003506e0
[   19.785361] Call Trace:
[   19.785381]  _raw_spin_unlock_bh+0x2c/0x40
[   19.785416]  iwl_pcie_gen2_enqueue_hcmd+0x504/0x870 [iwlwifi]
[   19.785481]  iwl_trans_txq_send_hcmd+0x68/0x3b0 [iwlwifi]
[   19.785539]  iwl_trans_send_cmd+0x7d/0x170 [iwlwifi]
[   19.785593]  iwl_mvm_send_cmd+0x29/0x80 [iwlmvm]
[   19.785649]  iwl_mvm_led_set+0xa5/0xd0 [iwlmvm]
[   19.785704]  iwl_led_brightness_set+0x1a/0x20 [iwlmvm]
[   19.785761]  led_set_brightness_nosleep+0x24/0x50
[   19.785800]  led_set_brightness+0x41/0x50
[   19.785832]  led_trigger_event+0x46/0x70
[   19.785863]  ieee80211_led_radio+0x24/0x30 [mac80211]
[   19.785980]  ieee80211_do_open+0x4c4/0x9a0 [mac80211]
[   19.786074]  ieee80211_open+0x69/0x90 [mac80211]
[   19.786165]  __dev_open+0xd6/0x190



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux