forked from rpms/qemu-kvm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.5 KiB
68 lines
2.5 KiB
From b5a69101abac153c9c9be7f539d810e3e4af3bdf Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= <clg@redhat.com>
|
|
Date: Wed, 12 Jul 2023 17:46:57 +0200
|
|
Subject: [PATCH 19/37] vfio/pci: Call vfio_prepare_kvm_msi_virq_batch() in MSI
|
|
retry path
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Cédric Le Goater <clg@redhat.com>
|
|
RH-MergeRequest: 179: vfio: live migration support
|
|
RH-Bugzilla: 2192818
|
|
RH-Acked-by: Eric Auger <eric.auger@redhat.com>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Commit: [17/28] 2067bb58f3a2c1a793e5566cee3c78a8299c9c1c (clegoate/qemu-kvm-c9s)
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/2192818
|
|
|
|
commit c17408892319
|
|
Author: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
|
Date: Tue Jun 13 15:09:43 2023 +0100
|
|
|
|
vfio/pci: Call vfio_prepare_kvm_msi_virq_batch() in MSI retry path
|
|
|
|
When vfio_enable_vectors() returns with less than requested nr_vectors
|
|
we retry with what kernel reported back. But the retry path doesn't
|
|
call vfio_prepare_kvm_msi_virq_batch() and this results in,
|
|
|
|
qemu-system-aarch64: vfio: Error: Failed to enable 4 MSI vectors, retry with 1
|
|
qemu-system-aarch64: ../hw/vfio/pci.c:602: vfio_commit_kvm_msi_virq_batch: Assertion `vdev->defer_kvm_irq_routing' failed
|
|
|
|
Fixes: dc580d51f7dd ("vfio: defer to commit kvm irq routing when enable msi/msix")
|
|
Reviewed-by: Longpeng <longpeng2@huawei.com>
|
|
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
|
Reviewed-by: Cédric Le Goater <clg@redhat.com>
|
|
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
|
|
|
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
|
---
|
|
hw/vfio/pci.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
|
|
index 7c5e2b5996..15e7554954 100644
|
|
--- a/hw/vfio/pci.c
|
|
+++ b/hw/vfio/pci.c
|
|
@@ -666,6 +666,8 @@ static void vfio_msi_enable(VFIOPCIDevice *vdev)
|
|
|
|
vfio_disable_interrupts(vdev);
|
|
|
|
+ vdev->nr_vectors = msi_nr_vectors_allocated(&vdev->pdev);
|
|
+retry:
|
|
/*
|
|
* Setting vector notifiers needs to enable route for each vector.
|
|
* Deferring to commit the KVM routes once rather than per vector
|
|
@@ -673,8 +675,6 @@ static void vfio_msi_enable(VFIOPCIDevice *vdev)
|
|
*/
|
|
vfio_prepare_kvm_msi_virq_batch(vdev);
|
|
|
|
- vdev->nr_vectors = msi_nr_vectors_allocated(&vdev->pdev);
|
|
-retry:
|
|
vdev->msi_vectors = g_new0(VFIOMSIVector, vdev->nr_vectors);
|
|
|
|
for (i = 0; i < vdev->nr_vectors; i++) {
|
|
--
|
|
2.39.3
|
|
|