Skip to content

Commit

Permalink
iucv: Delay bus registration until core is ready.
Browse files Browse the repository at this point in the history
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: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Cornelia Huck authored and David S. Miller committed Apr 10, 2008
1 parent 9284d6c commit 2d7bf36
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions net/iucv/iucv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1608,13 +1608,10 @@ static int __init iucv_init(void)
rc = register_external_interrupt(0x4000, iucv_external_interrupt);
if (rc)
goto out;
rc = bus_register(&iucv_bus);
if (rc)
goto out_int;
iucv_root = s390_root_dev_register("iucv");
if (IS_ERR(iucv_root)) {
rc = PTR_ERR(iucv_root);
goto out_bus;
goto out_int;
}

for_each_online_cpu(cpu) {
Expand All @@ -1634,13 +1631,20 @@ static int __init iucv_init(void)
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_memory, 16);
ASCEBC(iucv_error_pathid, 16);
iucv_available = 1;
rc = bus_register(&iucv_bus);
if (rc)
goto out_cpu;
return 0;

out_cpu:
unregister_hotcpu_notifier(&iucv_cpu_notifier);
out_free:
for_each_possible_cpu(cpu) {
kfree(iucv_param[cpu]);
Expand All @@ -1649,8 +1653,6 @@ static int __init iucv_init(void)
iucv_irq_data[cpu] = NULL;
}
s390_root_dev_unregister(iucv_root);
out_bus:
bus_unregister(&iucv_bus);
out_int:
unregister_external_interrupt(0x4000, iucv_external_interrupt);
out:
Expand Down

0 comments on commit 2d7bf36

Please sign in to comment.