diff options
Diffstat (limited to 'net/iucv/iucv.c')
-rw-r--r-- | net/iucv/iucv.c | 17 |
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 | ||
1646 | out_cpu: | ||
1647 | unregister_hotcpu_notifier(&iucv_cpu_notifier); | ||
1645 | out_free: | 1648 | out_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); |
1653 | out_bus: | ||
1654 | bus_unregister(&iucv_bus); | ||
1655 | out_int: | 1656 | out_int: |
1656 | unregister_external_interrupt(0x4000, iucv_external_interrupt); | 1657 | unregister_external_interrupt(0x4000, iucv_external_interrupt); |
1657 | out: | 1658 | out: |