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