> @@ -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);" > } > - > igroup->hwpt = hwpt; > > /*