Since mesh powersaving was added, pending bcast/mcast frames may go out the CAB queue now. Unfortunately, the queue was only set up for AP mode, so we would try to tx on the IEEE80211_INVAL_HW_QUEUE. Allow cab_queue for mesh interfaces as well. Fixes the following warning (or crash without MAC80211_VERBOSE_DEBUG): [ 1888.975315] ------------[ cut here ]------------ [ 1888.975390] WARNING: at net/mac80211/tx.c:1223 __ieee80211_tx+0x162/0x35f [mac80211]() [ 1888.975397] Hardware name: 3443CTO [ 1888.975401] Modules linked in: mac80211_hwsim mac80211 cfg80211 vfat fat parport_pc ppdev lp parport rfcomm bnep binfmt_misc uinput nfsd auth_rpcgss nfs_acl nfs lockd fscache sunrpc loop snd_hda_codec_hdmi iTCO_wdt iTCO_vendor_support snd_hda_codec_realtek btusb bluetooth joydev arc4 cdc_ncm coretemp usbnet kvm_intel mii cdc_acm cdc_wdm kvm evdev snd_hda_intel psmouse snd_hda_codec pcspkr serio_raw snd_hwdep snd_pcm thinkpad_acpi snd_page_alloc nvram snd_seq snd_seq_device lpc_ich snd_timer mfd_core i2c_i801 snd i915 ac battery rfkill tpm_tis tpm soundcore tpm_bios ehci_pci ehci_hcd acpi_cpufreq mperf i2c_algo_bit drm_kms_helper drm video wmi button i2c_core processor ext4 crc16 jbd2 mbcache dm_crypt dm_mod sg sd_mod crc_t10dif crc32c_intel ghash_clmulni_intel ahci libahci libata aesni_intel xts aes_x86_64 lrw gf128mul ablk_helper scsi_mod cryptd sdhci_pci sdhci mmc_core xhci_hcd usbcore usb_common thermal thermal_sys [last unloaded: cfg80211] [ 1888.975671] Pid: 3085, comm: avahi-daemon Tainted: G W 3.8.0-rc1+ #377 [ 1888.975677] Call Trace: [ 1888.975701] [<ffffffff81045c20>] warn_slowpath_common+0x83/0x9c [ 1888.975715] [<ffffffff81045c53>] warn_slowpath_null+0x1a/0x1c [ 1888.975771] [<ffffffffa083aef0>] __ieee80211_tx+0x162/0x35f [mac80211] [ 1888.975820] [<ffffffffa083cb1d>] ieee80211_tx+0xd3/0xf9 [mac80211] [ 1888.975868] [<ffffffffa083cc0f>] ieee80211_xmit+0xcc/0xd5 [mac80211] [ 1888.975914] [<ffffffffa083db59>] ieee80211_subif_start_xmit+0xc53/0xcd8 [mac80211] [ 1888.975933] [<ffffffff81319acd>] dev_hard_start_xmit+0x259/0x3ce [ 1888.975951] [<ffffffff81333d6b>] sch_direct_xmit+0x74/0x17d [ 1888.975967] [<ffffffff81313759>] ? spin_lock+0x9/0xb [ 1888.975980] [<ffffffff8131a0b1>] dev_queue_xmit+0x230/0x414 [ 1888.975995] [<ffffffff8134877a>] ip_finish_output2+0x348/0x3aa [ 1888.976008] [<ffffffff81349029>] ip_finish_output+0x6c/0x71 [ 1888.976020] [<ffffffff81349046>] NF_HOOK_COND.constprop.44+0x18/0x58 [ 1888.976036] [<ffffffff8130d2f6>] ? skb_clone+0x8b/0x90 [ 1888.976048] [<ffffffff8134a03a>] ip_mc_output+0x134/0x13c [ 1888.976060] [<ffffffff8134835a>] dst_output+0x18/0x1c [ 1888.976072] [<ffffffff81349a24>] ip_local_out+0x20/0x24 [ 1888.976084] [<ffffffff8134a8cf>] ip_send_skb+0x16/0x3c [ 1888.976098] [<ffffffff8136bfba>] udp_send_skb+0x254/0x2b9 [ 1888.976112] [<ffffffff8136c85e>] udp_sendmsg+0x5a8/0x7d4 [ 1888.976126] [<ffffffff813483c3>] ? skb_dst_copy.isra.29+0x25/0x25 [ 1888.976139] [<ffffffff81373e00>] ? rcu_read_unlock+0x44/0x5d [ 1888.976157] [<ffffffff81092ef9>] ? lock_release+0x1ab/0x200 [ 1888.976170] [<ffffffff81373fbf>] inet_sendmsg+0x3f/0x68 [ 1888.976184] [<ffffffff813022c6>] __sock_sendmsg_nosec+0x25/0x27 [ 1888.976196] [<ffffffff813049f5>] sock_sendmsg+0x5f/0x80 [ 1888.976211] [<ffffffff81304c2b>] __sys_sendmsg+0x215/0x2b6 [ 1888.976226] [<ffffffff8106a423>] ? __srcu_read_unlock+0x4a/0x68 [ 1888.976259] [<ffffffff8116e2f7>] ? fsnotify+0x499/0x4e4 [ 1888.976283] [<ffffffff8116deeb>] ? fsnotify+0x8d/0x4e4 [ 1888.976318] [<ffffffff811507f6>] ? fcheck_files+0x85/0xea [ 1888.976332] [<ffffffff81150ebb>] ? fget_light+0x38/0x99 [ 1888.976346] [<ffffffff81305e20>] sys_sendmsg+0x42/0x60 [ 1888.976364] [<ffffffff813f4c99>] system_call_fastpath+0x16/0x1b [ 1888.976373] ---[ end trace 1a356222b0c6ad6a ]--- Signed-off-by: Bob Copeland <bob@xxxxxxxxxxx> --- net/mac80211/iface.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 40ff030..16ece80 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -294,7 +294,8 @@ static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata) } } - if ((sdata->vif.type != NL80211_IFTYPE_AP) || + if ((sdata->vif.type != NL80211_IFTYPE_AP && + sdata->vif.type != NL80211_IFTYPE_MESH_POINT) || !(sdata->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)) { sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE; return 0; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html