aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-15 15:31:02 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-15 15:31:02 +0200
commitda1fac36310716f45029f4f1f0bac4d54c9e0e54 (patch)
tree0fd8784167dd1bfcfb03a439c9039a3907581c6b
parent8a647acda62a1a86386d6ce0d8ccfa5902899634 (diff)
downloadkernel-da1fac36310716f45029f4f1f0bac4d54c9e0e54.tar.xz
kernel-da1fac36310716f45029f4f1f0bac4d54c9e0e54.zip
kernel: unify major number counter
-rw-r--r--kernel/kapi/devices.cpp2
-rw-r--r--kernel/kernel/devices/storage/management.cpp22
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