Summary: | bridge0 causes kernel panic on BBB using usb wifi in hostap mode (RT3071) | ||||||
---|---|---|---|---|---|---|---|
Product: | Base System | Reporter: | Russell Haley <russ.haley> | ||||
Component: | kern | Assignee: | freebsd-net (Nobody) <net> | ||||
Status: | New --- | ||||||
Severity: | Affects Only Me | ||||||
Priority: | --- | ||||||
Version: | CURRENT | ||||||
Hardware: | arm | ||||||
OS: | Any | ||||||
Attachments: |
|
Description
Russell Haley
2017-08-27 06:46:27 UTC
Original post on freebsd-arm@ that spurred my investigation. Complete conversation here: http://freebsd.1045724.x6.nabble.com/Beaglebone-Black-FreeBSD-USB-WiFi-WAP-td6201439.html Is anyone using a BeagleBone Black and USB Wifi as a WAP? If so, what kind of throughput do you get on your Wifi? I’m getting very bad network performance. Hardware: - BeagleBone Black rev C. - Tried with two different USB Wifi Adapters: - Edimax N150 (small nub type adapter) - LB Link from Adafruit (https://www.adafruit.com/product/1030) - Both show as RTL8188CUS chips (via dmesg) - Wired connection connected for access to my network and internet OS: - Mostly with the most recent Beaglebone Snapshot of 11.0 - A few quick tests with the 11. snapshot image Connection Speeds: - Using nuttcp (over 100Mbps ethernet) between the BB and another machine, I can get ~90+ Mbps in each direction so I don’t think there is an issue with that part of the connection. - Using the BB as a WAP and connection my iPad I see 1 to 5 Mbps down and < 1 Mbps tested via the Ookla Speedtest app. - Connecting to my ancient Netgear WAP using the same app and test, I get roughly 10 Mbps in either direction with the same test. Configs (pretty much taken right from the handbook): /boot/loader.conf: if_urtwn_load="YES" wlan_mac_load="YES" /etc/rc.conf (relevant parts) ifconfig_cpsw0="inet XX.XX.XX.XX netmask 0xffffff00” defaultrouter=“YY.YY.YY.YY" hostapd_enable="YES" wlans_urtwn0="wlan0" create_args_wlan0="wlanmode hostap" ifconfig_wlan0="up" cloned_interfaces="bridge0" ifconfig_bridge0="addm cpsw0 addm wlan0 up” /etc/hostapd.conf interface=wlan0 debug=1 ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel ssid=REDACTED wpa=2 wpa_passphrase=REDACTED wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP Any ideas? Is this just the limit of USB wifi on this board? I've been digging into the code for if_bridge.c, which is found under sys/net. bridge_broadcast only has one call to m_dup on line 2553. mc = m_dup(m, M_NOWAIT); if (mc == NULL) { if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1); continue; } This is just a guess: I'm wondering if the M_NOWAIT is causing the panic because... er... "someone has a sleep lock they shouldn't"? I don't really know what I'm talking about though (a little bit of knowledge...). I guess I'd have to try and correlate to some sort of lock begin held in the adapter specific code? I've been following the code through and wound up at sys/arm/ti/cpsw/if_cpsw.c. cpsw_intr_rx is defined on line 1554. The function uses a macro called CPSW_RX_LOCK which is defined on line 349. The macro contains an assert on a transmit lock (tx.lock). I theorise the statement on line 350 is causing my exception? I also wonder if the lock being held between lines 1561 and 1570 is causing the delay in the bridge interface that is causing the original posters' slow throughput. Is it necessary to hold the lock until after the cpsw_write_4 on line 1569 or could it be performed outside the lock? |