diff --git a/Kernel/Interrupts/InterruptManagement.cpp b/Kernel/Interrupts/InterruptManagement.cpp index c4747bf873..c55cb54a7b 100644 --- a/Kernel/Interrupts/InterruptManagement.cpp +++ b/Kernel/Interrupts/InterruptManagement.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -49,6 +50,10 @@ void InterruptManagement::enumerate_interrupt_handlers(Function(handler).enumerate_handlers(callback); + continue; + } if (handler.type() != HandlerType::UnhandledInterruptHandler) callback(handler); } diff --git a/Kernel/Interrupts/SharedIRQHandler.cpp b/Kernel/Interrupts/SharedIRQHandler.cpp index 652f0608df..8f2235fceb 100644 --- a/Kernel/Interrupts/SharedIRQHandler.cpp +++ b/Kernel/Interrupts/SharedIRQHandler.cpp @@ -42,6 +42,14 @@ bool SharedIRQHandler::eoi() return true; } +void SharedIRQHandler::enumerate_handlers(Function& callback) +{ + for (auto* handler : m_handlers) { + VERIFY(handler); + callback(*handler); + } +} + SharedIRQHandler::SharedIRQHandler(u8 irq) : GenericInterruptHandler(irq) , m_responsible_irq_controller(InterruptManagement::the().get_responsible_irq_controller(irq)) diff --git a/Kernel/Interrupts/SharedIRQHandler.h b/Kernel/Interrupts/SharedIRQHandler.h index bb68075656..86272a1623 100644 --- a/Kernel/Interrupts/SharedIRQHandler.h +++ b/Kernel/Interrupts/SharedIRQHandler.h @@ -26,6 +26,8 @@ public: virtual bool eoi() override; + void enumerate_handlers(Function&); + virtual size_t sharing_devices_count() const override { return m_handlers.size(); } virtual bool is_shared_handler() const override { return true; } virtual bool is_sharing_with_others() const override { return false; }