On Thu, Sep 10, 2009 at 11:40:53PM +0400, Anton Vorontsov wrote: > On Thu, Sep 10, 2009 at 01:04:32PM -0500, Scott Wood wrote: > > Anton Vorontsov wrote: > > >MPC8360 QE UCC ethernet controllers hang when changing link duplex > > >under a load (a bit of NFS activity is enough). > > > > > > PHY: m...@e0102120:00 - Link is Up - 1000/Full > > > sh-3.00# ethtool -s eth0 speed 100 duplex half autoneg off > > > PHY: m...@e0102120:00 - Link is Down > > > PHY: m...@e0102120:00 - Link is Up - 100/Half > > > NETDEV WATCHDOG: eth0 (ucc_geth): transmit queue 0 timed out > > > ------------[ cut here ]------------ > > > Badness at c01fcbd0 [verbose debug info unavailable] > > > NIP: c01fcbd0 LR: c01fcbd0 CTR: c0194e44 > > > ... > > > > > >The cure is to disable the controller before changing speed/duplex > > >and enable it afterwards. > > > > > >Since ugeth_graceful_stop_{tx,rx} now may be called from an atomic > > >context, switch the two functions from msleep() to mdelay(). > > > > Ouch. > > Yeah, right... delaying for 10ms with irqs off isn't good. > > > Can we put this in a workqueue or something? > > adjust_link() itself isn't called from an atomic context.
Oops. I though that phylib calls us from a workqueue, not a timer. Hm... Will be a little bit more work.. -- Anton Vorontsov email: cbouatmai...@gmail.com irc://irc.freenode.net/bd2 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev