aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx/files
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-07-04 01:31:33 +0000
committerFelix Fietkau <nbd@openwrt.org>2010-07-04 01:31:33 +0000
commitd7965cb88259a852583953db920692727261458f (patch)
tree33c15dcefd9ad39cf7955e2c1de6e775bc800e59 /target/linux/ar71xx/files
parent2f0e4377bd1640856fc4178de219da2f3658767d (diff)
downloadupstream-d7965cb88259a852583953db920692727261458f.tar.gz
upstream-d7965cb88259a852583953db920692727261458f.tar.bz2
upstream-d7965cb88259a852583953db920692727261458f.zip
ag71xx: fix a memory corruption bug that happens if you flood the interface with packets while it's being brought down
fixes boot time crashes under load reported by matteo git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22054 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx/files')
-rw-r--r--target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c
index a57b6d46fc..9fd41527dd 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c
@@ -454,6 +454,12 @@ static void ag71xx_dma_reset(struct ag71xx *ag)
ag71xx_wr(ag, AG71XX_REG_RX_CTRL, 0);
ag71xx_wr(ag, AG71XX_REG_TX_CTRL, 0);
+ /*
+ * give the hardware some time to really stop all rx/tx activity
+ * clearing the descriptors too early causes random memory corruption
+ */
+ mdelay(1);
+
/* clear descriptor addresses */
ag71xx_wr(ag, AG71XX_REG_TX_DESC, 0);
ag71xx_wr(ag, AG71XX_REG_RX_DESC, 0);