Messages in this thread | | | Date | Sat, 7 Feb 2009 13:24:32 +0100 | From | Jarek Poplawski <> | Subject | Re: Soft lockup in sungem on Netra AC200 when switching interface up |
| |
David Miller wrote, On 02/07/2009 07:01 AM:
> From: Ilkka Virta <itvirta@iki.fi> > Date: Fri, 6 Feb 2009 13:29:02 +0200 > >> Looking at gem_do_start() and gem_open(), it seems that the only thing >> done while opening the device after the request_irq(), is a call to >> napi_enable(). >> >> I don't know what the ordering requirements are for the >> initialization, but I boldly tried to move the napi_enable() call >> inside gem_do_start() before the link state is checked and interrupts >> subsequently enabled, and it seems to work for me. Doesn't even break >> anything too obvious... >> >> Any ideas on how this really should be fixed? > > Actually your fix looks good, I'll apply this :-)
Alas it could be not enough. It seems this problem is caused by not serving interrupts if napi is disabled. This patch added napi_enable() on one path, but e.g. here:
static int gem_close(struct net_device *dev) { struct gem *gp = netdev_priv(dev);
mutex_lock(&gp->pm_mutex);
napi_disable(&gp->napi);
gp->opened = 0; if (!gp->asleep) gem_do_stop(dev, 0); ...
similar storm can happen if an interrupt is triggered just after napi_disable().
Jarek P.
| |