Messages in this thread | | | Date | Wed, 6 Jul 2022 09:39:40 +0800 | Subject | Re: [PATCH v3 01/15] iommu/vt-d: Handle race between registration and device probe | From | Baolu Lu <> |
| |
On 2022/7/6 01:08, Robin Murphy wrote: > Currently we rely on registering all our instances before initially > allowing any .probe_device calls via bus_set_iommu(). In preparation for > phasing out the latter, make sure we won't inadvertently return success > for a device associated with a known but not yet registered instance, > otherwise we'll run straight into iommu_group_get_for_dev() trying to > use NULL ops. > > That also highlights an issue with intel_iommu_get_resv_regions() taking > dmar_global_lock from within a section where intel_iommu_init() already > holds it, which already exists via probe_acpi_namespace_devices() when > an ANDD device is probed, but gets more obvious with the upcoming change > to iommu_device_register(). Since they are both read locks it manages > not to deadlock in practice, so I'm leaving it here for someone with > more confidence to tackle a larger rework of the locking.
Thanks for highlighting this. I will look into it later.
Best regards, baolu
> > Signed-off-by: Robin Murphy <robin.murphy@arm.com> > --- > > v3: New > > drivers/iommu/intel/iommu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c > index 44016594831d..3e02c08802a0 100644 > --- a/drivers/iommu/intel/iommu.c > +++ b/drivers/iommu/intel/iommu.c > @@ -4600,7 +4600,7 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev) > u8 bus, devfn; > > iommu = device_to_iommu(dev, &bus, &devfn); > - if (!iommu) > + if (!iommu || !iommu->iommu.ops) > return ERR_PTR(-ENODEV); > > info = kzalloc(sizeof(*info), GFP_KERNEL);
| |