gluon-ath9k-workaround: Workaround for the ath9k wifi bug.

Cron script which restarts wifi iff queues are marked stopped.
This script also outputs some debug information to nail
down the problem.
This commit is contained in:
Daniel Ehlers 2014-07-04 00:15:41 +02:00
parent 10519660ea
commit 49febb43e7
3 changed files with 97 additions and 0 deletions

View File

@ -0,0 +1,35 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=gluon-ath9k-workaround
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/gluon-ath9k-workaround
SECTION:=gluon
CATEGORY:=Gluon
TITLE:=ATH9K Workaround
DEPENDS:=+gluon-cron
endef
define Package/gluon-ath9k-workaround/description
Gluon community wifi mesh firmware framework: ath9k wifi bug workaround
endef
define Build/Prepare
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/gluon-ath9k-workaround/install
$(CP) ./files/* $(1)/
endef
$(eval $(call BuildPackage,gluon-ath9k-workaround))

View File

@ -0,0 +1 @@
* * * * * /usr/sbin/ath9k-workaround

View File

@ -0,0 +1,61 @@
#!/bin/sh
check_stopped_queue(){
local device=$1
grep -q -E 'stopped: 1$' "${device}/queues"
}
get_tx_pkts() {
local device=$1
grep 'TX-Pkts-All' "${device}/xmit" \
| sed -e 's/^TX-Pkts-All: *\([0-9]*\) .*$/\1/'
}
inc_fatal() {
local qs=$(cat /tmp/ath9k_workaround_trigger 2>/dev/null || echo 0)
expr ${qs} + 1 > /tmp/ath9k_workaround_trigger
}
check_ath9k_bug() {
local device=$1
check_stopped_queue $device && {
local tx_first=$(get_tx_pkts $device)
sleep 5
check_stopped_queue $device && {
local tx_second=$(get_tx_pkts $device)
test $tx_first == $tx_second && {
local hostname=$(uci get -q system.@system[0].hostname)
echo "Hostname: ${hostname}"
echo "------------ Trigger workaround: ${tx_first} -> ${tx_second} ----------------"
echo "Model:"
cat /tmp/sysinfo/model
echo "Release:"
cat /lib/gluon/release
echo "Uptime:"
uptime
echo "Batctl Neighbours:"
batctl o | grep wlan0-1
echo "Queues:"
cat $device/queues
echo "Reset:"
cat $device/reset
echo "------------ Interupts #1 ---------------------------------------------------"
cat $device/interrupt
sleep 10
echo "------------ Interupts #2 ---------------------------------------------------"
cat $device/interrupt
echo "Batctl Neighbours:"
batctl o | grep wlan0-1
#BE queue hangs
inc_fatal
wifi
exit 1;
}
}
}
}
for device in /sys/kernel/debug/ieee80211/phy*/ath9k ; do
check_ath9k_bug $device
done