200e3560ab
- kvm-migration-always-initialise-ram_counters-for-a-new-m.patch [bz#1734316] - kvm-migration-add-qemu_file_update_transfer-interface.patch [bz#1734316] - kvm-migration-add-speed-limit-for-multifd-migration.patch [bz#1734316] - kvm-migration-update-ram_counters-for-multifd-sync-packe.patch [bz#1734316] - kvm-spapr-pci-Consolidate-de-allocation-of-MSIs.patch [bz#1750200] - kvm-spapr-pci-Free-MSIs-during-reset.patch [bz#1750200] - Resolves: bz#1734316 (multifd migration does not honour speed limits, consumes entire bandwidth of NIC) - Resolves: bz#1750200 ([RHEL8.1][QEMU4.1]boot up guest with vf device,then system_reset guest,error prompt(qemu-kvm: Can't allocate MSIs for device 2800: IRQ 4904 is not free))
104 lines
3.7 KiB
Diff
104 lines
3.7 KiB
Diff
From b27062f4b3ddf47dea926026e5511f15d5b31320 Mon Sep 17 00:00:00 2001
|
|
From: David Gibson <dgibson@redhat.com>
|
|
Date: Tue, 10 Sep 2019 07:04:27 +0100
|
|
Subject: [PATCH 5/6] spapr/pci: Consolidate de-allocation of MSIs
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: David Gibson <dgibson@redhat.com>
|
|
Message-id: <20190910070428.28628-2-dgibson@redhat.com>
|
|
Patchwork-id: 90362
|
|
O-Subject: [RHEL-AV-8.1 qemu-kvm PATCH 1/2] spapr/pci: Consolidate de-allocation of MSIs
|
|
Bugzilla: 1750200
|
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
|
From: Greg Kurz <groug@kaod.org>
|
|
|
|
When freeing MSIs, we need to:
|
|
- remove them from the machine's MSI bitmap
|
|
- remove them from the IC backend
|
|
- remove them from the PHB's MSI cache
|
|
|
|
This is currently open coded in two places in rtas_ibm_change_msi(),
|
|
and we're about to need this in spapr_phb_reset() as well. Instead of
|
|
duplicating this code again, make it a destroy function for the PHB's
|
|
MSI cache. Removing an MSI device from the cache will call the destroy
|
|
function internally.
|
|
|
|
Signed-off-by: Greg Kurz <groug@kaod.org>
|
|
Message-Id: <156415227855.1064338.5657793835271464648.stgit@bahia.lan>
|
|
Reviewed-by: Cédric Le Goater <clg@kaod.org>
|
|
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
|
|
(cherry picked from commit 078eb6b05b7f962e43d8bc376e0b96cdd550c17a)
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1750200
|
|
|
|
Signed-off-by: David Gibson <dgibson@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
hw/ppc/spapr_pci.c | 24 +++++++++++++++---------
|
|
1 file changed, 15 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
|
|
index 9003fe9..1ffcfae 100644
|
|
--- a/hw/ppc/spapr_pci.c
|
|
+++ b/hw/ppc/spapr_pci.c
|
|
@@ -336,10 +336,6 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, SpaprMachineState *spapr,
|
|
return;
|
|
}
|
|
|
|
- if (!smc->legacy_irq_allocation) {
|
|
- spapr_irq_msi_free(spapr, msi->first_irq, msi->num);
|
|
- }
|
|
- spapr_irq_free(spapr, msi->first_irq, msi->num);
|
|
if (msi_present(pdev)) {
|
|
spapr_msi_setmsg(pdev, 0, false, 0, 0);
|
|
}
|
|
@@ -409,10 +405,6 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, SpaprMachineState *spapr,
|
|
|
|
/* Release previous MSIs */
|
|
if (msi) {
|
|
- if (!smc->legacy_irq_allocation) {
|
|
- spapr_irq_msi_free(spapr, msi->first_irq, msi->num);
|
|
- }
|
|
- spapr_irq_free(spapr, msi->first_irq, msi->num);
|
|
g_hash_table_remove(phb->msi, &config_addr);
|
|
}
|
|
|
|
@@ -1806,6 +1798,19 @@ static void spapr_phb_unrealize(DeviceState *dev, Error **errp)
|
|
memory_region_del_subregion(get_system_memory(), &sphb->mem32window);
|
|
}
|
|
|
|
+static void spapr_phb_destroy_msi(gpointer opaque)
|
|
+{
|
|
+ SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
|
|
+ SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
|
|
+ spapr_pci_msi *msi = opaque;
|
|
+
|
|
+ if (!smc->legacy_irq_allocation) {
|
|
+ spapr_irq_msi_free(spapr, msi->first_irq, msi->num);
|
|
+ }
|
|
+ spapr_irq_free(spapr, msi->first_irq, msi->num);
|
|
+ g_free(msi);
|
|
+}
|
|
+
|
|
static void spapr_phb_realize(DeviceState *dev, Error **errp)
|
|
{
|
|
/* We don't use SPAPR_MACHINE() in order to exit gracefully if the user
|
|
@@ -2017,7 +2022,8 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
|
|
spapr_tce_get_iommu(tcet));
|
|
}
|
|
|
|
- sphb->msi = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_free);
|
|
+ sphb->msi = g_hash_table_new_full(g_int_hash, g_int_equal, g_free,
|
|
+ spapr_phb_destroy_msi);
|
|
return;
|
|
|
|
unrealize:
|
|
--
|
|
1.8.3.1
|
|
|