> From: Jason Gunthorpe <jgg@xxxxxxxxxx> > Sent: Thursday, February 9, 2023 9:24 PM > > On Thu, Feb 09, 2023 at 03:23:47AM +0000, Tian, Kevin wrote: > > > From: Nicolin Chen <nicolinc@xxxxxxxxxx> > > > Sent: Wednesday, February 8, 2023 5:18 AM > > > > > > Because list_del() is together with iopt_table_remove_domain(), it makes > > > sense to have list_add_tail() together with iopt_table_add_domain(). > > > > > > Also place the mutex outside the iommufd_device_do_attach() call, > similar > > > to what's in the iommufd_device_auto_get_domain() function. > > > > > > Co-developed-by: Yi Liu <yi.l.liu@xxxxxxxxx> > > > Signed-off-by: Yi Liu <yi.l.liu@xxxxxxxxx> > > > Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> > > > Signed-off-by: Nicolin Chen <nicolinc@xxxxxxxxxx> > > > > shouldn't this be a separate bug fix and backported? double adding a > > list item would certainly clobber the list... > > AFAIK there is no bug, this is just reorganizing things > there is semantics change. here is the current code: case IOMMUFD_OBJ_HW_PAGETABLE: { struct iommufd_hw_pagetable *hwpt = container_of(pt_obj, struct iommufd_hw_pagetable, obj); rc = iommufd_device_do_attach(idev, hwpt); if (rc) goto out_put_pt_obj; mutex_lock(&hwpt->ioas->mutex); list_add_tail(&hwpt->hwpt_item, &hwpt->ioas->hwpt_list); mutex_unlock(&hwpt->ioas->mutex); break; } Above means every attach to hwpt will try to add the hwpt to the list tail. Isn't it a bug? with this patch the hwpt is added to the list only when it's attached by the first device, i.e. when iopt_table_add_domain() is called. if (!iommufd_hw_pagetable_has_group(hwpt, idev->group)) { rc = iommu_attach_group(hwpt->domain, idev->group); if (rc) goto out_iova; if (list_empty(&hwpt->devices)) { rc = iopt_table_add_domain(&hwpt->ioas->iopt, hwpt->domain); if (rc) goto out_detach; list_add_tail(&hwpt->hwpt_item, &hwpt->ioas->hwpt_list); } } so it's actually a bug fix.