From da1fac36310716f45029f4f1f0bac4d54c9e0e54 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 15 Jul 2026 15:31:02 +0200 Subject: kernel: unify major number counter --- kernel/kapi/devices.cpp | 2 +- kernel/kernel/devices/storage/management.cpp | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) (limited to 'kernel') diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp index 577a8898..de4bf9e5 100644 --- a/kernel/kapi/devices.cpp +++ b/kernel/kapi/devices.cpp @@ -47,7 +47,7 @@ namespace kapi::devices auto allocate_major_number() -> std::size_t { - return next_major_number++; + return next_major_number.fetch_add(1, std::memory_order::relaxed); } auto register_device(device & device) -> bool diff --git a/kernel/kernel/devices/storage/management.cpp b/kernel/kernel/devices/storage/management.cpp index 90c3696f..ed524d45 100644 --- a/kernel/kernel/devices/storage/management.cpp +++ b/kernel/kernel/devices/storage/management.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -18,8 +19,6 @@ namespace { constexpr size_t static minors_per_device = 16; - constexpr size_t static start_major = 1; - constinit size_t static next_free_major = start_major; constinit auto static storage_management = std::optional{}; } // namespace @@ -52,7 +51,7 @@ namespace kernel::devices::storage auto management::add_controller(kstd::shared_ptr const & controller) -> void { - controller->set_ids(next_free_major++, minors_per_device); + controller->set_ids(kapi::devices::allocate_major_number(), minors_per_device); m_controllers.push_back(controller); } @@ -81,7 +80,21 @@ namespace kernel::devices::storage auto management::determine_boot_device() -> kstd::shared_ptr { - return device_by_major_minor(start_major, 0); + // TODO: This is a placeholder implementation. In the future, more sophisticated boot device detection/selection + // must be implemented. + + if (m_controllers.empty()) + { + return nullptr; + } + + auto devices_on_first_controller = m_controllers[0]->all_devices(); + if (devices_on_first_controller.empty()) + { + return nullptr; + } + + return devices_on_first_controller[0]; } } // namespace kernel::devices::storage @@ -90,6 +103,5 @@ namespace kernel::tests::devices::storage::management auto deinit() -> void { storage_management.reset(); - next_free_major = start_major; } } // namespace kernel::tests::devices::storage::management -- cgit v1.2.3