diff --git a/[refs] b/[refs] index 2161a6bc8c1f..b7f708d81e61 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9284d6c704b5cfc7f2eb44f81255b4762bcfe4c5 +refs/heads/master: 2d7bf36746b6329d9d54c6c6efe2b55666dd1f53 diff --git a/trunk/net/iucv/iucv.c b/trunk/net/iucv/iucv.c index a65e69eaea2f..918970762131 100644 --- a/trunk/net/iucv/iucv.c +++ b/trunk/net/iucv/iucv.c @@ -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) { @@ -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]); @@ -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: