void do_irq(arch_regs_t *regs) { vmm_scheduler_irq_enter(regs, FALSE); vmm_host_active_irq_exec(EXC_HYP_IRQ_SPx); vmm_scheduler_irq_exit(regs); }
void do_hyp_fiq(arch_regs_t *regs) { vmm_scheduler_irq_enter(regs, FALSE); vmm_host_active_irq_exec(CPU_EXTERNAL_FIQ); vmm_scheduler_irq_exit(regs); }
void do_handle_async(arch_regs_t *regs, unsigned long exc, unsigned long baddr) { vmm_scheduler_irq_enter(regs, FALSE); /* NOTE: Only exec <= 0xFFFFFFFFUL will be handled */ if (exc <= 0xFFFFFFFFUL) { vmm_host_active_irq_exec(exc); } vmm_scheduler_irq_exit(regs); }
void do_handle_irq(arch_regs_t *regs, unsigned long cause) { int rc = VMM_OK; vmm_scheduler_irq_enter(regs, FALSE); /* NOTE: Only exec <= 0xFFFFFFFFUL will be handled */ if (cause <= 0xFFFFFFFFUL) { rc = vmm_host_active_irq_exec(cause); } else { rc = VMM_EINVALID; } if (rc) { do_error(vmm_scheduler_current_vcpu(), regs, cause | SCAUSE_INTERRUPT_MASK, "interrupt handling failed", rc, TRUE); } vmm_scheduler_irq_exit(regs); }