Joerg, On 1/16/19 8:26 PM, j...@8bytes.org wrote: > How about the attached diff? If > I understand the problem correctly, it should fix the problem more > reliably. > > Thanks, > > Joerg > > diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c > index 87ba23a75b38..dc1e2a8a19d7 100644 > --- a/drivers/iommu/amd_iommu.c > +++ b/drivers/iommu/amd_iommu.c > @@ -1991,25 +1991,36 @@ static void do_attach(struct iommu_dev_data *dev_data, > > static void do_detach(struct iommu_dev_data *dev_data) > { > + struct protection_domain *domain = dev_data->domain; > struct amd_iommu *iommu; > u16 alias; > > iommu = amd_iommu_rlookup_table[dev_data->devid]; > alias = dev_data->alias; > > - /* decrease reference counters */ > - dev_data->domain->dev_iommu[iommu->index] -= 1; > - dev_data->domain->dev_cnt -= 1; > - > /* Update data structures */ > dev_data->domain = NULL; > list_del(&dev_data->list); > - clear_dte_entry(dev_data->devid); > - if (alias != dev_data->devid) > - clear_dte_entry(alias); > > + clear_dte_entry(dev_data->devid); > /* Flush the DTE entry */ > device_flush_dte(dev_data); > + > + if (alias != dev_data->devid) { > + clear_dte_entry(alias); > + /* Flush the Alias DTE entry */ > + device_flush_dte(alias); > + } > +
Actually, device_flush_dte(alias) should be needed regardless of this patch. Are you planning to add this? Regards, Suravee