summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPatrick Mochel <mochel@osdl.org>2003-03-25 03:14:01 -0600
committerPatrick Mochel <mochel@osdl.org>2003-03-25 03:14:01 -0600
commitf7bb3f9b74e8f045ff8d33d4a0c2363360d4c6a4 (patch)
tree280afb9ca2bafa17b0347744c8534a40775d558b /drivers
parentec451dbbac134cf7a179a69e9c96bc5f10d5805e (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.c7
-rw-r--r--drivers/base/memblk.c9
-rw-r--r--drivers/base/node.c9
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);