Messages in this thread | | | Date | Wed, 16 May 2012 22:44:31 +0200 (CEST) | From | Jiri Kosina <> | 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
| |