fix broken topology functions
PATCH 1/1 fix broken topology functions
Linus,
The register_(node|memblk)_driver functions are broken. Pat Mochel
recently updated sysfs to make sure that when you register a driver that it's associated devclass is already registered. The way node/memblk registration is done now is backwards and causes panic's on NUMA systems. Please apply this patch to fix it.
Cheers!
-Matt
drivers/base/memblk.c +2 -2
@@ -49,7 +49,7 @@static int __init register_memblk_type (void ) { -driver_register (&memblk_driver); -return devclass_register (&memblk_devclass); +devclass_register (&memblk_devclass); +return driver_register (&memblk_driver); }postcore_initcall (register_memblk_type);
drivers/base/node.c +2 -2
@@ -93,7 +93,7 @@static int __init register_node_type (void ) { -driver_register (&node_driver); -return devclass_register (&node_devclass); +devclass_register (&node_devclass); +return driver_register (&node_driver); }postcore_initcall (register_node_type);
Quoted 7 lines · Matthew Dobson
Linus,
The register_(node|memblk)_driver functions are broken. Pat Mochel
recently updated sysfs to make sure that when you register a driver that it's associated devclass is already registered. The way node/memblk registration is done now is backwards and causes panic's on NUMA systems. Please apply this patch to fix it.
Cheers!
That didn't check the return value of devclass_register():
Reorder devclass_register() and driver_register() so these things stop oopsing.
memblk.c | 4 ++-- node.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/base/memblk.c +2 -2
@@ -49,7 +49,7 @@ int __init register_memblk(struct memblkstatic 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);
drivers/base/node.c +2 -2
@@ -93,7 +93,7 @@ int __init register_node(struct node *nostatic int __init register_node_type (void ) { -driver_register (&node_driver); -return devclass_register (&node_devclass); +int error =devclass_register (&node_devclass); +return error ? error :driver_register (&node_driver); }postcore_initcall (register_node_type);
Quoted 8 lines · William Lee Irwin III
Quoted 4 lines · Matthew Dobson
Linus,
The register_(node|memblk)_driver functions are broken. Pat Mochel
recently updated sysfs to make sure that when you register a driver that it's associated devclass is already registered. The way node/memblk registration is done now is backwards and causes panic's on NUMA systems. Please apply this patch to fix it. Cheers!
Quoted 6 lines
That didn't check the return value of
devclass_register():Reorder
devclass_register()anddriver_register()so these things stop oopsing.
Even better. Thanks Bill!
Cheers!
-Matt
Quoted 33 lines
memblk.c | 4 ++-- node.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)diff -urpN
mm1-2.5.50/drivers/base/memblk.cmm1-2.5.50-1/drivers/base/memblk.cdrivers/base/memblk.c +2
-2@@ -49,7 +49,7 @@ int __init register_memblk(struct memblkstatic 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
mm1-2.5.50/drivers/base/node.cmm1-2.5.50-1/drivers/base/node.cdrivers/base/node.c +2
-2@@ -93,7 +93,7 @@ int __init register_node(struct node *nostatic int __init register_node_type (void ) { -driver_register (&node_driver); -return devclass_register (&node_devclass); +int error =devclass_register (&node_devclass); +return error ? error :driver_register (&node_driver); }postcore_initcall (register_node_type);