On Tue, 5 Dec 2006 10:07:21 -0800 (PST) Linus Torvalds <[EMAIL PROTECTED]> wrote:
> > > On Tue, 5 Dec 2006, Maciej W. Rozycki wrote: > > > > One way of avoiding it is calling flush_scheduled_work() from > > phy_stop_interrupts(). This is fine as long as a caller of > > phy_stop_interrupts() (not necessarily the immediate one calling into > > libphy) does not hold the netlink lock. > > > > If a caller indeed holds the netlink lock, then a driver effectively > > calling phy_stop_interrupts() may arrange for the function to be itself > > scheduled through the event queue. This has the effect of avoiding the > > race as well, as the queue is processed in order, except it causes more > > hassle for the driver. > > I would personally be ok with "flush_scheduled_work()" _itself_ noticing > that it is actually waiting to flush "itself", and just being a no-op in > that case. It does do that: static void flush_cpu_workqueue(struct cpu_workqueue_struct *cwq) { if (cwq->thread == current) { /* * Probably keventd trying to flush its own queue. So simply run * it by hand rather than deadlocking. */ run_workqueue(cwq); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/