Messages in this thread | | | From | "Tian, Kevin" <> | Subject | RE: [PATCH v2 07/10] iommufd/device: Make hwpt_list list_add/del symmetric | Date | Fri, 10 Feb 2023 01:46:18 +0000 |
| |
> From: Jason Gunthorpe <jgg@nvidia.com> > 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@nvidia.com> > > > 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@intel.com> > > > Signed-off-by: Yi Liu <yi.l.liu@intel.com> > > > Reviewed-by: Kevin Tian <kevin.tian@intel.com> > > > Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> > > > > 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.
| |