fix(kernel): 🐛 interrupt handler was broken for PCI

This commit is contained in:
EnderIce2 2025-05-28 00:43:21 +00:00
parent 814175ddaf
commit 13ce994edf
Signed by: enderice2
GPG Key ID: FEB6B8A8507BA62E

View File

@ -423,11 +423,10 @@ namespace Interrupts
{ {
for (auto ev : RegisteredEvents) for (auto ev : RegisteredEvents)
{ {
if (ev.IRQ == InterruptNumber) if (ev.IRQ != InterruptNumber)
{ continue;
warn("IRQ%d is already registered.",
InterruptNumber); warn("IRQ%d is already registered.", InterruptNumber);
}
} }
this->InterruptNumber = InterruptNumber; this->InterruptNumber = InterruptNumber;
@ -441,15 +440,12 @@ namespace Interrupts
0, /* Priority */ 0, /* Priority */
Critical}; /* Critical */ Critical}; /* Critical */
RegisteredEvents.push_back(newEvent); RegisteredEvents.push_back(newEvent);
debug("Registered interrupt handler for IRQ%d.", debug("Registered interrupt handler for IRQ%d.", InterruptNumber);
InterruptNumber);
} }
Handler::Handler(PCI::PCIDevice Device, bool Critical) Handler::Handler(PCI::PCIDevice Device, bool Critical)
: Handler(((PCI::PCIHeader0 *)Device.Header)->InterruptLine, Critical)
{ {
PCI::PCIHeader0 *hdr0 =
(PCI::PCIHeader0 *)Device.Header;
Handler(hdr0->InterruptLine, Critical);
} }
Handler::Handler() Handler::Handler()
@ -459,17 +455,15 @@ namespace Interrupts
Handler::~Handler() Handler::~Handler()
{ {
debug("Unregistering interrupt handler for IRQ%d.", debug("Unregistering interrupt handler for IRQ%d.", this->InterruptNumber);
this->InterruptNumber);
forItr(itr, RegisteredEvents) forItr(itr, RegisteredEvents)
{ {
if (itr->IRQ == this->InterruptNumber) if (itr->IRQ != this->InterruptNumber)
{ continue;
RegisteredEvents.erase(itr); RegisteredEvents.erase(itr);
return; return;
} }
}
warn("Event %d not found.", this->InterruptNumber); warn("Event %d not found.", this->InterruptNumber);
} }