diff options
| author | Patrick Mochel <mochel@osdl.org> | 2003-03-25 03:14:01 -0600 |
|---|---|---|
| committer | Patrick Mochel <mochel@osdl.org> | 2003-03-25 03:14:01 -0600 |
| commit | f7bb3f9b74e8f045ff8d33d4a0c2363360d4c6a4 (patch) | |
| tree | 280afb9ca2bafa17b0347744c8534a40775d558b /drivers | |
| parent | ec451dbbac134cf7a179a69e9c96bc5f10d5805e (diff) | |
driver model: Fix error handling in sysfs registration
From Matt Dobson:
The cpu, memblk, and node driver/device registration should be a little
more clean in the way it handles registration failures. Or at least
*consistent* amongst the topology elements. Right now, failures are
either silent, obscure, or leave things in an inconsistent state.
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/base/cpu.c | 7 | ||||
| -rw-r--r-- | drivers/base/memblk.c | 9 | ||||
| -rw-r--r-- | drivers/base/node.c | 9 |
3 files changed, 17 insertions, 8 deletions
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index f815ef26e8e7..30e7ab67e358 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c @@ -48,6 +48,9 @@ int __init register_cpu(struct cpu *cpu, int num, struct node *root) int __init cpu_dev_init(void) { - devclass_register(&cpu_devclass); - return driver_register(&cpu_driver); + int error; + if (!(error = devclass_register(&cpu_devclass))) + if (error = driver_register(&cpu_driver)) + devclass_unregister(&cpu_devclass); + return error; } diff --git a/drivers/base/memblk.c b/drivers/base/memblk.c index a8f27d612fc4..350078bd30b0 100644 --- a/drivers/base/memblk.c +++ b/drivers/base/memblk.c @@ -47,9 +47,12 @@ int __init register_memblk(struct memblk *memblk, int num, struct node *root) } -static int __init register_memblk_type(void) +int __init register_memblk_type(void) { - int error = devclass_register(&memblk_devclass); - return error ? error : driver_register(&memblk_driver); + int error; + if (!(error = devclass_register(&memblk_devclass))) + if (error = driver_register(&memblk_driver)) + devclass_unregister(&memblk_devclass); + return error; } postcore_initcall(register_memblk_type); diff --git a/drivers/base/node.c b/drivers/base/node.c index 261bf881da60..cfcf117018dc 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -89,9 +89,12 @@ int __init register_node(struct node *node, int num, struct node *parent) } -static int __init register_node_type(void) +int __init register_node_type(void) { - int error = devclass_register(&node_devclass); - return error ? error : driver_register(&node_driver); + int error; + if (!(error = devclass_register(&node_devclass))) + if (error = driver_register(&node_driver)) + devclass_unregister(&node_devclass); + return error; } postcore_initcall(register_node_type); |
