Message ID | 20231009091035.433329-1-eric.auger@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | Prerequisite changes for IOMMUFD support | expand |
On 10/9/23 11:09, Eric Auger wrote: > Hi All, > > This is the v5 respin of the IOMMUFD prerequisite series. > This applies on top of vfio-next: > https://github.com/legoater/qemu/, branch vfio-next. > > Per Cédric's suggestion, the IOMMUFD patchset v1[1] is now split > into two series, this prerequisite series and the new IOMMUFD backend > introduction support series. Hopefully this will ease the review. > > The main purpose of this series is to make "common.c" group agnostic: > all group related code are moved into container.c. Then we are prepared > for next series, abstract base container, adding new backend, etc. > > This series can be found at > https://github.com/eauger/qemu/tree/prereq_v5 > previous: https://github.com/eauger/qemu/tree/prereq_v4 > > Test done: > - PCI device were tested > - device hotplug test > - with or without vIOMMU > - VFIO migration with a E800 net card(no dirty sync support) passthrough > - platform and ccw were only compile-tested due to environment limit > > Zhenzhong, Yi, Eric > > [1] https://lore.kernel.org/all/20230830103754.36461-1-zhenzhong.duan@intel.com/t/#u Applied to vfio-next in replacement of v4. Thanks C. > > Changelog: > > v5: > - ap: fix missing return > - ccw: remove vbasedev->sysfsdev g_strdup_printf(), remove name local var > - container.c: restored !vbasedev->container check in vfio_detach_device() > - pci.c: removed vbasedev->name deallocation in error path as this is > handled in instance_finalize function > > v4: > - include qemu/error-report.h in helpers.c > - in ap.c, fix the wrongly added > vfio_detach_device(vbasedev) and g_free(vbasedev->name); > also added error_prepend > - simplified vbasedev setting in ccw.c > - vfio_detach_device: dropped check on > !vbasedev->container > - container.c: restore dropped comment > > v3: > - rebased on vfio-next as suggested by Cedric > - added vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any > - collected Cedric's R-b > - Fix some error paths in vfio/cpi which now properly detach the device > and also free the vbasedev->name > - Fix vfio/ccw migration (hopefully) [Matthew inputs] > - Split [PATCH v2 11/12] vfio/common: Introduce two kinds of VFIO device lists > into 3 patches > > v2: > - Refine patch description per Eric > - return errno and errp in vfio_kvm_device_[add/del]_fd per Eric > - make memory listener register/deregister in seperate patch per Eric > - Include the .h file first per Cédric > - Add trace event in vfio_attach_device per Cédric > - drop the change to vfio_viommu_preset by refactor per Cédric > - Introduce global VFIO device list and per container list per Alex > > Note changelog below are from full IOMMUFD series: > > v1: > - Alloc hwpt instead of using auto hwpt > - elaborate iommufd code per Nicolin > - consolidate two patches and drop as.c > - typo error fix and function rename > > rfcv4: > - rebase on top of v8.0.3 > - Add one patch from Yi which is about vfio device add in kvm > - Remove IOAS_COPY optimization and focus on functions in this patchset > - Fix wrong name issue reported and fix suggested by Matthew > - Fix compilation issue reported and fix sugggsted by Nicolin > - Use query_dirty_bitmap callback to replace get_dirty_bitmap for better > granularity > - Add dev_iter_next() callback to avoid adding so many callback > at container scope, add VFIODevice.hwpt to support that > - Restore all functions back to common from container whenever possible, > mainly migration and reset related functions > - Add --enable/disable-iommufd config option, enabled by default in linux > - Remove VFIODevice.hwpt_next as it's redundant with VFIODevice.next > - Adapt new VFIO_DEVICE_PCI_HOT_RESET uAPI for IOMMUFD backed device > - vfio_kvm_device_add/del_group call vfio_kvm_device_add/del_fd to remove > redundant code > - Add FD passing support for vfio device backed by IOMMUFD > - Fix hot unplug resource leak issue in vfio_legacy_detach_device() > - Fix FD leak in vfio_get_devicefd() > > rfcv3: > - rebase on top of v7.2.0 > - Fix the compilation with CONFIG_IOMMUFD unset by using true classes for > VFIO backends > - Fix use after free in error path, reported by Alister > - Split common.c in several steps to ease the review > > rfcv2: > - remove the first three patches of rfcv1 > - add open cdev helper suggested by Jason > - remove the QOMification of the VFIOContainer and simply use standard ops > (David) > - add "-object iommufd" suggested by Alex > > > Eric Auger (7): > scripts/update-linux-headers: Add iommufd.h > vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any > vfio/common: Introduce vfio_container_add|del_section_window() > vfio/pci: Introduce vfio_[attach/detach]_device > vfio/platform: Use vfio_[attach/detach]_device > vfio/ap: Use vfio_[attach/detach]_device > vfio/ccw: Use vfio_[attach/detach]_device > > Yi Liu (2): > vfio/common: Move IOMMU agnostic helpers to a separate file > vfio/common: Move legacy VFIO backend code into separate container.c > > Zhenzhong Duan (6): > linux-headers: Add iommufd.h > vfio/common: Extract out vfio_kvm_device_[add/del]_fd > vfio/common: Move VFIO reset handler registration to a group agnostic > function > vfio/common: Introduce a per container device list > vfio/common: Store the parent container in VFIODevice > vfio/common: Introduce a global VFIODevice list > > include/hw/vfio/vfio-common.h | 60 +- > linux-headers/linux/iommufd.h | 444 ++++++++ > hw/vfio/ap.c | 67 +- > hw/vfio/ccw.c | 117 +- > hw/vfio/common.c | 1851 ++----------------------------- > hw/vfio/container.c | 1161 +++++++++++++++++++ > hw/vfio/helpers.c | 612 ++++++++++ > hw/vfio/pci.c | 66 +- > hw/vfio/platform.c | 43 +- > hw/vfio/meson.build | 2 + > hw/vfio/trace-events | 4 +- > scripts/update-linux-headers.sh | 3 +- > 12 files changed, 2456 insertions(+), 1974 deletions(-) > create mode 100644 linux-headers/linux/iommufd.h > create mode 100644 hw/vfio/container.c > create mode 100644 hw/vfio/helpers.c >
On 10/9/23 14:58, Cédric Le Goater wrote: > On 10/9/23 11:09, Eric Auger wrote: >> Hi All, >> >> This is the v5 respin of the IOMMUFD prerequisite series. >> This applies on top of vfio-next: >> https://github.com/legoater/qemu/, branch vfio-next. >> >> Per Cédric's suggestion, the IOMMUFD patchset v1[1] is now split >> into two series, this prerequisite series and the new IOMMUFD backend >> introduction support series. Hopefully this will ease the review. >> The main purpose of this series is to make "common.c" group agnostic: >> all group related code are moved into container.c. Then we are prepared >> for next series, abstract base container, adding new backend, etc. >> >> This series can be found at >> https://github.com/eauger/qemu/tree/prereq_v5 >> previous: https://github.com/eauger/qemu/tree/prereq_v4 >> >> Test done: >> - PCI device were tested >> - device hotplug test >> - with or without vIOMMU >> - VFIO migration with a E800 net card(no dirty sync support) passthrough >> - platform and ccw were only compile-tested due to environment limit >> >> Zhenzhong, Yi, Eric >> >> [1] >> https://lore.kernel.org/all/20230830103754.36461-1-zhenzhong.duan@intel.com/t/#u > > Applied to vfio-next in replacement of v4. thank you and sorry for the setback Eric > > Thanks > > C. > > >> >> Changelog: >> >> v5: >> - ap: fix missing return >> - ccw: remove vbasedev->sysfsdev g_strdup_printf(), remove name local >> var >> - container.c: restored !vbasedev->container check in >> vfio_detach_device() >> - pci.c: removed vbasedev->name deallocation in error path as this is >> handled in instance_finalize function >> >> v4: >> - include qemu/error-report.h in helpers.c >> - in ap.c, fix the wrongly added >> vfio_detach_device(vbasedev) and g_free(vbasedev->name); >> also added error_prepend >> - simplified vbasedev setting in ccw.c >> - vfio_detach_device: dropped check on >> !vbasedev->container >> - container.c: restore dropped comment >> >> v3: >> - rebased on vfio-next as suggested by Cedric >> - added vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any >> - collected Cedric's R-b >> - Fix some error paths in vfio/cpi which now properly detach the device >> and also free the vbasedev->name >> - Fix vfio/ccw migration (hopefully) [Matthew inputs] >> - Split [PATCH v2 11/12] vfio/common: Introduce two kinds of VFIO >> device lists >> into 3 patches >> >> v2: >> - Refine patch description per Eric >> - return errno and errp in vfio_kvm_device_[add/del]_fd per Eric >> - make memory listener register/deregister in seperate patch per Eric >> - Include the .h file first per Cédric >> - Add trace event in vfio_attach_device per Cédric >> - drop the change to vfio_viommu_preset by refactor per Cédric >> - Introduce global VFIO device list and per container list per Alex >> >> Note changelog below are from full IOMMUFD series: >> >> v1: >> - Alloc hwpt instead of using auto hwpt >> - elaborate iommufd code per Nicolin >> - consolidate two patches and drop as.c >> - typo error fix and function rename >> >> rfcv4: >> - rebase on top of v8.0.3 >> - Add one patch from Yi which is about vfio device add in kvm >> - Remove IOAS_COPY optimization and focus on functions in this patchset >> - Fix wrong name issue reported and fix suggested by Matthew >> - Fix compilation issue reported and fix sugggsted by Nicolin >> - Use query_dirty_bitmap callback to replace get_dirty_bitmap for better >> granularity >> - Add dev_iter_next() callback to avoid adding so many callback >> at container scope, add VFIODevice.hwpt to support that >> - Restore all functions back to common from container whenever possible, >> mainly migration and reset related functions >> - Add --enable/disable-iommufd config option, enabled by default in >> linux >> - Remove VFIODevice.hwpt_next as it's redundant with VFIODevice.next >> - Adapt new VFIO_DEVICE_PCI_HOT_RESET uAPI for IOMMUFD backed device >> - vfio_kvm_device_add/del_group call vfio_kvm_device_add/del_fd to >> remove >> redundant code >> - Add FD passing support for vfio device backed by IOMMUFD >> - Fix hot unplug resource leak issue in vfio_legacy_detach_device() >> - Fix FD leak in vfio_get_devicefd() >> >> rfcv3: >> - rebase on top of v7.2.0 >> - Fix the compilation with CONFIG_IOMMUFD unset by using true classes >> for >> VFIO backends >> - Fix use after free in error path, reported by Alister >> - Split common.c in several steps to ease the review >> >> rfcv2: >> - remove the first three patches of rfcv1 >> - add open cdev helper suggested by Jason >> - remove the QOMification of the VFIOContainer and simply use >> standard ops >> (David) >> - add "-object iommufd" suggested by Alex >> >> >> Eric Auger (7): >> scripts/update-linux-headers: Add iommufd.h >> vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any >> vfio/common: Introduce vfio_container_add|del_section_window() >> vfio/pci: Introduce vfio_[attach/detach]_device >> vfio/platform: Use vfio_[attach/detach]_device >> vfio/ap: Use vfio_[attach/detach]_device >> vfio/ccw: Use vfio_[attach/detach]_device >> >> Yi Liu (2): >> vfio/common: Move IOMMU agnostic helpers to a separate file >> vfio/common: Move legacy VFIO backend code into separate container.c >> >> Zhenzhong Duan (6): >> linux-headers: Add iommufd.h >> vfio/common: Extract out vfio_kvm_device_[add/del]_fd >> vfio/common: Move VFIO reset handler registration to a group agnostic >> function >> vfio/common: Introduce a per container device list >> vfio/common: Store the parent container in VFIODevice >> vfio/common: Introduce a global VFIODevice list >> >> include/hw/vfio/vfio-common.h | 60 +- >> linux-headers/linux/iommufd.h | 444 ++++++++ >> hw/vfio/ap.c | 67 +- >> hw/vfio/ccw.c | 117 +- >> hw/vfio/common.c | 1851 ++----------------------------- >> hw/vfio/container.c | 1161 +++++++++++++++++++ >> hw/vfio/helpers.c | 612 ++++++++++ >> hw/vfio/pci.c | 66 +- >> hw/vfio/platform.c | 43 +- >> hw/vfio/meson.build | 2 + >> hw/vfio/trace-events | 4 +- >> scripts/update-linux-headers.sh | 3 +- >> 12 files changed, 2456 insertions(+), 1974 deletions(-) >> create mode 100644 linux-headers/linux/iommufd.h >> create mode 100644 hw/vfio/container.c >> create mode 100644 hw/vfio/helpers.c >> >
On 10/9/23 15:38, Eric Auger wrote: > > > On 10/9/23 14:58, Cédric Le Goater wrote: >> On 10/9/23 11:09, Eric Auger wrote: >>> Hi All, >>> >>> This is the v5 respin of the IOMMUFD prerequisite series. >>> This applies on top of vfio-next: >>> https://github.com/legoater/qemu/, branch vfio-next. >>> >>> Per Cédric's suggestion, the IOMMUFD patchset v1[1] is now split >>> into two series, this prerequisite series and the new IOMMUFD backend >>> introduction support series. Hopefully this will ease the review. >>> The main purpose of this series is to make "common.c" group agnostic: >>> all group related code are moved into container.c. Then we are prepared >>> for next series, abstract base container, adding new backend, etc. >>> >>> This series can be found at >>> https://github.com/eauger/qemu/tree/prereq_v5 >>> previous: https://github.com/eauger/qemu/tree/prereq_v4 >>> >>> Test done: >>> - PCI device were tested >>> - device hotplug test >>> - with or without vIOMMU >>> - VFIO migration with a E800 net card(no dirty sync support) passthrough >>> - platform and ccw were only compile-tested due to environment limit >>> >>> Zhenzhong, Yi, Eric >>> >>> [1] >>> https://lore.kernel.org/all/20230830103754.36461-1-zhenzhong.duan@intel.com/t/#u >> >> Applied to vfio-next in replacement of v4. > > thank you and sorry for the setback np. This is to be expected. The scope is quite large and we should try to secure the prerequisite changes before introducing the new IOMMUFD backend. Let's give vfio-next good testing this week. Thanks, C. > > Eric >> >> Thanks >> >> C. >> >> >>> >>> Changelog: >>> >>> v5: >>> - ap: fix missing return >>> - ccw: remove vbasedev->sysfsdev g_strdup_printf(), remove name local >>> var >>> - container.c: restored !vbasedev->container check in >>> vfio_detach_device() >>> - pci.c: removed vbasedev->name deallocation in error path as this is >>> handled in instance_finalize function >>> >>> v4: >>> - include qemu/error-report.h in helpers.c >>> - in ap.c, fix the wrongly added >>> vfio_detach_device(vbasedev) and g_free(vbasedev->name); >>> also added error_prepend >>> - simplified vbasedev setting in ccw.c >>> - vfio_detach_device: dropped check on >>> !vbasedev->container >>> - container.c: restore dropped comment >>> >>> v3: >>> - rebased on vfio-next as suggested by Cedric >>> - added vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any >>> - collected Cedric's R-b >>> - Fix some error paths in vfio/cpi which now properly detach the device >>> and also free the vbasedev->name >>> - Fix vfio/ccw migration (hopefully) [Matthew inputs] >>> - Split [PATCH v2 11/12] vfio/common: Introduce two kinds of VFIO >>> device lists >>> into 3 patches >>> >>> v2: >>> - Refine patch description per Eric >>> - return errno and errp in vfio_kvm_device_[add/del]_fd per Eric >>> - make memory listener register/deregister in seperate patch per Eric >>> - Include the .h file first per Cédric >>> - Add trace event in vfio_attach_device per Cédric >>> - drop the change to vfio_viommu_preset by refactor per Cédric >>> - Introduce global VFIO device list and per container list per Alex >>> >>> Note changelog below are from full IOMMUFD series: >>> >>> v1: >>> - Alloc hwpt instead of using auto hwpt >>> - elaborate iommufd code per Nicolin >>> - consolidate two patches and drop as.c >>> - typo error fix and function rename >>> >>> rfcv4: >>> - rebase on top of v8.0.3 >>> - Add one patch from Yi which is about vfio device add in kvm >>> - Remove IOAS_COPY optimization and focus on functions in this patchset >>> - Fix wrong name issue reported and fix suggested by Matthew >>> - Fix compilation issue reported and fix sugggsted by Nicolin >>> - Use query_dirty_bitmap callback to replace get_dirty_bitmap for better >>> granularity >>> - Add dev_iter_next() callback to avoid adding so many callback >>> at container scope, add VFIODevice.hwpt to support that >>> - Restore all functions back to common from container whenever possible, >>> mainly migration and reset related functions >>> - Add --enable/disable-iommufd config option, enabled by default in >>> linux >>> - Remove VFIODevice.hwpt_next as it's redundant with VFIODevice.next >>> - Adapt new VFIO_DEVICE_PCI_HOT_RESET uAPI for IOMMUFD backed device >>> - vfio_kvm_device_add/del_group call vfio_kvm_device_add/del_fd to >>> remove >>> redundant code >>> - Add FD passing support for vfio device backed by IOMMUFD >>> - Fix hot unplug resource leak issue in vfio_legacy_detach_device() >>> - Fix FD leak in vfio_get_devicefd() >>> >>> rfcv3: >>> - rebase on top of v7.2.0 >>> - Fix the compilation with CONFIG_IOMMUFD unset by using true classes >>> for >>> VFIO backends >>> - Fix use after free in error path, reported by Alister >>> - Split common.c in several steps to ease the review >>> >>> rfcv2: >>> - remove the first three patches of rfcv1 >>> - add open cdev helper suggested by Jason >>> - remove the QOMification of the VFIOContainer and simply use >>> standard ops >>> (David) >>> - add "-object iommufd" suggested by Alex >>> >>> >>> Eric Auger (7): >>> scripts/update-linux-headers: Add iommufd.h >>> vfio/common: Propagate KVM_SET_DEVICE_ATTR error if any >>> vfio/common: Introduce vfio_container_add|del_section_window() >>> vfio/pci: Introduce vfio_[attach/detach]_device >>> vfio/platform: Use vfio_[attach/detach]_device >>> vfio/ap: Use vfio_[attach/detach]_device >>> vfio/ccw: Use vfio_[attach/detach]_device >>> >>> Yi Liu (2): >>> vfio/common: Move IOMMU agnostic helpers to a separate file >>> vfio/common: Move legacy VFIO backend code into separate container.c >>> >>> Zhenzhong Duan (6): >>> linux-headers: Add iommufd.h >>> vfio/common: Extract out vfio_kvm_device_[add/del]_fd >>> vfio/common: Move VFIO reset handler registration to a group agnostic >>> function >>> vfio/common: Introduce a per container device list >>> vfio/common: Store the parent container in VFIODevice >>> vfio/common: Introduce a global VFIODevice list >>> >>> include/hw/vfio/vfio-common.h | 60 +- >>> linux-headers/linux/iommufd.h | 444 ++++++++ >>> hw/vfio/ap.c | 67 +- >>> hw/vfio/ccw.c | 117 +- >>> hw/vfio/common.c | 1851 ++----------------------------- >>> hw/vfio/container.c | 1161 +++++++++++++++++++ >>> hw/vfio/helpers.c | 612 ++++++++++ >>> hw/vfio/pci.c | 66 +- >>> hw/vfio/platform.c | 43 +- >>> hw/vfio/meson.build | 2 + >>> hw/vfio/trace-events | 4 +- >>> scripts/update-linux-headers.sh | 3 +- >>> 12 files changed, 2456 insertions(+), 1974 deletions(-) >>> create mode 100644 linux-headers/linux/iommufd.h >>> create mode 100644 hw/vfio/container.c >>> create mode 100644 hw/vfio/helpers.c >>> >> >