@@ -1715,8 +1715,8 @@ static void virt_cpu_post_init(VirtMachineState *vms)
assert(ARM_CPU(cpu)->has_spe == ON_OFF_AUTO_ON);
if (kvm_irqchip_in_kernel()) {
kvm_arm_spe_set_irq(cpu, PPI(VIRTUAL_SPE_IRQ));
- kvm_arm_spe_init(cpu);
}
+ kvm_arm_spe_init(cpu);
}
}
} else {
@@ -820,6 +820,11 @@ MemTxAttrs kvm_arch_post_run(CPUState *cs, struct kvm_run *run)
switched_level &= ~KVM_ARM_DEV_PMU;
}
+ if (switched_level & KVM_ARM_DEV_SPE) {
+ qemu_set_irq(cpu->spe_interrupt,
+ !!(run->s.regs.device_irq_level & KVM_ARM_DEV_SPE));
+ switched_level &= ~KVM_ARM_DEV_SPE;
+ }
if (switched_level) {
qemu_log_mask(LOG_UNIMP, "%s: unhandled in-kernel device IRQ %x\n",
__func__, switched_level);