aboutsummaryrefslogtreecommitdiffstats
path: root/net/iucv/iucv.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/iucv/iucv.c')
-rw-r--r--net/iucv/iucv.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
index d764f4c1b7e4..918970762131 100644
--- a/net/iucv/iucv.c
+++ b/net/iucv/iucv.c
@@ -795,7 +795,6 @@ int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler,
795 union iucv_param *parm; 795 union iucv_param *parm;
796 int rc; 796 int rc;
797 797
798 BUG_ON(in_atomic());
799 spin_lock_bh(&iucv_table_lock); 798 spin_lock_bh(&iucv_table_lock);
800 iucv_cleanup_queue(); 799 iucv_cleanup_queue();
801 parm = iucv_param[smp_processor_id()]; 800 parm = iucv_param[smp_processor_id()];
@@ -1609,13 +1608,10 @@ static int __init iucv_init(void)
1609 rc = register_external_interrupt(0x4000, iucv_external_interrupt); 1608 rc = register_external_interrupt(0x4000, iucv_external_interrupt);
1610 if (rc) 1609 if (rc)
1611 goto out; 1610 goto out;
1612 rc = bus_register(&iucv_bus);
1613 if (rc)
1614 goto out_int;
1615 iucv_root = s390_root_dev_register("iucv"); 1611 iucv_root = s390_root_dev_register("iucv");
1616 if (IS_ERR(iucv_root)) { 1612 if (IS_ERR(iucv_root)) {
1617 rc = PTR_ERR(iucv_root); 1613 rc = PTR_ERR(iucv_root);
1618 goto out_bus; 1614 goto out_int;
1619 } 1615 }
1620 1616
1621 for_each_online_cpu(cpu) { 1617 for_each_online_cpu(cpu) {
@@ -1635,13 +1631,20 @@ static int __init iucv_init(void)
1635 goto out_free; 1631 goto out_free;
1636 } 1632 }
1637 } 1633 }
1638 register_hotcpu_notifier(&iucv_cpu_notifier); 1634 rc = register_hotcpu_notifier(&iucv_cpu_notifier);
1635 if (rc)
1636 goto out_free;
1639 ASCEBC(iucv_error_no_listener, 16); 1637 ASCEBC(iucv_error_no_listener, 16);
1640 ASCEBC(iucv_error_no_memory, 16); 1638 ASCEBC(iucv_error_no_memory, 16);
1641 ASCEBC(iucv_error_pathid, 16); 1639 ASCEBC(iucv_error_pathid, 16);
1642 iucv_available = 1; 1640 iucv_available = 1;
1641 rc = bus_register(&iucv_bus);
1642 if (rc)
1643 goto out_cpu;
1643 return 0; 1644 return 0;
1644 1645
1646out_cpu:
1647 unregister_hotcpu_notifier(&iucv_cpu_notifier);
1645out_free: 1648out_free:
1646 for_each_possible_cpu(cpu) { 1649 for_each_possible_cpu(cpu) {
1647 kfree(iucv_param[cpu]); 1650 kfree(iucv_param[cpu]);
@@ -1650,8 +1653,6 @@ out_free:
1650 iucv_irq_data[cpu] = NULL; 1653 iucv_irq_data[cpu] = NULL;
1651 } 1654 }
1652 s390_root_dev_unregister(iucv_root); 1655 s390_root_dev_unregister(iucv_root);
1653out_bus:
1654 bus_unregister(&iucv_bus);
1655out_int: 1656out_int:
1656 unregister_external_interrupt(0x4000, iucv_external_interrupt); 1657 unregister_external_interrupt(0x4000, iucv_external_interrupt);
1657out: 1658out: