>-----Original Message----- >From: Alex Williamson <alex.william...@redhat.com> >Subject: [PATCH 0/5] PCI: Implement basic PCI PM capability backing > >Eric recently identified an issue[1] where during graceful shutdown >of a VM in a vIOMMU configuration, the guest driver places the device >into the D3 power state, the vIOMMU is then disabled, triggering an >AddressSpace update. The device BARs are still mapped into the AS, >but the vfio host driver refuses to DMA map the MMIO space due to the >device power state. > >The proposed solution in [1] was to skip mappings based on the >device power state. Here we take a different approach. The PCI spec >defines that devices in D1/2/3 power state should respond only to >configuration and message requests and all other requests should be >handled as an Unsupported Request. In other words, the memory and >IO BARs are not accessible except when the device is in the D0 power >state. > >To emulate this behavior, we can factor the device power state into >the mapping state of the device BARs. Therefore the BAR is marked >as unmapped if either the respective command register enable bit is >clear or the device is not in the D0 power state. > >In order to implement this, the PowerState field of the PMCSR >register becomes writable, which allows the device to appear in >lower power states. This also therefore implements D3 support >(insofar as the BAR behavior) for all devices implementing the PM >capability. The PCI spec requires D3 support. > >An aspect that needs attention here is whether this change in the >wmask and PMCSR bits becomes a problem for migration, and how we >might solve it. For a guest migrating old->new, the device would >always be in the D0 power state, but the register becomes writable. >In the opposite direction, is it possible that a device could >migrate in a low power state and be stuck there since the bits are >read-only in old QEMU? Do we need an option for this behavior and a >machine state bump, or are there alternatives? > >Thanks, >Alex > >[1]https://lore.kernel.org/all/20250219175941.135390-1- >eric.au...@redhat.com/ > >Alex Williamson (5): > hw/pci: Basic support for PCI power management > pci: Use PCI PM capability initializer > vfio/pci: Delete local pm_cap > pcie, virtio: Remove redundant pm_cap > hw/vfio/pci: Re-order pre-reset
For the whole series, Reviewed-by: Zhenzhong Duan <zhenzhong.d...@intel.com> Thanks Zhenzhong