Re: watchdog timeout panic in e1000 driver
From: Kenzo Iwami <hidden>
Date: 2006-12-04 09:14:49
Hi,
quoted
Doesn't this just mean that we need a spinlock or some other kind of semaphore around acquiring, using, and releasing this resource? We keep going around and around about this but I'm pretty sure spinlocks are meant to be able to solve exactly this issue. The problem is going to get considerably more nasty if we need to hold a spinlock with interrupts disabled for a significant amount of time, at which point a semaphore of some kind with a spinlock around it would seem to be more useful.Even if spin_lock() was used to protect this resource, it is still possible for an interrupt to kick in and call e1000_watchdog. In this case, e1000_get_software_semaphore() will be called from within the interrupt handler and the problem will still occur. In order to solve this problem, interrupt should be disabled (for example, spin_lock_irqsave). The interrupt handler can't run while the process is holding this resource, and this problem doesn't occur.quoted
I'll work with Auke to see if we can come up with another try.Do you have any updates about your test code?
Does the fix I previously proposed have problems? If it does, I'd like to help find investigate another fix to solve this problem. -- Kenzo Iwami (k-iwami@cj.jp.nec.com)