Commit 707228e7b9 for qemu.org

commit 707228e7b975d4a2d0833adb59263bdb1a69bce6
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Mon Sep 14 10:14:15 2026 +0800

    hw/intc/loongarch_dintc: Check irqchip in kernel mode firstly

    when inject MSI interrupt, check irqchip in kernel mode at first and
    then check validity of MSI message in TCG mode, since irqchip in kernel
    is used at most popular.

    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Reviewed-by:   Song Gao <17746591750@163.com>

diff --git a/hw/intc/loongarch_dintc.c b/hw/intc/loongarch_dintc.c
index 1bedfbce43..674f5d1357 100644
--- a/hw/intc/loongarch_dintc.c
+++ b/hw/intc/loongarch_dintc.c
@@ -72,6 +72,15 @@ static void loongarch_dintc_mem_write(void *opaque, hwaddr addr,
     DINTCCore *core;
     CPUState *cs;

+    if (kvm_irqchip_in_kernel()) {
+        MSIMessage msg;
+
+        msg.address = msg_addr;
+        msg.data = val;
+        kvm_irqchip_send_msi(kvm_state, msg);
+        return;
+    }
+
     arch_id = FIELD_EX64(msg_addr, MSG_ADDR, CPU_NUM);
     core = loongarch_dintc_cpu_by_arch_id(s, arch_id);
     if (!core || !core->cpu) {
@@ -83,16 +92,6 @@ static void loongarch_dintc_mem_write(void *opaque, hwaddr addr,
     cpu_num = core - s->cpu;
     cs = core->cpu;
     irq_num = FIELD_EX64(msg_addr, MSG_ADDR, IRQ_NUM);
-
-    if (kvm_irqchip_in_kernel()) {
-        MSIMessage msg;
-
-        msg.address = msg_addr;
-        msg.data = val;
-        kvm_irqchip_send_msi(kvm_state, msg);
-        return;
-    }
-
     async_run_on_cpu(cs, do_set_vcpu_dintc_irq,
                          RUN_ON_CPU_HOST_INT(irq_num));
     qemu_set_irq(s->cpu[cpu_num].parent_irq, 1);