On Sat, Oct 07, 2023 at 03:20:41PM +0800, Yan Zhao wrote: > > @@ -444,10 +465,9 @@ iommufd_device_do_replace(struct iommufd_device *idev, > > } > > > > old_hwpt = igroup->hwpt; > > - if (hwpt->ioas != old_hwpt->ioas) { > > + if (iommufd_hw_pagetable_compare_ioas(old_hwpt, hwpt)) { > > list_for_each_entry(cur, &igroup->device_list, group_item) { > > - rc = iopt_table_enforce_dev_resv_regions( > > - &hwpt->ioas->iopt, cur->dev, NULL); > > + rc = iommufd_device_enforce_rr(cur, hwpt, NULL); > > if (rc) > > goto err_unresv; > > } > > @@ -461,12 +481,10 @@ iommufd_device_do_replace(struct iommufd_device *idev, > > if (rc) > > goto err_unresv; > > > > - if (hwpt->ioas != old_hwpt->ioas) { > > + if (iommufd_hw_pagetable_compare_ioas(old_hwpt, hwpt)) { > > list_for_each_entry(cur, &igroup->device_list, group_item) > > - iopt_remove_reserved_iova(&old_hwpt->ioas->iopt, > > - cur->dev); > > + iommufd_device_remove_rr(cur, hwpt); > Should be "iommufd_device_remove_rr(cur, old_hwpt);" Ah, right. Should fix this. Thanks! Nicolin