diff options
| -rw-r--r-- | kapi/include/kapi/devices/bus.hpp | 1 | ||||
| -rw-r--r-- | kernel/kapi/devices/bus.cpp | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/kapi/include/kapi/devices/bus.hpp b/kapi/include/kapi/devices/bus.hpp index 7b2d41f..60134ff 100644 --- a/kapi/include/kapi/devices/bus.hpp +++ b/kapi/include/kapi/devices/bus.hpp @@ -52,6 +52,7 @@ namespace kapi::devices private: kstd::vector<kstd::unique_ptr<device>> m_devices; kstd::vector<kstd::observer_ptr<device>> m_observers; + std::atomic_flag m_init_was_called{}; std::atomic_flag m_initialized{}; }; diff --git a/kernel/kapi/devices/bus.cpp b/kernel/kapi/devices/bus.cpp index 68874c4..66b84d2 100644 --- a/kernel/kapi/devices/bus.cpp +++ b/kernel/kapi/devices/bus.cpp @@ -20,20 +20,26 @@ namespace kapi::devices auto bus::init() -> bool { - if (m_initialized.test_and_set()) + if (m_init_was_called.test_and_set()) { + kstd::println(kstd::print_sink::stderr, "[OS:DEV] Bus {}:{}:{} already initialized", name(), major(), minor()); return true; } if (!probe()) { + kstd::println(kstd::print_sink::stderr, "[OS:DEV] Bus {}:{}:{} probe failed", name(), major(), minor()); return false; } - return std::ranges::fold_left(m_devices, true, [&](bool acc, auto & child) -> bool { + auto child_status = std::ranges::fold_left(m_devices, true, [&](bool acc, auto & child) -> bool { kstd::println("[OS:DEV] Initializing child device {}@{}", child->name(), name()); return child->init() && acc; }); + + m_initialized.test_and_set(); + + return child_status; } auto bus::add_child(kstd::unique_ptr<device> child) -> void |
