Commit 0cc15d03 authored by Andi Kleen's avatar Andi Kleen Committed by Jiri Kosina

floppy: Run floppy initialization asynchronous

floppy_init is quite slow, 3s on my test system to determine
that there is no floppy. Run it asynchronous to the other
init calls to improve boot time.

[jkosina@suse.cz: fix modular build]
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent a70f35af
...@@ -191,6 +191,7 @@ static int print_unex = 1; ...@@ -191,6 +191,7 @@ static int print_unex = 1;
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/async.h>
/* /*
* PS/2 floppies have much slower step rates than regular floppies. * PS/2 floppies have much slower step rates than regular floppies.
...@@ -4122,7 +4123,7 @@ static struct kobject *floppy_find(dev_t dev, int *part, void *data) ...@@ -4122,7 +4123,7 @@ static struct kobject *floppy_find(dev_t dev, int *part, void *data)
return get_disk(disks[drive]); return get_disk(disks[drive]);
} }
static int __init floppy_init(void) static int __init do_floppy_init(void)
{ {
int i, unit, drive; int i, unit, drive;
int err, dr; int err, dr;
...@@ -4337,6 +4338,24 @@ static int __init floppy_init(void) ...@@ -4337,6 +4338,24 @@ static int __init floppy_init(void)
return err; return err;
} }
#ifndef MODULE
static __init void floppy_async_init(void *data, async_cookie_t cookie)
{
do_floppy_init();
}
#endif
static int __init floppy_init(void)
{
#ifdef MODULE
return do_floppy_init();
#else
/* Don't hold up the bootup by the floppy initialization */
async_schedule(floppy_async_init, NULL);
return 0;
#endif
}
static const struct io_region { static const struct io_region {
int offset; int offset;
int size; int size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment