Messages in this thread | | | From | Linus Torvalds <> | Date | Tue, 3 Jul 2012 12:12:53 -0700 | Subject | Re: long boot delays caused by 070ad7e7 floppy change |
| |
On Tue, Jul 3, 2012 at 11:58 AM, Andi Kleen <andi@firstfloor.org> wrote: > > [ 2.496493] calling floppy_init+0x0/0xe46 @ 1 > [ 2.511303] floppy0: lock_fdc: -1 (out of 8) > [ 2.511346] floppy0: __reschedule_timeout: setting timeout to 750
Ahhah. And you have CONFIG_HZ250 set, don't you?
So it's actually asking for a 3-second timeout like it should.
> [ 2.511372] floppy0: reschedule timeout lock fdc > [ 22.501757] floppy0: reschedule timeout do wakeup
But that actual timeout is too damn reliably pretty much exactly 20s for it to be anything else.
I wonder if 'fd_timeout' had been previously queued already with the 20s timeout, and not canceled. So then the new queuing of a 3-second timeout doesn't actually do anything, because the WORK_STRUCT_PENDING_BIT is still set.
So maybe we're missing a cancel somewhere.
What happens if you add a
cancel_delayed_work(&fd_timeout);
to before the queue_delayed_work() in __reschedule_timeout()? Does that possibly make the delay really be 3 seconds?
Linus
| |