From nobody Fri Apr 3 22:25:11 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linux.microsoft.com ARC-Seal: i=1; a=rsa-sha256; t=1774274362; cv=none; d=zohomail.com; s=zohoarc; b=TSzrjeD3RcSIN3rRz3aQOqJHvBcdWHJ5SqV7mysE5F/weY02LBul+tbTCi+UIvVVKl5yTm5r49vrV7i8Yr0IZU2BnBcIPWK3A84upghI6xuSyO1KeVZyhy0fAsHkOEMzuTj3OQIQ20rBjMZ/yGnhdBqj4B37NY24sG9wH3Tllo0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774274362; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZUck8KRzAIHOJZRjiz7XUC9sA5Upd2lSR/QGThC5/Zk=; b=ep603/7QEAh9TPPVA+eEDFAq5wRPKp7uiNq6fIOzV+9rpu01kkPUfnnrW5X+3+OPdQpa96379UWSddP3TKdqdifWsRyUz4nwYZq1fL3eFlRnrIILOlaTy43Xac2DUGGWsH4HlYZyym676KgJ+K7uGOf4+exLklDzIwtNiE3llWI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1774274362275922.2615658783573; Mon, 23 Mar 2026 06:59:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4fnm-0007yf-6K; Mon, 23 Mar 2026 09:58:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4fnk-0007wA-GC for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:58:40 -0400 Received: from linux.microsoft.com ([13.77.154.182]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4fni-0006nH-NY for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:58:40 -0400 Received: from DESKTOP-TUU1E5L.localdomain (unknown [167.220.208.76]) by linux.microsoft.com (Postfix) with ESMTPSA id AA6F320B7135; Mon, 23 Mar 2026 06:58:34 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com AA6F320B7135 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1774274317; bh=ZUck8KRzAIHOJZRjiz7XUC9sA5Upd2lSR/QGThC5/Zk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G66Phg8ZIRSknyuAf6SxTBhuI7Pa5PEEyhu4NG/DulcV27GFe6HTGv6wcij1P98mk vA5QBuFi2l6cojr9xpbtuo6jIBPhFiYk6A2H6Ciu+/LZjrsJsVXlfbyhla9BEkzzMP SqsxJcmqAq2f7SVl87GjNXfYTHwHOs07dSnros5U= From: Magnus Kulke To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, Wei Liu , Richard Henderson , Marcelo Tosatti , Marcel Apfelbaum , Wei Liu , Alex Williamson , Paolo Bonzini , Zhao Liu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Magnus Kulke , Magnus Kulke , "Michael S. Tsirkin" Subject: [RFC 05/32] accel/accel-irq: add generic begin_route_changes Date: Mon, 23 Mar 2026 14:57:45 +0100 Message-Id: <20260323135812.383509-6-magnuskulke@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260323135812.383509-1-magnuskulke@linux.microsoft.com> References: <20260323135812.383509-1-magnuskulke@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=13.77.154.182; envelope-from=magnuskulke@linux.microsoft.com; helo=linux.microsoft.com X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linux.microsoft.com) X-ZM-MESSAGEID: 1774274364002158500 Content-Type: text/plain; charset="utf-8" A generic accel_irqchip_begin_route_change() fn has been introduced for usage in the MSHV accelerator. It replaces the respective kvm_ fn. Signed-off-by: Magnus Kulke --- accel/accel-irq.c | 21 +++++++++++++++++++++ hw/misc/ivshmem-pci.c | 4 ++-- hw/vfio/pci.c | 5 +++-- hw/virtio/virtio-pci.c | 2 +- include/system/accel-irq.h | 1 + include/system/kvm.h | 8 -------- target/i386/kvm/kvm.c | 3 ++- 7 files changed, 30 insertions(+), 14 deletions(-) diff --git a/accel/accel-irq.c b/accel/accel-irq.c index 0aa04c033d..3815f6727c 100644 --- a/accel/accel-irq.c +++ b/accel/accel-irq.c @@ -10,6 +10,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/pci/msi.h" =20 #include "system/kvm.h" @@ -104,3 +105,23 @@ int accel_irqchip_remove_irqfd_notifier_gsi(EventNotif= ier *n, int virq) } return -ENOSYS; } + +inline AccelRouteChange accel_irqchip_begin_route_changes(void) +{ +#ifdef CONFIG_MSHV_IS_POSSIBLE + if (mshv_msi_via_irqfd_enabled()) { + return (AccelRouteChange) { + .accel =3D ACCEL(mshv_state), + .changes =3D 0, + }; + } +#endif + if (kvm_enabled()) { + return (AccelRouteChange) { + .accel =3D ACCEL(kvm_state), + .changes =3D 0, + }; + } + error_report("can't initiate route change, no accel irqchip available"= ); + abort(); +} diff --git a/hw/misc/ivshmem-pci.c b/hw/misc/ivshmem-pci.c index aa8f271755..fa23562886 100644 --- a/hw/misc/ivshmem-pci.c +++ b/hw/misc/ivshmem-pci.c @@ -26,7 +26,7 @@ #include "hw/core/qdev-properties-system.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "system/kvm.h" +#include "system/accel-irq.h" #include "migration/blocker.h" #include "migration/vmstate.h" #include "qemu/error-report.h" @@ -430,7 +430,7 @@ static void ivshmem_add_kvm_msi_virq(IVShmemState *s, i= nt vector, IVSHMEM_DPRINTF("ivshmem_add_kvm_msi_virq vector:%d\n", vector); assert(!s->msi_vectors[vector].pdev); =20 - c =3D kvm_irqchip_begin_route_changes(kvm_state); + c =3D accel_irqchip_begin_route_changes(); ret =3D kvm_irqchip_add_msi_route(&c, vector, pdev); if (ret < 0) { error_setg(errp, "kvm_irqchip_add_msi_route failed"); diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index e48f4add4e..6768523147 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -39,6 +39,7 @@ #include "qemu/module.h" #include "qemu/range.h" #include "qemu/units.h" +#include "system/accel-irq.h" #include "system/kvm.h" #include "system/runstate.h" #include "pci.h" @@ -692,7 +693,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, uns= igned int nr, if (vdev->defer_kvm_irq_routing) { vfio_pci_add_kvm_msi_virq(vdev, vector, nr, true); } else { - vfio_route_change =3D kvm_irqchip_begin_route_changes(kvm_= state); + vfio_route_change =3D accel_irqchip_begin_route_changes(); vfio_pci_add_kvm_msi_virq(vdev, vector, nr, true); kvm_irqchip_commit_route_changes(&vfio_route_change); vfio_connect_kvm_msi_virq(vector, nr); @@ -793,7 +794,7 @@ void vfio_pci_prepare_kvm_msi_virq_batch(VFIOPCIDevice = *vdev) { assert(!vdev->defer_kvm_irq_routing); vdev->defer_kvm_irq_routing =3D true; - vfio_route_change =3D kvm_irqchip_begin_route_changes(kvm_state); + vfio_route_change =3D accel_irqchip_begin_route_changes(); } =20 void vfio_pci_commit_kvm_msi_virq_batch(VFIOPCIDevice *vdev) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 5010572784..faa4a41cca 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -869,7 +869,7 @@ static int kvm_virtio_pci_vq_vector_use(VirtIOPCIProxy = *proxy, int ret; =20 if (irqfd->users =3D=3D 0) { - AccelRouteChange c =3D kvm_irqchip_begin_route_changes(kvm_state); + AccelRouteChange c =3D accel_irqchip_begin_route_changes(); ret =3D accel_irqchip_add_msi_route(&c, vector, &proxy->pci_dev); if (ret < 0) { return ret; diff --git a/include/system/accel-irq.h b/include/system/accel-irq.h index a148920711..fc94c54264 100644 --- a/include/system/accel-irq.h +++ b/include/system/accel-irq.h @@ -25,6 +25,7 @@ static inline bool accel_irqchip_is_split(void) return mshv_msi_via_irqfd_enabled() || kvm_irqchip_is_split(); } =20 +AccelRouteChange accel_irqchip_begin_route_changes(void); int accel_irqchip_add_msi_route(AccelRouteChange *c, int vector, PCIDevice *dev); int accel_irqchip_update_msi_route(int vector, MSIMessage msg, PCIDevice *= dev); diff --git a/include/system/kvm.h b/include/system/kvm.h index ccf90b8341..fec24d2135 100644 --- a/include/system/kvm.h +++ b/include/system/kvm.h @@ -476,14 +476,6 @@ int kvm_irqchip_update_msi_route(KVMState *s, int virq= , MSIMessage msg, PCIDevice *dev); void kvm_irqchip_commit_routes(KVMState *s); =20 -static inline AccelRouteChange kvm_irqchip_begin_route_changes(KVMState *s) -{ - return (AccelRouteChange) { - .accel =3D ACCEL(s), - .changes =3D 0, - }; -} - static inline void kvm_irqchip_commit_route_changes(AccelRouteChange *c) { if (c->changes) { diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 9cc41758d7..dc7c495f9c 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -32,6 +32,7 @@ #include "vmsr_energy.h" #include "system/system.h" #include "system/hw_accel.h" +#include "system/accel-irq.h" #include "system/kvm_int.h" #include "system/runstate.h" #include "system/ramblock.h" @@ -6680,7 +6681,7 @@ void kvm_arch_init_irq_routing(KVMState *s) kvm_gsi_routing_allowed =3D true; =20 if (kvm_irqchip_is_split()) { - AccelRouteChange c =3D kvm_irqchip_begin_route_changes(s); + AccelRouteChange c =3D accel_irqchip_begin_route_changes(); int i; =20 /* If the ioapic is in QEMU and the lapics are in KVM, reserve --=20 2.34.1