Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/vmm/io/vioapic.c
Show First 20 Lines • Show All 358 Lines • ▼ Show 20 Lines | if (changed & ~(IOART_INTMASK | IOART_INTPOL)) { | ||||
(void)vm_smp_rendezvous(vioapic->vm, vcpuid, allvcpus, | (void)vm_smp_rendezvous(vioapic->vm, vcpuid, allvcpus, | ||||
vioapic_update_tmr, NULL); | vioapic_update_tmr, NULL); | ||||
VIOAPIC_LOCK(vioapic); | VIOAPIC_LOCK(vioapic); | ||||
} | } | ||||
/* | /* | ||||
* Generate an interrupt if the following conditions are met: | * Generate an interrupt if the following conditions are met: | ||||
* - previous interrupt has been EOIed | * - previous interrupt has been EOIed | ||||
* - pin trigger mode is level | |||||
* - pin level is asserted | * - pin level is asserted | ||||
*/ | */ | ||||
if ((vioapic->rtbl[pin].reg & IOART_REM_IRR) == 0 && | if ((vioapic->rtbl[pin].reg & IOART_REM_IRR) == 0 && | ||||
(vioapic->rtbl[pin].reg & IOART_TRGRMOD) == IOART_TRGRLVL && | |||||
(vioapic->rtbl[pin].acnt > 0)) { | (vioapic->rtbl[pin].acnt > 0)) { | ||||
VIOAPIC_CTR2(vioapic, "ioapic pin%d: asserted at rtbl " | VIOAPIC_CTR2(vioapic, "ioapic pin%d: asserted at rtbl " | ||||
"write, acnt %d", pin, vioapic->rtbl[pin].acnt); | "write, acnt %d", pin, vioapic->rtbl[pin].acnt); | ||||
vioapic_send_intr(vioapic, pin); | vioapic_send_intr(vioapic, pin); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 144 Lines • Show Last 20 Lines |