From d27891c79f20a29205a2fd0930beabcdc00835ed Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 18 Jul 2025 19:08:24 +0300 Subject: [PATCH] Kernel: Fix correct IOAPIC lookup based on gsi --- kernel/kernel/APIC.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/APIC.cpp b/kernel/kernel/APIC.cpp index 8c5a6ce9..f13f59f7 100644 --- a/kernel/kernel/APIC.cpp +++ b/kernel/kernel/APIC.cpp @@ -470,7 +470,7 @@ namespace Kernel IOAPIC* ioapic = nullptr; for (IOAPIC& io : m_io_apics) { - if (io.gsi_base <= gsi && gsi <= io.gsi_base + io.max_redirs) + if (io.gsi_base <= gsi && gsi < io.gsi_base + io.max_redirs) { ioapic = &io; break; @@ -512,7 +512,7 @@ namespace Kernel bool found_ioapic = false; for (const auto& io : m_io_apics) { - if (io.gsi_base <= gsi && gsi <= io.gsi_base + io.max_redirs) + if (io.gsi_base <= gsi && gsi < io.gsi_base + io.max_redirs) { found_ioapic = true; break; @@ -529,7 +529,7 @@ namespace Kernel int bit = gsi % 8; if (m_reserved_gsis[byte] & (1 << bit)) { - dwarnln("GSI {} is already reserved", gsi); + dwarnln("GSI {} is already reserved (IRQ {})", gsi, irq); return BAN::Error::from_errno(EFAULT); } m_reserved_gsis[byte] |= 1 << bit; @@ -566,7 +566,7 @@ namespace Kernel IOAPIC* ioapic = nullptr; for (IOAPIC& io : m_io_apics) { - if (io.gsi_base <= gsi && gsi <= io.gsi_base + io.max_redirs) + if (io.gsi_base <= gsi && gsi < io.gsi_base + io.max_redirs) { ioapic = &io; break;