On Mon, Jul 17, 2023 at 03:11:56PM -0300, Jason Gunthorpe wrote: > This is the basic functionality for iommufd to support > iommufd_device_replace() and IOMMU_HWPT_ALLOC for physical devices. > > iommufd_device_replace() allows changing the HWPT associated with the > device to a new IOAS or HWPT. Replace does this in way that failure leaves > things unchanged, and utilizes the iommu iommu_group_replace_domain() API > to allow the iommu driver to perform an optional non-disruptive change. > > IOMMU_HWPT_ALLOC allows HWPTs to be explicitly allocated by the user and > used by attach or replace. At this point it isn't very useful since the > HWPT is the same as the automatically managed HWPT from the IOAS. However > a following series will allow userspace to customize the created HWPT. > > The implementation is complicated because we have to introduce some > per-iommu_group memory in iommufd and redo how we think about multi-device > groups to be more explicit. This solves all the locking problems in the > prior attempts. > > This series is infrastructure work for the following series which: > - Add replace for attach > - Expose replace through VFIO APIs > - Implement driver parameters for HWPT creation (nesting) > > Once review of this is complete I will keep it on a side branch and > accumulate the following series when they are ready so we can have a > stable base and make more incremental progress. When we have all the parts > together to get a full implementation it can go to Linus. > > This is on github: https://github.com/jgunthorpe/linux/commits/iommufd_hwpt > Jason Gunthorpe (17): > iommufd: Move isolated msi enforcement to iommufd_device_bind() > iommufd: Add iommufd_group > iommufd: Replace the hwpt->devices list with iommufd_group > iommu: Export iommu_get_resv_regions() > iommufd: Keep track of each device's reserved regions instead of > groups > iommufd: Use the iommufd_group to avoid duplicate MSI setup > iommufd: Make sw_msi_start a group global > iommufd: Move putting a hwpt to a helper function > iommufd: Add enforced_cache_coherency to iommufd_hw_pagetable_alloc() > iommufd: Allow a hwpt to be aborted after allocation > iommufd: Fix locking around hwpt allocation > iommufd: Reorganize iommufd_device_attach into > iommufd_device_change_pt > iommufd: Add iommufd_device_replace() > iommufd: Make destroy_rwsem use a lock class per object type > iommufd: Add IOMMU_HWPT_ALLOC > iommufd/selftest: Return the real idev id from selftest mock_domain > iommufd/selftest: Add a selftest for IOMMU_HWPT_ALLOC > > Nicolin Chen (2): > iommu: Introduce a new iommu_group_replace_domain() API > iommufd/selftest: Test iommufd_device_replace() Applied to iommufd for-next, I fixed up the conflicts with the cdev series Thanks, Jason