diff options
Diffstat (limited to 'kernel/kapi')
| -rw-r--r-- | kernel/kapi/devices/facet_registry.cpp | 8 | ||||
| -rw-r--r-- | kernel/kapi/interrupts.cpp | 11 | ||||
| -rw-r--r-- | kernel/kapi/memory.cpp | 8 |
3 files changed, 14 insertions, 13 deletions
diff --git a/kernel/kapi/devices/facet_registry.cpp b/kernel/kapi/devices/facet_registry.cpp index f2f5d03b..a988a6a4 100644 --- a/kernel/kapi/devices/facet_registry.cpp +++ b/kernel/kapi/devices/facet_registry.cpp @@ -79,7 +79,7 @@ namespace kapi::devices auto facet_registry::do_notify_published(kapi::capabilities::facet_id id, entry const & published) -> void { auto observers = kstd::vector<kstd::weak_ptr<facet_registry_observer>>{}; - auto static_observers = kstd::vector<facet_registry_observer *>{}; + auto static_observers = kstd::vector<kstd::observer_ptr<facet_registry_observer>>{}; { auto guard = kstd::lock_guard{m_lock}; observers = m_observers; @@ -99,7 +99,7 @@ namespace kapi::devices auto facet_registry::do_notify_withdrawn(kapi::capabilities::facet_id id, device const & device) -> void { auto observers = kstd::vector<kstd::weak_ptr<facet_registry_observer>>{}; - auto static_observers = kstd::vector<facet_registry_observer *>{}; + auto static_observers = kstd::vector<kstd::observer_ptr<facet_registry_observer>>{}; { auto guard = kstd::lock_guard{m_lock}; observers = m_observers; @@ -227,7 +227,7 @@ namespace kapi::devices { auto guard = kstd::lock_guard{m_lock}; - m_static_observers.push_back(&observer); + m_static_observers.push_back(kstd::make_observer(&observer)); } auto facet_registry::unsubscribe(facet_registry_observer & observer) -> void @@ -235,7 +235,7 @@ namespace kapi::devices auto guard = kstd::lock_guard{m_lock}; erase_if(m_observers, [&](auto const & subscribed) { return subscribed.lock().get() == &observer; }); - erase(m_static_observers, &observer); + erase(m_static_observers, kstd::make_observer(&observer)); } } // namespace kapi::devices diff --git a/kernel/kapi/interrupts.cpp b/kernel/kapi/interrupts.cpp index c5925058..a1bcba93 100644 --- a/kernel/kapi/interrupts.cpp +++ b/kernel/kapi/interrupts.cpp @@ -14,7 +14,8 @@ namespace kapi::interrupts namespace { - auto constinit handlers = kstd::flat_map<std::uint32_t, kstd::vector<std::pair<handler *, kstd::weak_ptr<void>>>>{}; + auto constinit handlers = + kstd::flat_map<std::uint32_t, kstd::vector<std::pair<kstd::observer_ptr<handler>, kstd::weak_ptr<void>>>>{}; } // namespace auto register_handler(std::uint32_t irq_number, handler & handler, kstd::weak_ptr<void> context) -> void @@ -22,12 +23,12 @@ namespace kapi::interrupts if (handlers.contains(irq_number)) { auto & handler_list = handlers.at(irq_number); - handler_list.push_back(std::pair{&handler, context}); + handler_list.push_back(std::pair{kstd::make_observer(&handler), context}); } else { handlers.emplace(irq_number, kstd::vector{ - std::pair{&handler, context} + std::pair{kstd::make_observer(&handler), context} }); } } @@ -35,8 +36,8 @@ namespace kapi::interrupts auto unregister_handler(std::uint32_t irq_number, handler & handler) -> void { auto & handler_list = handlers.at(irq_number); - auto [first, last] = - std::ranges::remove_if(handler_list, [&](auto const & entry) { return entry.first == &handler; }); + auto [first, last] = std::ranges::remove_if( + handler_list, [&](auto const & entry) { return entry.first == kstd::make_observer(&handler); }); handler_list.erase(first, last); } diff --git a/kernel/kapi/memory.cpp b/kernel/kapi/memory.cpp index 7a9f7249..666910ba 100644 --- a/kernel/kapi/memory.cpp +++ b/kernel/kapi/memory.cpp @@ -128,7 +128,7 @@ namespace kapi::memory } auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only | page_mapper::flags::global; - auto bitmap_ptr = static_cast<std::uint64_t *>(nullptr); + auto bitmap_ptr = kstd::observer_ptr<std::uint64_t>{nullptr}; std::ranges::for_each(std::views::iota(0uz, bitmap_pages), [&](auto index) { auto page = page::containing(pmm_metadata_base + index * page::size); @@ -136,12 +136,12 @@ namespace kapi::memory auto mapped = active_page_mapper->map(page, frame, flags); if (!bitmap_ptr) { - bitmap_ptr = reinterpret_cast<std::uint64_t *>(mapped.get()); + bitmap_ptr = reinterpret_pointer_cast<std::uint64_t>(mapped); } }); - auto bitmap = - std::span{bitmap_ptr, (bitmap_bytes + kstd::size_of<std::uint64_t>() - 1_B) / kstd::size_of<std::uint64_t>()}; + auto bitmap = std::span{bitmap_ptr.get(), + (bitmap_bytes + kstd::size_of<std::uint64_t>() - 1_B) / kstd::size_of<std::uint64_t>()}; allocator.emplace(bitmap, frame_count); |
