From 5eed6de91091c8bf658b7900a57b157ab2dbfe4e Mon Sep 17 00:00:00 2001 From: Reto Buerki Date: Tue, 12 May 2015 22:20:19 +0200 Subject: [PATCH] hw_x86_64: Let _edge_triggered() operate on IRQ Use the base IRQ in the _edge_triggered() utility function, not the remapped vector. --- repos/base-hw/src/core/include/spec/x86/pic.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/repos/base-hw/src/core/include/spec/x86/pic.h b/repos/base-hw/src/core/include/spec/x86/pic.h index 755076665..2e69c5189 100644 --- a/repos/base-hw/src/core/include/spec/x86/pic.h +++ b/repos/base-hw/src/core/include/spec/x86/pic.h @@ -83,8 +83,7 @@ class Genode::Ioapic : public Mmio */ bool _edge_triggered(unsigned const irq) { - return irq <= REMAP_BASE + Board::ISA_IRQ_END || - irq > REMAP_BASE + IRTE_COUNT; + return irq <= Board::ISA_IRQ_END || irq > IRTE_COUNT; } public: @@ -104,6 +103,8 @@ class Genode::Ioapic : public Mmio /* Set/unset mask bit of IRTE for given vector */ void toggle_mask(unsigned const vector, bool const set) { + const unsigned irq = vector - REMAP_BASE; + /* * Only mask existing RTEs and do *not* mask edge-triggered * interrupts to avoid losing them while masked, see Intel @@ -112,9 +113,9 @@ class Genode::Ioapic : public Mmio * flag and edge-triggered interrupts or: * http://yarchive.net/comp/linux/edge_triggered_interrupts.html */ - if (_edge_triggered(vector) && set) { return; } + if (_edge_triggered(irq) && set) { return; } - write(IOREDTBL + (2 * (vector - REMAP_BASE))); + write(IOREDTBL + (2 * irq)); Irte::access_t irte = read(); Irte::Mask::set(irte, set); write(irte);