summaryrefslogtreecommitdiff
path: root/net/iucv/iucv.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-18 18:02:35 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-18 18:02:35 -0700
commit334d094504c2fe1c44211ecb49146ae6bca8c321 (patch)
treed3c0f68e4b9f8e3d2ccc39e7dfe5de0534a5fad9 /net/iucv/iucv.c
parentd1a4be630fb068f251d64b62919f143c49ca8057 (diff)
parentd1643d24c61b725bef399cc1cf2944b4c9c23177 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26: (1090 commits) [NET]: Fix and allocate less memory for ->priv'less netdevices [IPV6]: Fix dangling references on error in fib6_add(). [NETLABEL]: Fix NULL deref in netlbl_unlabel_staticlist_gen() if ifindex not found [PKT_SCHED]: Fix datalen check in tcf_simp_init(). [INET]: Uninline the __inet_inherit_port call. [INET]: Drop the inet_inherit_port() call. SCTP: Initialize partial_bytes_acked to 0, when all of the data is acked. [netdrvr] forcedeth: internal simplifications; changelog removal phylib: factor out get_phy_id from within get_phy_device PHY: add BCM5464 support to broadcom PHY driver cxgb3: Fix __must_check warning with dev_dbg. tc35815: Statistics cleanup natsemi: fix MMIO for PPC 44x platforms [TIPC]: Cleanup of TIPC reference table code [TIPC]: Optimized initialization of TIPC reference table [TIPC]: Remove inlining of reference table locking routines e1000: convert uint16_t style integers to u16 ixgb: convert uint16_t style integers to u16 sb1000.c: make const arrays static sb1000.c: stop inlining largish static functions ...
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,
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: