> From: Nicolin Chen <nicolinc@xxxxxxxxxx> > Sent: Thursday, February 2, 2023 3:05 PM > > @@ -246,6 +249,18 @@ static int iommufd_device_do_attach(struct > iommufd_device *idev, > } > } > > + if (cur_hwpt) { > + /* Replace the cur_hwpt */ > + mutex_lock(&cur_hwpt->devices_lock); > + if (cur_hwpt->ioas != hwpt->ioas) > + iopt_remove_reserved_iova(&cur_hwpt->ioas->iopt, > + idev->dev); > + list_del(&cur_hwpt->hwpt_item); emmm shouldn't this be done only when the device is the last one attached to the hwpt? and if it's the last one you should also iopt_table_remove_domain() together with list_del, i.e. similar housekeeping as done in iommufd_device_detach().