diff --git a/src/system/kernel/device_manager/device_manager.cpp b/src/system/kernel/device_manager/device_manager.cpp index 4dfeb4485b..09e36a46e3 100644 --- a/src/system/kernel/device_manager/device_manager.cpp +++ b/src/system/kernel/device_manager/device_manager.cpp @@ -1317,15 +1317,12 @@ device_node::Register(device_node* parent) // We don't uninitialize the driver - this is done by the caller // in order to save reinitializing during driver loading. - uint32 registered; - status = _RegisterFixed(registered); + uint32 registeredFixedCount; + status = _RegisterFixed(registeredFixedCount); if (status != B_OK) { UninitUnusedDriver(); return status; } - if (registered > 0) { - fRegistered = true; - } // Register the children the driver wants @@ -1342,6 +1339,13 @@ device_node::Register(device_node* parent) } } + if (registeredFixedCount > 0) { + // Nodes with fixed children cannot have any dynamic children, so bail + // out here + fRegistered = true; + return B_OK; + } + // Register all possible child device nodes status = _RegisterDynamic();