diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 556af5c6be7b0b5be766a48b34a0f74632549147..d165c238010fda2dd9c3929d63a5c140f5bf906d 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -864,6 +864,14 @@ static void virt_irq_init(LoongArchVirtMachineState *lvms) sysbus_mmio_get_region(SYS_BUS_DEVICE(ipi), 0)); memory_region_add_subregion(&lvms->system_iocsr, MAIL_SEND_ADDR, sysbus_mmio_get_region(SYS_BUS_DEVICE(ipi), 1)); + + for (cpu = 0; cpu < ms->smp.cpus; cpu++) { + cpu_state = qemu_get_cpu(cpu); + cpudev = DEVICE(cpu_state); + + /* connect ipi irq to cpu irq */ + qdev_connect_gpio_out(ipi, cpu, qdev_get_gpio_in(cpudev, IRQ_IPI)); + } } /* Add cpu interrupt-controller */ @@ -875,9 +883,6 @@ static void virt_irq_init(LoongArchVirtMachineState *lvms) lacpu = LOONGARCH_CPU(cpu_state); env = &(lacpu->env); env->address_space_iocsr = &lvms->as_iocsr; - - /* connect ipi irq to cpu irq */ - qdev_connect_gpio_out(ipi, cpu, qdev_get_gpio_in(cpudev, IRQ_IPI)); env->ipistate = ipi; } diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 213cf6a8ce61b2ee593cdc7d5cf3a2ed5da92deb..719d6c29892d7e1ec6affb1c6c66d7f31e9aa036 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -966,7 +966,6 @@ int kvm_arch_init(MachineState *ms, KVMState *s) if(!kvm_vm_check_attr(kvm_state, KVM_LOONGARCH_VM_HAVE_IRQCHIP, KVM_LOONGARCH_VM_HAVE_IRQCHIP)) { s->kernel_irqchip_allowed = false; } - s->kernel_irqchip_allowed = false; return 0; }