diff options
author | Liav A <liavalb@gmail.com> | 2020-03-21 09:45:39 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-03-24 16:15:33 +0100 |
commit | 8d9b6c57b52d569c18701a61bf05fdc10f83d6a7 (patch) | |
tree | f7e428134c89b3c657ad8f0176513971c1654bdc /Kernel/Interrupts | |
parent | 0b7fc525e143fbe282466c0ca12360321854088e (diff) | |
download | serenity-8d9b6c57b52d569c18701a61bf05fdc10f83d6a7.zip |
Interrupts: Use Optional container in IOAPIC
We return the Optional container in find_redirection_entry_by_vector()
method instead of a raw integer. This makes the code more readable and
correct.
Diffstat (limited to 'Kernel/Interrupts')
-rw-r--r-- | Kernel/Interrupts/IOAPIC.cpp | 25 | ||||
-rw-r--r-- | Kernel/Interrupts/IOAPIC.h | 2 |
2 files changed, 14 insertions, 13 deletions
diff --git a/Kernel/Interrupts/IOAPIC.cpp b/Kernel/Interrupts/IOAPIC.cpp index e10509be78..bd7f1eb4eb 100644 --- a/Kernel/Interrupts/IOAPIC.cpp +++ b/Kernel/Interrupts/IOAPIC.cpp @@ -24,6 +24,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include <AK/Optional.h> #include <AK/StringView.h> #include <Kernel/ACPI/MultiProcessorParser.h> #include <Kernel/Arch/i386/CPU.h> @@ -251,14 +252,14 @@ u8 IOAPIC::read_redirection_entry_vector(u8 index) const return (read_register((index << 1) + IOAPIC_REDIRECTION_ENTRY_OFFSET) & 0xFF); } -int IOAPIC::find_redirection_entry_by_vector(u8 vector) const +Optional<int> IOAPIC::find_redirection_entry_by_vector(u8 vector) const { InterruptDisabler disabler; for (size_t index = 0; index < m_redirection_entries_count; index++) { if (read_redirection_entry_vector(index) == (InterruptManagement::acquire_mapped_interrupt_number(vector) + IRQ_VECTOR_BASE)) return index; } - return -1; + return {}; } void IOAPIC::disable(const GenericInterruptHandler& handler) @@ -267,13 +268,13 @@ void IOAPIC::disable(const GenericInterruptHandler& handler) ASSERT(!is_hard_disabled()); u8 interrupt_vector = handler.interrupt_number(); ASSERT(interrupt_vector >= gsi_base() && interrupt_vector < interrupt_vectors_count()); - int index = find_redirection_entry_by_vector(interrupt_vector); - if (index == (-1)) { + auto found_index = find_redirection_entry_by_vector(interrupt_vector); + if (!found_index.has_value()) { map_interrupt_redirection(interrupt_vector); - index = find_redirection_entry_by_vector(interrupt_vector); + found_index = find_redirection_entry_by_vector(interrupt_vector); } - ASSERT(index != (-1)); - mask_redirection_entry(index); + ASSERT(found_index.has_value()); + mask_redirection_entry(found_index.value()); } void IOAPIC::enable(const GenericInterruptHandler& handler) @@ -282,13 +283,13 @@ void IOAPIC::enable(const GenericInterruptHandler& handler) ASSERT(!is_hard_disabled()); u8 interrupt_vector = handler.interrupt_number(); ASSERT(interrupt_vector >= gsi_base() && interrupt_vector < interrupt_vectors_count()); - int index = find_redirection_entry_by_vector(interrupt_vector); - if (index == (-1)) { + auto found_index = find_redirection_entry_by_vector(interrupt_vector); + if (!found_index.has_value()) { map_interrupt_redirection(interrupt_vector); - index = find_redirection_entry_by_vector(interrupt_vector); + found_index = find_redirection_entry_by_vector(interrupt_vector); } - ASSERT(index != (-1)); - unmask_redirection_entry(index); + ASSERT(found_index.has_value()); + unmask_redirection_entry(found_index.value()); } void IOAPIC::eoi(const GenericInterruptHandler& handler) const diff --git a/Kernel/Interrupts/IOAPIC.h b/Kernel/Interrupts/IOAPIC.h index 9786d85146..713e28b9e0 100644 --- a/Kernel/Interrupts/IOAPIC.h +++ b/Kernel/Interrupts/IOAPIC.h @@ -68,7 +68,7 @@ private: bool is_redirection_entry_masked(u8 index) const; u8 read_redirection_entry_vector(u8 index) const; - int find_redirection_entry_by_vector(u8 vector) const; + Optional<int> find_redirection_entry_by_vector(u8 vector) const; void configure_redirections() const; void write_register(u32 index, u32 value) const; |