[S390] hvc_iucv: Refactor console and device initialization
The console_initcall() order might pick up the hvc_iucv device as preferred console even if it is not yet initialized. Move HVC console instantiation to hvc_iucv_init() and cleanup device driver initialization. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Родитель
17e19f04ac
Коммит
68c6b3d2c6
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/ebcdic.h>
|
#include <asm/ebcdic.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/init.h>
|
||||||
#include <linux/mempool.h>
|
#include <linux/mempool.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
|
@ -898,6 +899,13 @@ static int __init hvc_iucv_init(void)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* register the first terminal device as console
|
||||||
|
* (must be done before allocating hvc terminal devices) */
|
||||||
|
rc = hvc_instantiate(HVC_IUCV_MAGIC, 0, &hvc_iucv_ops);
|
||||||
|
if (rc)
|
||||||
|
pr_warning("Registering HVC terminal device as "
|
||||||
|
"Linux console failed\n");
|
||||||
|
|
||||||
/* allocate hvc_iucv_private structs */
|
/* allocate hvc_iucv_private structs */
|
||||||
for (i = 0; i < hvc_iucv_devices; i++) {
|
for (i = 0; i < hvc_iucv_devices; i++) {
|
||||||
rc = hvc_iucv_alloc(i);
|
rc = hvc_iucv_alloc(i);
|
||||||
|
@ -932,16 +940,6 @@ out_error_hvc:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* hvc_iucv_console_init() - Early console initialization
|
|
||||||
*/
|
|
||||||
static int __init hvc_iucv_console_init(void)
|
|
||||||
{
|
|
||||||
if (!MACHINE_IS_VM || !hvc_iucv_devices)
|
|
||||||
return -ENODEV;
|
|
||||||
return hvc_instantiate(HVC_IUCV_MAGIC, 0, &hvc_iucv_ops);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hvc_iucv_config() - Parsing of hvc_iucv= kernel command line parameter
|
* hvc_iucv_config() - Parsing of hvc_iucv= kernel command line parameter
|
||||||
* @val: Parameter value (numeric)
|
* @val: Parameter value (numeric)
|
||||||
|
@ -952,10 +950,5 @@ static int __init hvc_iucv_config(char *val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module_init(hvc_iucv_init);
|
device_initcall(hvc_iucv_init);
|
||||||
console_initcall(hvc_iucv_console_init);
|
|
||||||
__setup("hvc_iucv=", hvc_iucv_config);
|
__setup("hvc_iucv=", hvc_iucv_config);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_DESCRIPTION("HVC back-end for z/VM IUCV.");
|
|
||||||
MODULE_AUTHOR("Hendrik Brueckner <brueckner@linux.vnet.ibm.com>");
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче