Skip to content
Snippets Groups Projects
Commit 49febb43 authored by Daniel Ehlers's avatar Daniel Ehlers
Browse files

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.
parent 10519660
No related branches found
No related tags found
No related merge requests found
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))
* * * * * /usr/sbin/ath9k-workaround
#!/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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment