Commit 2d7bf367 authored by Cornelia Huck's avatar Cornelia Huck Committed by David S. Miller

iucv: Delay bus registration until core is ready.

If we register the iucv bus after the infrastructure is ready,
userspace can start relying on it when it receives the uevent
for the bus.
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarUrsula Braun <braunu@de.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9284d6c7
...@@ -1608,13 +1608,10 @@ static int __init iucv_init(void) ...@@ -1608,13 +1608,10 @@ static int __init iucv_init(void)
rc = register_external_interrupt(0x4000, iucv_external_interrupt); rc = register_external_interrupt(0x4000, iucv_external_interrupt);
if (rc) if (rc)
goto out; goto out;
rc = bus_register(&iucv_bus);
if (rc)
goto out_int;
iucv_root = s390_root_dev_register("iucv"); iucv_root = s390_root_dev_register("iucv");
if (IS_ERR(iucv_root)) { if (IS_ERR(iucv_root)) {
rc = PTR_ERR(iucv_root); rc = PTR_ERR(iucv_root);
goto out_bus; goto out_int;
} }
for_each_online_cpu(cpu) { for_each_online_cpu(cpu) {
...@@ -1634,13 +1631,20 @@ static int __init iucv_init(void) ...@@ -1634,13 +1631,20 @@ static int __init iucv_init(void)
goto out_free; goto out_free;
} }
} }
register_hotcpu_notifier(&iucv_cpu_notifier); rc = register_hotcpu_notifier(&iucv_cpu_notifier);
if (rc)
goto out_free;
ASCEBC(iucv_error_no_listener, 16); ASCEBC(iucv_error_no_listener, 16);
ASCEBC(iucv_error_no_memory, 16); ASCEBC(iucv_error_no_memory, 16);
ASCEBC(iucv_error_pathid, 16); ASCEBC(iucv_error_pathid, 16);
iucv_available = 1; iucv_available = 1;
rc = bus_register(&iucv_bus);
if (rc)
goto out_cpu;
return 0; return 0;
out_cpu:
unregister_hotcpu_notifier(&iucv_cpu_notifier);
out_free: out_free:
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
kfree(iucv_param[cpu]); kfree(iucv_param[cpu]);
...@@ -1649,8 +1653,6 @@ out_free: ...@@ -1649,8 +1653,6 @@ out_free:
iucv_irq_data[cpu] = NULL; iucv_irq_data[cpu] = NULL;
} }
s390_root_dev_unregister(iucv_root); s390_root_dev_unregister(iucv_root);
out_bus:
bus_unregister(&iucv_bus);
out_int: out_int:
unregister_external_interrupt(0x4000, iucv_external_interrupt); unregister_external_interrupt(0x4000, iucv_external_interrupt);
out: out:
......
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