Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Peter Osterlund wrote: Larry Finger [EMAIL PROTECTED] writes: Peter - does the interface work for a while, or does this transmit timeout happen immediately? It works perfectly for a few hours, then it stops working. Stressing the network doesn't seem to make a difference. The only workaround I've found so far is to increase BADNESS_LIMIT to 20 in bcm43xx_main.c. With that change I have never seen this problem. Raising BADNESS_LIMIT to 20 bcm43xx_voluntary_preempt produces a lot of bcm43xx: ASSERTION FAILED (!in_atomic() !in_irq() !in_interrupt() !irqs_disabled()) at: drivers/net/wireless/bcm43xx/bcm43xx_phy.c:88:bcm43xx_voluntary_preempt() -- Emanuele Giaquinta ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
On Tuesday 05 September 2006 15:18, Larry Finger wrote: Emanuele Giaquinta wrote: Raising BADNESS_LIMIT to 20 bcm43xx_voluntary_preempt produces a lot of bcm43xx: ASSERTION FAILED (!in_atomic() !in_irq() !in_interrupt() !irqs_disabled()) at: drivers/net/wireless/bcm43xx/bcm43xx_phy.c:88:bcm43xx_voluntary_preempt() I do not understand this assertion failure. I'm currently running with BADNESS_LIMIT at 20 and I have not seen any of these. In addition, my interface has been up continuously for more than 14 hours, whereas with BADNESS_LIMIT at 4, the longest up time was less than 6 hours. Michael - Any suggestions? Simple: increasing badness limit makes the whole periodic work non-preemptible. And we all know what happens if we call schedule() in non-preemptible code (we hold the IRQ spinlock). This assert() was added to prevent incorrect BADNESS_LIMIT tunings ;) -- Greetings Michael. ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Michael Buesch wrote: Simple: increasing badness limit makes the whole periodic work non-preemptible. And we all know what happens if we call schedule() in non-preemptible code (we hold the IRQ spinlock). This assert() was added to prevent incorrect BADNESS_LIMIT tunings ;) I wonder why I don't see these assertions. As my card shows these errors, I think I'm the one to try fixes. It is difficult to fix something that might not break for 20 hours. I'll take the suggestions that you sent in the other mail and try to convert them to code. I will entertain any other suggestions, particularly if they contain code. ;) Larry ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
On Monday 04 September 2006 05:09, Larry Finger wrote: Emanuele Giaquinta wrote: I can confirm the very same behaviour using a bcm4306 on linux-2.6.18-rc4 with the bcm43xx patches queued for 2.6.19 applied; when a hard reset occurs ksoftirqd begins using 100% CPU indefinitely, and in one case the controller restart failed: NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: Controller restarted NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed Trying to free already-free IRQ 52 This sounds as if there may be a deadlock when a restart occurs. Do you have the lock debugging options set in your configuration? I used to get the NETDEV WATCHDOG timeouts, but the recent wireless-2.6 changes appear to have fixed them. Yes, Emanuele. Please try with: * Latest wireless-2.6 * and most Kernel Hacking options enabled * and most important, with bcm43xx debugging enabled. -- Greetings Michael. ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Michael Buesch [EMAIL PROTECTED] writes: On Monday 04 September 2006 05:09, Larry Finger wrote: Emanuele Giaquinta wrote: I can confirm the very same behaviour using a bcm4306 on linux-2.6.18-rc4 with the bcm43xx patches queued for 2.6.19 applied; when a hard reset occurs ksoftirqd begins using 100% CPU indefinitely, and in one case the controller restart failed: NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: Controller restarted NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed Trying to free already-free IRQ 52 This sounds as if there may be a deadlock when a restart occurs. Do you have the lock debugging options set in your configuration? I used to get the NETDEV WATCHDOG timeouts, but the recent wireless-2.6 changes appear to have fixed them. Yes, Emanuele. Please try with: * Latest wireless-2.6 * and most Kernel Hacking options enabled * and most important, with bcm43xx debugging enabled. Unfortunately, it doesn't help on my computer. With current wireless-2.6 tree, I see the same behavior as I reported before, ie transmit timed out, followed by controller RESET and ksoftirqd using 100% CPU. -- Peter Osterlund - [EMAIL PROTECTED] http://web.telia.com/~u89404340 ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Peter Osterlund wrote: Michael Buesch [EMAIL PROTECTED] writes: On Monday 04 September 2006 05:09, Larry Finger wrote: This sounds as if there may be a deadlock when a restart occurs. Do you have the lock debugging options set in your configuration? I used to get the NETDEV WATCHDOG timeouts, but the recent wireless-2.6 changes appear to have fixed them. Yes, Emanuele. Please try with: * Latest wireless-2.6 * and most Kernel Hacking options enabled * and most important, with bcm43xx debugging enabled. Unfortunately, it doesn't help on my computer. With current wireless-2.6 tree, I see the same behavior as I reported before, ie transmit timed out, followed by controller RESET and ksoftirqd using 100% CPU. Peter - does the interface work for a while, or does this transmit timeout happen immediately? Are you able to capture anything in the logs, or are they always lost? If you can recover any bcm43xx info from the logs, please send it. In addition, please send the firmware version as indicated by the firmware cutter. Thanks, Larry ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
On Monday 04 September 2006 21:55, Peter Osterlund wrote: Michael Buesch [EMAIL PROTECTED] writes: On Monday 04 September 2006 05:09, Larry Finger wrote: Emanuele Giaquinta wrote: I can confirm the very same behaviour using a bcm4306 on linux-2.6.18-rc4 with the bcm43xx patches queued for 2.6.19 applied; when a hard reset occurs ksoftirqd begins using 100% CPU indefinitely, and in one case the controller restart failed: NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: Controller restarted NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed Trying to free already-free IRQ 52 This sounds as if there may be a deadlock when a restart occurs. Do you have the lock debugging options set in your configuration? I used to get the NETDEV WATCHDOG timeouts, but the recent wireless-2.6 changes appear to have fixed them. Yes, Emanuele. Please try with: * Latest wireless-2.6 * and most Kernel Hacking options enabled * and most important, with bcm43xx debugging enabled. Unfortunately, it doesn't help on my computer. With current wireless-2.6 tree, I see the same behavior as I reported before, ie transmit timed out, followed by controller RESET and ksoftirqd using 100% CPU. I still think you don't have bcm43xx debugging enabled, or you don't post all debug messages here. Please do so, otherwise we can't help. Please provide full dmesg. -- Greetings Michael. ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Peter Osterlund wrote: Larry Finger [EMAIL PROTECTED] writes: Peter - does the interface work for a while, or does this transmit timeout happen immediately? It works perfectly for a few hours, then it stops working. Stressing the network doesn't seem to make a difference. The only workaround I've found so far is to increase BADNESS_LIMIT to 20 in bcm43xx_main.c. With that change I have never seen this problem. That helps a lot. Making periodic work preemptible seems to be the cause of the difficulty. There must be some circumstance where a transmit cannot complete because interrupts are disabled, which triggers the watchdog. In addition, the reset routine must have a problem as well, which keeps the system from recovering. You can set BADNESS_LIMIT to 20 while we try to figure what is happening. Once we have a trial fix, we will let you know. Of course, if a failure still occurs with the new BADNESS_LIMIT, please let me know. Your firmware is OK. I was just trying to get a handle on where the problem was occurring. As you get hours of operation, the firmware is not a suspect. Larry ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Peter Osterlund wrote: Peter Osterlund [EMAIL PROTECTED] writes: Michael Buesch [EMAIL PROTECTED] writes: On Friday 04 August 2006 01:31, Peter Osterlund wrote: Ivan Matveich [EMAIL PROTECTED] writes: [interface works fine for a few hours, then this spontaneously happens] [note: the computer does nothing but compile stuff, etc during this time] NETDEV WATCHDOG: wireless: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: select_wireless_core: cleanup bcm43xx: Radio turned off bcm43xx: DMA 0x0200 (RX) max used slots: 1/64 bcm43xx: DMA 0x0260 (TX) max used slots: 0/512 bcm43xx: DMA 0x0240 (TX) max used slots: 0/512 bcm43xx: DMA 0x0220 (TX) max used slots: 70/512 bcm43xx: DMA 0x0200 (TX) max used slots: 0/512 bcm43xx: Radio turned on bcm43xx: Chip initialized bcm43xx: DMA initialized bcm43xx: Keys cleared bcm43xx: Selected 802.11 core (phytype 2) bcm43xx: Controller restarted [now the interface stops working: pings no longer go through] I've seen this too and I also use a preemptable kernel. In my case the problem goes away if I increase BADNESS_LIMIT to 20 in bcm43xx_main.c. Therefore, my guess is that the new locking strategy isn't preempt-safe. (I haven't tested a non-preemptable kernel though.) That might be wrong guesswork. ... To verify: Does it also go away, if you stay away from BADNESS_LIMIT and disable preemption? To do that, you must disable CONFIG_PREEMPT and make the function bcm43xx_voluntary_preempt() in bcm43xx_phy.c a NOP (return early). I just booted a linville wireless git tree kernel with these changes. Now I'll just have to wait a few hours to see what happens. This version also stopped working after about 2.5 hours of uptime. It doesn't lock up the system, but instead ksoftirqd starts using 100% CPU time, and the only way to stop that seems to be a reboot. I can confirm the very same behaviour using a bcm4306 on linux-2.6.18-rc4 with the bcm43xx patches queued for 2.6.19 applied; when a hard reset occurs ksoftirqd begins using 100% CPU indefinitely, and in one case the controller restart failed: NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: Controller restarted NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed Trying to free already-free IRQ 52 -- Emanuele Giaquinta ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Emanuele Giaquinta wrote: I can confirm the very same behaviour using a bcm4306 on linux-2.6.18-rc4 with the bcm43xx patches queued for 2.6.19 applied; when a hard reset occurs ksoftirqd begins using 100% CPU indefinitely, and in one case the controller restart failed: NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: Controller restarted NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed NETDEV WATCHDOG: eth1: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: IRQ_READY timeout bcm43xx: Controller restart failed Trying to free already-free IRQ 52 This sounds as if there may be a deadlock when a restart occurs. Do you have the lock debugging options set in your configuration? I used to get the NETDEV WATCHDOG timeouts, but the recent wireless-2.6 changes appear to have fixed them. Larry ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
On Friday 04 August 2006 01:31, Peter Osterlund wrote: Ivan Matveich [EMAIL PROTECTED] writes: [interface works fine for a few hours, then this spontaneously happens] [note: the computer does nothing but compile stuff, etc during this time] NETDEV WATCHDOG: wireless: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: select_wireless_core: cleanup bcm43xx: Radio turned off bcm43xx: DMA 0x0200 (RX) max used slots: 1/64 bcm43xx: DMA 0x0260 (TX) max used slots: 0/512 bcm43xx: DMA 0x0240 (TX) max used slots: 0/512 bcm43xx: DMA 0x0220 (TX) max used slots: 70/512 bcm43xx: DMA 0x0200 (TX) max used slots: 0/512 bcm43xx: Radio turned on bcm43xx: Chip initialized bcm43xx: DMA initialized bcm43xx: Keys cleared bcm43xx: Selected 802.11 core (phytype 2) bcm43xx: Controller restarted [now the interface stops working: pings no longer go through] I've seen this too and I also use a preemptable kernel. In my case the problem goes away if I increase BADNESS_LIMIT to 20 in bcm43xx_main.c. Therefore, my guess is that the new locking strategy isn't preempt-safe. (I haven't tested a non-preemptable kernel though.) That might be wrong guesswork. To verify: Does it also go away, if you stay away from BADNESS_LIMIT and disable preemption? To do that, you must disable CONFIG_PREEMPT and make the function bcm43xx_voluntary_preempt() in bcm43xx_phy.c a NOP (return early). -- Greetings Michael. ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de http://bat.berlios.de/mailman/listinfo/bcm43xx-dev
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Peter Osterlund [EMAIL PROTECTED] writes: Michael Buesch [EMAIL PROTECTED] writes: On Friday 04 August 2006 01:31, Peter Osterlund wrote: Ivan Matveich [EMAIL PROTECTED] writes: [interface works fine for a few hours, then this spontaneously happens] [note: the computer does nothing but compile stuff, etc during this time] NETDEV WATCHDOG: wireless: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: select_wireless_core: cleanup bcm43xx: Radio turned off bcm43xx: DMA 0x0200 (RX) max used slots: 1/64 bcm43xx: DMA 0x0260 (TX) max used slots: 0/512 bcm43xx: DMA 0x0240 (TX) max used slots: 0/512 bcm43xx: DMA 0x0220 (TX) max used slots: 70/512 bcm43xx: DMA 0x0200 (TX) max used slots: 0/512 bcm43xx: Radio turned on bcm43xx: Chip initialized bcm43xx: DMA initialized bcm43xx: Keys cleared bcm43xx: Selected 802.11 core (phytype 2) bcm43xx: Controller restarted [now the interface stops working: pings no longer go through] I've seen this too and I also use a preemptable kernel. In my case the problem goes away if I increase BADNESS_LIMIT to 20 in bcm43xx_main.c. Therefore, my guess is that the new locking strategy isn't preempt-safe. (I haven't tested a non-preemptable kernel though.) That might be wrong guesswork. ... To verify: Does it also go away, if you stay away from BADNESS_LIMIT and disable preemption? To do that, you must disable CONFIG_PREEMPT and make the function bcm43xx_voluntary_preempt() in bcm43xx_phy.c a NOP (return early). I just booted a linville wireless git tree kernel with these changes. Now I'll just have to wait a few hours to see what happens. This version also stopped working after about 2.5 hours of uptime. It doesn't lock up the system, but instead ksoftirqd starts using 100% CPU time, and the only way to stop that seems to be a reboot. I use wpa_supplicant. From /var/log/messages: Aug 5 02:24:23 r3000 kernel: bcm43xx: set security called, .enabled = 1, .encrypt = 1 Aug 5 03:31:49 r3000 kernel: bcm43xx: set security called, .enabled = 1, .encrypt = 1 Aug 5 03:31:49 r3000 kernel: NETDEV WATCHDOG: eth1: transmit timed out Aug 5 03:31:49 r3000 kernel: bcm43xx: Controller RESET (TX timeout) ... Aug 5 03:31:49 r3000 kernel: bcm43xx: select_wireless_core: cleanup Aug 5 03:31:49 r3000 kernel: bcm43xx: Radio turned off Aug 5 03:31:49 r3000 kernel: bcm43xx: DMA 0x0200 (RX) max used slots: 2/64 Aug 5 03:31:49 r3000 kernel: bcm43xx: DMA 0x0260 (TX) max used slots: 0/512 Aug 5 03:31:49 r3000 kernel: bcm43xx: DMA 0x0240 (TX) max used slots: 0/512 Aug 5 03:31:49 r3000 kernel: bcm43xx: DMA 0x0220 (TX) max used slots: 5/512 Aug 5 03:31:49 r3000 kernel: bcm43xx: DMA 0x0200 (TX) max used slots: 0/512 Aug 5 03:31:49 r3000 kernel: bcm43xx: Radio turned on Aug 5 03:31:49 r3000 kernel: bcm43xx: Chip initialized Aug 5 03:31:49 r3000 kernel: bcm43xx: DMA initialized Aug 5 03:31:49 r3000 kernel: bcm43xx: Keys cleared Aug 5 03:31:49 r3000 kernel: bcm43xx: Selected 802.11 core (phytype 2) Aug 5 03:31:49 r3000 kernel: bcm43xx: Controller restarted Aug 5 03:34:26 r3000 kernel: bcm43xx: Radio turned off Aug 5 03:34:26 r3000 kernel: bcm43xx: DMA 0x0200 (RX) max used slots: 0/64 Aug 5 03:34:26 r3000 kernel: bcm43xx: DMA 0x0260 (TX) max used slots: 0/512 Aug 5 03:34:26 r3000 kernel: bcm43xx: DMA 0x0240 (TX) max used slots: 0/512 Aug 5 03:34:26 r3000 kernel: bcm43xx: DMA 0x0220 (TX) max used slots: 13/512 Aug 5 03:34:26 r3000 kernel: bcm43xx: DMA 0x0200 (TX) max used slots: 0/512 Aug 5 03:34:26 r3000 avahi-daemon[3105]: Interface eth1.IPv4 no longer relevant for mDNS. Aug 5 03:34:26 r3000 avahi-daemon[3105]: Leaving mDNS multicast group on interface eth1.IPv4 with address 192.168.1.9. Aug 5 03:34:26 r3000 avahi-daemon[3105]: Withdrawing address record for 192.168.1.9 on eth1. Aug 5 03:34:27 r3000 nmbd[3063]: [2006/08/05 03:34:27, 0] libsmb/nmblib.c:send_udp(791) Aug 5 03:34:27 r3000 nmbd[3063]: Packet send failed to 192.168.1.255(137) ERRNO=Network is unreachable Aug 5 03:34:27 r3000 nmbd[3063]: [2006/08/05 03:34:27, 0] nmbd/nmbd_packets.c:retransmit_or_expire_response_records(1611) Aug 5 03:34:27 r3000 nmbd[3063]: retransmit_or_expire_response_records: Failed to resend packet id 23105 to IP 192.168.1.255 on subnet 192.168.1.9 Aug 5 03:34:28 r3000 nmbd[3063]: [2006/08/05 03:34:28, 0] libsmb/nmblib.c:send_udp(791) Aug 5 03:34:28 r3000 nmbd[3063]: Packet send failed to 192.168.1.255(137) ERRNO=Network is unreachable Aug 5 03:34:28 r3000 nmbd[3063]: [2006/08/05 03:34:28, 0] nmbd/nmbd_packets.c:send_netbios_packet(163) Aug 5 03:34:28 r3000 nmbd[3063]: send_netbios_packet: send_packet() to IP 192.168.1.255 port 137 failed Aug 5 03:34:28 r3000 nmbd[3063]: [2006/08/05 03:34:28, 0] nmbd/nmbd_nameregister.c:register_name(512) Aug 5 03:34:28 r3000 nmbd[3063]: register_name: Failed to send packet trying to register name
Re: wireless-2.6#bcm43xx: bcm43xx: Controller RESET (TX timeout) ...
Ivan Matveich [EMAIL PROTECTED] writes: [interface works fine for a few hours, then this spontaneously happens] [note: the computer does nothing but compile stuff, etc during this time] NETDEV WATCHDOG: wireless: transmit timed out bcm43xx: Controller RESET (TX timeout) ... bcm43xx: select_wireless_core: cleanup bcm43xx: Radio turned off bcm43xx: DMA 0x0200 (RX) max used slots: 1/64 bcm43xx: DMA 0x0260 (TX) max used slots: 0/512 bcm43xx: DMA 0x0240 (TX) max used slots: 0/512 bcm43xx: DMA 0x0220 (TX) max used slots: 70/512 bcm43xx: DMA 0x0200 (TX) max used slots: 0/512 bcm43xx: Radio turned on bcm43xx: Chip initialized bcm43xx: DMA initialized bcm43xx: Keys cleared bcm43xx: Selected 802.11 core (phytype 2) bcm43xx: Controller restarted [now the interface stops working: pings no longer go through] I've seen this too and I also use a preemptable kernel. In my case the problem goes away if I increase BADNESS_LIMIT to 20 in bcm43xx_main.c. Therefore, my guess is that the new locking strategy isn't preempt-safe. (I haven't tested a non-preemptable kernel though.) -- Peter Osterlund - [EMAIL PROTECTED] http://web.telia.com/~u89404340 ___ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de http://bat.berlios.de/mailman/listinfo/bcm43xx-dev