- kvm-hw-pci-Rename-has_power-to-enabled.patch [RHEL-7301] - kvm-hw-pci-Basic-support-for-PCI-power-management.patch [RHEL-7301] - kvm-pci-Use-PCI-PM-capability-initializer.patch [RHEL-7301] - kvm-vfio-pci-Delete-local-pm_cap.patch [RHEL-7301] - kvm-pcie-virtio-Remove-redundant-pm_cap.patch [RHEL-7301] - kvm-hw-vfio-pci-Re-order-pre-reset.patch [RHEL-7301] - kvm-Also-recommend-systemtap-devel-from-qemu-tools.patch [RHEL-47340] - Resolves: RHEL-7301 ([intel iommu] VFIO_MAP_DMA failed: Bad address on system_powerdown) - Resolves: RHEL-47340 ([Qemu RHEL-9] qemu-trace-stap should handle lack of stap more gracefully)
75 lines
2.7 KiB
Diff
75 lines
2.7 KiB
Diff
From d6a961077e753b9ad5a670a1529634fe20322ce2 Mon Sep 17 00:00:00 2001
|
|
From: Alex Williamson <alex.williamson@redhat.com>
|
|
Date: Tue, 25 Feb 2025 14:52:29 -0700
|
|
Subject: [PATCH 6/7] hw/vfio/pci: Re-order pre-reset
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Eric Auger <eric.auger@redhat.com>
|
|
RH-MergeRequest: 348: PCI: Implement basic PCI PM capability backing
|
|
RH-Jira: RHEL-7301
|
|
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
|
RH-Acked-by: Alex Williamson <None>
|
|
RH-Acked-by: Jon Maloy <jmaloy@redhat.com>
|
|
RH-Commit: [6/6] c6c386ecbabda93f8a79da926ece95c2195fbc36 (eauger1/centos-qemu-kvm)
|
|
|
|
We want the device in the D0 power state going into reset, but the
|
|
config write can enable the BARs in the address space, which are
|
|
then removed from the address space once we clear the memory enable
|
|
bit in the command register. Re-order to clear the command bit
|
|
first, so the power state change doesn't enable the BARs.
|
|
|
|
Cc: Cédric Le Goater <clg@redhat.com>
|
|
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
|
Reviewed-by: Eric Auger <eric.auger@redhat.com>
|
|
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
Link: https://lore.kernel.org/qemu-devel/20250225215237.3314011-6-alex.williamson@redhat.com
|
|
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
|
(cherry picked from commit 518a69a598916749338de3852d41d961d4503115)
|
|
Signed-off-by: Eric Auger <eric.auger@redhat.com>
|
|
---
|
|
hw/vfio/pci.c | 18 +++++++++---------
|
|
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
|
|
index 595b5c9b25..ffe72fd1d0 100644
|
|
--- a/hw/vfio/pci.c
|
|
+++ b/hw/vfio/pci.c
|
|
@@ -2414,6 +2414,15 @@ void vfio_pci_pre_reset(VFIOPCIDevice *vdev)
|
|
|
|
vfio_disable_interrupts(vdev);
|
|
|
|
+ /*
|
|
+ * Stop any ongoing DMA by disconnecting I/O, MMIO, and bus master.
|
|
+ * Also put INTx Disable in known state.
|
|
+ */
|
|
+ cmd = vfio_pci_read_config(pdev, PCI_COMMAND, 2);
|
|
+ cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
|
|
+ PCI_COMMAND_INTX_DISABLE);
|
|
+ vfio_pci_write_config(pdev, PCI_COMMAND, cmd, 2);
|
|
+
|
|
/* Make sure the device is in D0 */
|
|
if (pdev->pm_cap) {
|
|
uint16_t pmcsr;
|
|
@@ -2433,15 +2442,6 @@ void vfio_pci_pre_reset(VFIOPCIDevice *vdev)
|
|
}
|
|
}
|
|
}
|
|
-
|
|
- /*
|
|
- * Stop any ongoing DMA by disconnecting I/O, MMIO, and bus master.
|
|
- * Also put INTx Disable in known state.
|
|
- */
|
|
- cmd = vfio_pci_read_config(pdev, PCI_COMMAND, 2);
|
|
- cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
|
|
- PCI_COMMAND_INTX_DISABLE);
|
|
- vfio_pci_write_config(pdev, PCI_COMMAND, cmd, 2);
|
|
}
|
|
|
|
void vfio_pci_post_reset(VFIOPCIDevice *vdev)
|
|
--
|
|
2.48.1
|
|
|