Commit 91efa462 authored by Stefan Richter's avatar Stefan Richter

ieee1394: fix host device registering when nodemgr disabled

Since my commit 8252bbb1 in 2.6.20-rc1,
host devices have a dummy driver attached.  Alas the driver was not
registered before use if ieee1394 was loaded with disable_nodemgr=1.

This resulted in non-functional FireWire drivers or kernel lockup.
http://bugzilla.kernel.org/show_bug.cgi?id=7942Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent a5782010
...@@ -258,7 +258,6 @@ static struct device_driver nodemgr_mid_layer_driver = { ...@@ -258,7 +258,6 @@ static struct device_driver nodemgr_mid_layer_driver = {
struct device nodemgr_dev_template_host = { struct device nodemgr_dev_template_host = {
.bus = &ieee1394_bus_type, .bus = &ieee1394_bus_type,
.release = nodemgr_release_host, .release = nodemgr_release_host,
.driver = &nodemgr_mid_layer_driver,
}; };
...@@ -1850,22 +1849,31 @@ int init_ieee1394_nodemgr(void) ...@@ -1850,22 +1849,31 @@ int init_ieee1394_nodemgr(void)
error = class_register(&nodemgr_ne_class); error = class_register(&nodemgr_ne_class);
if (error) if (error)
return error; goto fail_ne;
error = class_register(&nodemgr_ud_class); error = class_register(&nodemgr_ud_class);
if (error) { if (error)
class_unregister(&nodemgr_ne_class); goto fail_ud;
return error;
}
error = driver_register(&nodemgr_mid_layer_driver); error = driver_register(&nodemgr_mid_layer_driver);
if (error)
goto fail_ml;
/* This driver is not used if nodemgr is off (disable_nodemgr=1). */
nodemgr_dev_template_host.driver = &nodemgr_mid_layer_driver;
hpsb_register_highlevel(&nodemgr_highlevel); hpsb_register_highlevel(&nodemgr_highlevel);
return 0; return 0;
fail_ml:
class_unregister(&nodemgr_ud_class);
fail_ud:
class_unregister(&nodemgr_ne_class);
fail_ne:
return error;
} }
void cleanup_ieee1394_nodemgr(void) void cleanup_ieee1394_nodemgr(void)
{ {
hpsb_unregister_highlevel(&nodemgr_highlevel); hpsb_unregister_highlevel(&nodemgr_highlevel);
driver_unregister(&nodemgr_mid_layer_driver);
class_unregister(&nodemgr_ud_class); class_unregister(&nodemgr_ud_class);
class_unregister(&nodemgr_ne_class); class_unregister(&nodemgr_ne_class);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment