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