[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LNX.2.00.1205162234150.8796@pobox.suse.cz>
Date: Wed, 16 May 2012 22:44:31 +0200 (CEST)
From: Jiri Kosina <jkosina@...e.cz>
To: Tejun Heo <tj@...nel.org>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
Stephen Hemminger <shemminger@...tta.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Jens Axboe <axboe@...nel.dk>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] floppy: convert to delayed work and single-thread wq
On Wed, 16 May 2012, Tejun Heo wrote:
> > In floppy_grab_irq_and_dma() the point is to drain the workqueue
> > completely (before the conversion, we were just using
> > flush_work_sync(&floppy_work) for particular work item), and for that
> > flush_work() is not sufficient any more.
> >
> > So I am really considering going back to driver-specific singlethreaded
> > workqueue.
>
> Ummm... still confused. flush_work_sync() is fine too. If you have
> two, two calls to flush_work_sync() are equivalent to flushing the
> workqueue in effect. You just need to avoid flush_workqueue() because
> system workqueues may be hosting work items which can run arbitrarily
> long.
Before the conversion, we do
flush_work_sync(&floppy_work);
in floppy_grab_irq_and_dma(). After the conversion, the single-threaded
workqueue is used to queue more than just floppy_work, and we want all
this to be flushed before proceeding, so neither flush_work() nor
flush_work_sync() is enough, as there might be floppy_work, fd_timer or
fd_timeout queued. This all has to be flushed.
If this still doesn't seem to make sense, I'll get back to it tomorrow, it
might be just too late and my brain cells might already be dreaming.
--
Jiri Kosina
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists