Re: long boot delays caused by 070ad7e7 floppy change

From: Andi Kleen
Date: Tue Jul 03 2012 - 15:42:30 EST


On Tue, Jul 03, 2012 at 03:36:40PM -0400, Calvin Walton wrote:
> On Tue, 2012-07-03 at 12:12 -0700, Linus Torvalds wrote:
> > 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?
>
> Yes, it does...
> [ 0.718571] floppy0: reschedule timeout lock fdc
> [ 1.650956] Refined TSC clocksource calibration: 2698.760 MHz.
> [ 1.651109] Switching to clocksource tsc
> [ 3.724664] floppy0: reschedule timeout do wakeup
> [ 3.724815] floppy0: no floppy controllers found
>
> diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
> index cce7df3..c8064e4 100644
> --- a/drivers/block/floppy.c
> +++ b/drivers/block/floppy.c
> @@ -678,6 +678,8 @@ static void __reschedule_timeout(int drive, const char *message)
> } else
> delay = UDP->timeout;
>
> + cancel_delayed_work(&fd_timeout);
> +
> queue_delayed_work(floppy_wq, &fd_timeout, delay);
> if (UDP->flags & FD_DEBUG)
> DPRINT("reschedule timeout %s\n", message);
>
> Of course, a 3 second delay at this point in boot is still a fairly big
> bit of waiting, given how fast everything else is nowadays.

Here's the patch I did for that yesterday