[Intel-gfx] [PATCH v3 00/12] Introduce new methods for verifying ownership in vfio PCI hot reset
Duan, Zhenzhong
zhenzhong.duan at intel.com
Tue Apr 4 10:55:29 UTC 2023
> -----Original Message-----
> From: Liu, Yi L <mailto:yi.l.liu at intel.com>
> Sent: Saturday, April 1, 2023 10:44 PM
> Subject: [PATCH v3 00/12] Introduce new methods for verifying
> ownership in vfio PCI hot reset
>
> VFIO_DEVICE_PCI_HOT_RESET requires user to pass an array of group fds
> to prove that it owns all devices affected by resetting the calling
> device. This series introduces several extensions to allow the
> ownership check better aligned with iommufd and coming vfio device cdev support.
>
> First, resetting an unopened device is always safe given nobody is
> using it. So relax the check to allow such devices not covered by
> group fd array. [1]
>
> When iommufd is used we can simply verify that all affected devices
> are bound to a same iommufd then no need for the user to provide extra
> fd information. This is enabled by the user passing a zero-length fd
> array and moving forward this should be the preferred way for hot
> reset. [2]
>
> However the iommufd method has difficulty working with noiommu devices
> since those devices don't have a valid iommufd, unless the noiommu
> device is in a singleton dev_set hence no ownership check is required.
> [3]
>
> For noiommu backward compatibility a 3rd method is introduced by
> allowing the user to pass an array of device fds to prove ownership.
> [4]
>
> As suggested by Jason [5], we have this series to introduce the above
> stuffs to the vfio PCI hot reset. Per the dicussion in [6] [7], in the
> end of this series, the VFIO_DEVICE_GET_PCI_HOT_RESET_INFO is extended
> to report devid for the devices opened as cdev. This is goging to
> support the device fd passing usage.
>
> The new hot reset method and updated _INFO ioctl are tested with two
> test commits in below qemu:
>
> https://github.com/yiliu1765/qemu/commits/iommufd_rfcv3
> (requires to test with cdev kernel)
Test pass with qemu supporting new uAPI, played trick to bypass FLR and trigger
hot reset intentionally. 81:00.0 and 81:00.1 are dependent devices from same slot
and passed to one VM, see below qemu trace for details.
vfio_pci_hot_reset (0000:81:00.1) multi
vfio_intx_disable_kvm (0000:81:00.1) KVM INTx accel disabled
vfio_region_mmaps_set_enabled Region 0000:81:00.1 BAR 0 mmaps enabled: 1
vfio_region_mmaps_set_enabled Region 0000:81:00.1 BAR 3 mmaps enabled: 1
vfio_intx_disable (0000:81:00.1)
vfio_pci_read_config (0000:81:00.1, @0x44, len=0x2) 0x2008
vfio_pci_read_config (0000:81:00.1, @0x4, len=0x2) 0x142
vfio_pci_write_config (0000:81:00.1, @0x4, 0x140, len=0x2)
vfio_pci_hot_reset_has_dep_devices 0000:81:00.1: hot reset dependent devices:
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.0 devid 2
vfio_intx_disable_kvm (0000:81:00.0) KVM INTx accel disabled
vfio_region_mmaps_set_enabled Region 0000:81:00.0 BAR 0 mmaps enabled: 1
vfio_region_mmaps_set_enabled Region 0000:81:00.0 BAR 3 mmaps enabled: 1
vfio_intx_disable (0000:81:00.0)
vfio_pci_read_config (0000:81:00.0, @0x44, len=0x2) 0x2008
vfio_pci_read_config (0000:81:00.0, @0x4, len=0x2) 0x142
vfio_pci_write_config (0000:81:00.0, @0x4, 0x140, len=0x2)
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.1 devid 5
vfio_pci_hot_reset_result 0000:81:00.1 hot reset: Success
vfio_pci_read_config (0000:81:00.0, @0x3d, len=0x1) 0x1
vfio_intx_enable_kvm (0000:81:00.0) KVM INTx accel enabled
vfio_intx_enable (0000:81:00.0)
vfio_pci_read_config (0000:81:00.1, @0x3d, len=0x1) 0x1
vfio_intx_enable_kvm (0000:81:00.1) KVM INTx accel enabled
vfio_intx_enable (0000:81:00.1)
vfio_pci_hot_reset (0000:81:00.0) multi
vfio_intx_disable_kvm (0000:81:00.0) KVM INTx accel disabled
vfio_region_mmaps_set_enabled Region 0000:81:00.0 BAR 0 mmaps enabled: 1
vfio_region_mmaps_set_enabled Region 0000:81:00.0 BAR 3 mmaps enabled: 1
vfio_intx_disable (0000:81:00.0)
vfio_pci_read_config (0000:81:00.0, @0x44, len=0x2) 0x2008
vfio_pci_read_config (0000:81:00.0, @0x4, len=0x2) 0x140
vfio_pci_write_config (0000:81:00.0, @0x4, 0x140, len=0x2)
vfio_pci_hot_reset_has_dep_devices 0000:81:00.0: hot reset dependent devices:
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.0 devid 2
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.1 devid 5
vfio_intx_disable_kvm (0000:81:00.1) KVM INTx accel disabled
vfio_region_mmaps_set_enabled Region 0000:81:00.1 BAR 0 mmaps enabled: 1
vfio_region_mmaps_set_enabled Region 0000:81:00.1 BAR 3 mmaps enabled: 1
vfio_intx_disable (0000:81:00.1)
vfio_pci_read_config (0000:81:00.1, @0x44, len=0x2) 0x2008
vfio_pci_read_config (0000:81:00.1, @0x4, len=0x2) 0x140
vfio_pci_write_config (0000:81:00.1, @0x4, 0x140, len=0x2)
vfio_pci_hot_reset_result 0000:81:00.0 hot reset: Success
vfio_pci_read_config (0000:81:00.1, @0x3d, len=0x1) 0x1
vfio_intx_enable_kvm (0000:81:00.1) KVM INTx accel enabled
vfio_intx_enable (0000:81:00.1)
vfio_pci_read_config (0000:81:00.0, @0x3d, len=0x1) 0x1
vfio_intx_enable_kvm (0000:81:00.0) KVM INTx accel enabled
vfio_intx_enable (0000:81:00.0)
......
vfio_pci_reset (0000:81:00.1)
vfio_intx_disable_kvm (0000:81:00.1) KVM INTx accel disabled
vfio_region_mmaps_set_enabled Region 0000:81:00.1 BAR 0 mmaps enabled: 1
vfio_region_mmaps_set_enabled Region 0000:81:00.1 BAR 3 mmaps enabled: 1
vfio_intx_disable (0000:81:00.1)
vfio_pci_read_config (0000:81:00.1, @0x44, len=0x2) 0x2008
vfio_pci_read_config (0000:81:00.1, @0x4, len=0x2) 0x140
vfio_pci_write_config (0000:81:00.1, @0x4, 0x140, len=0x2)
vfio_pci_hot_reset (0000:81:00.1) one
vfio_pci_hot_reset_has_dep_devices 0000:81:00.1: hot reset dependent devices:
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.0 devid 2
vfio_pci_read_config (0000:81:00.1, @0x3d, len=0x1) 0x1
vfio_intx_enable_kvm (0000:81:00.1) KVM INTx accel enabled
vfio_intx_enable (0000:81:00.1)
vfio_pci_reset (0000:81:00.0)
vfio_intx_disable_kvm (0000:81:00.0) KVM INTx accel disabled
vfio_region_mmaps_set_enabled Region 0000:81:00.0 BAR 0 mmaps enabled: 1
vfio_region_mmaps_set_enabled Region 0000:81:00.0 BAR 3 mmaps enabled: 1
vfio_intx_disable (0000:81:00.0)
vfio_pci_read_config (0000:81:00.0, @0x44, len=0x2) 0x2008
vfio_pci_read_config (0000:81:00.0, @0x4, len=0x2) 0x140
vfio_pci_write_config (0000:81:00.0, @0x4, 0x140, len=0x2)
vfio_pci_hot_reset (0000:81:00.0) one
vfio_pci_hot_reset_has_dep_devices 0000:81:00.0: hot reset dependent devices:
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.0 devid 2
vfio_pci_hot_reset_dep_devices_iommufd 0000:81:00.1 devid 5
vfio_pci_read_config (0000:81:00.0, @0x3d, len=0x1) 0x1
vfio_intx_enable_kvm (0000:81:00.0) KVM INTx accel enabled
vfio_intx_enable (0000:81:00.0)
More information about the Intel-gfx
mailing list