@samitouri / QOSamiQemu / commits / bedb5cb25e

hw/intc: riscv_aplic: Skip reset for KVM irqchip

The emulated APLIC state arrays are only allocated when QEMU handles the interrupt controller state itself. With KVM AIA/APLIC-IMSIC, the interrupt controller state is owned by the KVM in-kernel irqchip, so these emulated state arrays are not allocated. The APLIC reset handler still clears those arrays unconditionally. This makes qemu_system_reset(), which runs during machine creation, dereference NULL pointers with -machine virt,aia=aplic-imsic and KVM. Skip the emulated APLIC reset path when the interrupt controller is handled by KVM. The emulated path is unchanged for TCG and for configurations that use QEMU emulation. Fixes: 99bfcd329a ("hw/intc: riscv_aplic: Add reset API to APLIC") Reviewed-by: Nutty Liu <nutty.liu@hotmail.com> Signed-off-by: Qingwei Hu <qingwei.hu@bytedance.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260615131925.3019370-2-qingwei.hu@bytedance.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Qingwei Hu committed Jun 15, 2026 at 21:19 UTC bedb5cb25e3f7cc51a3be0472513cb100e4ba946
1 file changed +4
hw/intc/riscv_aplic.c
+4
@@ -910,6 +910,10 @@ static void riscv_aplic_reset_enter(Object *obj, ResetType type)
910 RISCVAPLICState *aplic = RISCV_APLIC(obj);
911 int i;
912
913 + if (!riscv_use_emulated_aplic(aplic->msimode)) {
914 + return;
915 + }
916 +
917 aplic->domaincfg = 0;
918 memset(aplic->sourcecfg, 0, sizeof(uint32_t) * aplic->num_irqs);
919 memset(aplic->target, 0, sizeof(uint32_t) * aplic->num_irqs);