On Wednesday 11 February 2009, Narnakaje, Snehaprabha wrote:
>
> We were trying to see why we need this additional dm9000 specific
> disable/enable interrupts in the xmit function. It seems like dm9000
> ethernet controller being used on other boards does not require this.

I suddenly started seeing these watchdog issues recently ...
after I disabled lockdep in Kconfig, so I could measure
something without its performance impact.  These timeouts
would trigger with simple SCP or SSH commands, which used
to work fine before lockdep got disabled.

First thought:  lockdep forces IRQF_DISABLED on, which has
been known to create bugs in some drivers ... or hide them.

And sure enough, the dm9000 IRQ handler should be using
spin_lock_irqsave(), not spin_lock(), since request_irq()
doesn't pass IRQF_DISABLED.  That flavor bug is something
lockdep has hidden for years in some other drivers.  (I've
sent that bugfix on to netdev.)


Yet ... that bugfix alone was not enough to make these
watchdog messages go away.  If I rolled in a version of
your patch (keeping the TX locking) it worked again.
Mostly.  Sometimes the driver just stopped responding
entirely...

This suggests a few potential reasons why not everyone
sees these timeouts:

 - It might be a timing issue ... lockdep slows down
   spin_lock() and friends.  EMIF may be set up wrong.
   Lots of platforms have bus timing setup issues.

 - This might be an issue with the dm9000a (vs b or e)
   chips.  Not all boards use the A version.

 - The IRQ handler has similar "disable irqs at the
   chip" logic, with no comments about why ... maybe
   a lot more places in this driver need to protect
   against some TBS bug(s).

At any rate ... I'm back to running with lockdep enabled.

- Dave


_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to