diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-15 15:31:02 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-15 15:31:02 +0200 |
| commit | da1fac36310716f45029f4f1f0bac4d54c9e0e54 (patch) | |
| tree | 0fd8784167dd1bfcfb03a439c9039a3907581c6b | |
| parent | 8a647acda62a1a86386d6ce0d8ccfa5902899634 (diff) | |
| download | kernel-da1fac36310716f45029f4f1f0bac4d54c9e0e54.tar.xz kernel-da1fac36310716f45029f4f1f0bac4d54c9e0e54.zip | |
kernel: unify major number counter
| -rw-r--r-- | kernel/kapi/devices.cpp | 2 | ||||
| -rw-r--r-- | kernel/kernel/devices/storage/management.cpp | 22 |
2 files changed, 18 insertions, 6 deletions
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 <kernel/devices/storage/ram_disk/controller.hpp> #include <kapi/boot_modules.hpp> +#include <kapi/devices.hpp> #include <kapi/devices/device.hpp> #include <kapi/system.hpp> @@ -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<kernel::devices::storage::management>{}; } // namespace @@ -52,7 +51,7 @@ namespace kernel::devices::storage auto management::add_controller(kstd::shared_ptr<controller> 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<kapi::devices::device> { - 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 |
