Messages in this thread |  | | | Date | Tue, 3 Jul 2012 21:40:47 +0200 | | From | Andi Kleen <> | | Subject | Re: long boot delays caused by 070ad7e7 floppy change |
| |
On Tue, Jul 03, 2012 at 12:12:53PM -0700, Linus Torvalds wrote: > 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?
Yes I do.
> > 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?
That works. Patch cuts it down to 3s as before
Tested-by: Andi Kleen <ak@linux.intel.com>
(and with the async probe patch I posted earlier the kernel boot time goes down by ~1s from 14 to 13ish)
-Andi
With Linus patch:
[ 2.492449] calling floppy_init+0x0/0xe46 @ 1 [ 2.507259] floppy0: lock_fdc: -1 (out of 8) [ 2.507304] floppy0: __reschedule_timeout: setting timeout to 750 [ 2.507330] floppy0: reschedule timeout lock fdc [ 5.509642] floppy0: reschedule timeout do wakeup [ 5.509683] floppy0: no floppy controllers found [ 5.509796] initcall floppy_init+0x0/0xe46 returned -19 after 2952148 usecs [ 5.509826] calling brd_init+0x0/0x1ce @ 1
|  |