devclass_register() is required to be done before driver_register(), and both can return error codes; this fixes oopsen resulting from lack of error checking and/or incorrect ordering. diff -urpN linux-2.5.51-bk1/drivers/base/memblk.c wli-2.5.51-bk1-1/drivers/base/memblk.c --- linux-2.5.51-bk1/drivers/base/memblk.c 2002-12-09 18:46:26.000000000 -0800 +++ wli-2.5.51-bk1-1/drivers/base/memblk.c 2002-12-11 18:24:38.000000000 -0800 @@ -49,7 +49,7 @@ int __init register_memblk(struct memblk static int __init register_memblk_type(void) { - driver_register(&memblk_driver); - return devclass_register(&memblk_devclass); + int error = devclass_register(&memblk_devclass); + return error ? error : driver_register(&memblk_driver); } postcore_initcall(register_memblk_type); diff -urpN linux-2.5.51-bk1/drivers/base/node.c wli-2.5.51-bk1-1/drivers/base/node.c --- linux-2.5.51-bk1/drivers/base/node.c 2002-12-09 18:45:44.000000000 -0800 +++ wli-2.5.51-bk1-1/drivers/base/node.c 2002-12-11 18:24:38.000000000 -0800 @@ -93,7 +93,7 @@ int __init register_node(struct node *no static int __init register_node_type(void) { - devclass_register(&node_devclass); - return driver_register(&node_driver); + int error = devclass_register(&node_devclass); + return error ? error : driver_register(&node_driver); } postcore_initcall(register_node_type);