]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/iucv/iucv.c
Security: Make secctx_to_secid() take const secdata
[linux-2.6-omap-h63xx.git] / net / iucv / iucv.c
index d764f4c1b7e4eac68962e3bb95b37df2d57ece97..91897076213158bbad89db5f8cacc1b2b49acc74 100644 (file)
@@ -795,7 +795,6 @@ int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler,
        union iucv_param *parm;
        int rc;
 
-       BUG_ON(in_atomic());
        spin_lock_bh(&iucv_table_lock);
        iucv_cleanup_queue();
        parm = iucv_param[smp_processor_id()];
@@ -1609,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) {
@@ -1635,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]);
@@ -1650,8 +1653,6 @@ out_free:
                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: