diff options
-rw-r--r-- | sys/amd64/amd64/local_apic.c | 6 | ||||
-rw-r--r-- | sys/i386/i386/local_apic.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/sys/amd64/amd64/local_apic.c b/sys/amd64/amd64/local_apic.c index 40cf1cb..d3905e8 100644 --- a/sys/amd64/amd64/local_apic.c +++ b/sys/amd64/amd64/local_apic.c @@ -950,11 +950,15 @@ apic_free_vector(u_int apic_id, u_int vector, u_int irq) u_int apic_idt_to_irq(u_int apic_id, u_int vector) { + int irq; KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && vector <= APIC_IO_INTS + APIC_NUM_IOINTS, ("Vector %u does not map to an IRQ line", vector)); - return (lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]); + irq = lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]; + if (irq < 0) + irq = 0; + return (irq); } #ifdef DDB diff --git a/sys/i386/i386/local_apic.c b/sys/i386/i386/local_apic.c index 571edc4..82e2c30 100644 --- a/sys/i386/i386/local_apic.c +++ b/sys/i386/i386/local_apic.c @@ -954,11 +954,15 @@ apic_free_vector(u_int apic_id, u_int vector, u_int irq) u_int apic_idt_to_irq(u_int apic_id, u_int vector) { + int irq; KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && vector <= APIC_IO_INTS + APIC_NUM_IOINTS, ("Vector %u does not map to an IRQ line", vector)); - return (lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]); + irq = lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]; + if (irq < 0) + irq = 0; + return (irq); } #ifdef DDB |