On 11/27/15 at 12:35pm, Joerg Roedel wrote:
> On Fri, Nov 06, 2015 at 08:10:49PM +0800, Baoquan He wrote:
> > Signed-off-by: Baoquan He <[email protected]>
>
> Missing patch description.
>
> > ---
> > drivers/iommu/amd_iommu.c | 19 +++++------
> > drivers/iommu/amd_iommu_init.c | 71
> > ++++++++++++++++++++++++------------------
> > 2 files changed, 49 insertions(+), 41 deletions(-)
> >
> > diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
> > index 48bcd83..90c6205 100644
> > --- a/drivers/iommu/amd_iommu.c
> > +++ b/drivers/iommu/amd_iommu.c
> > @@ -1992,14 +1992,15 @@ static void do_attach(struct iommu_dev_data
> > *dev_data,
> > /* Update data structures */
> > dev_data->domain = domain;
> > list_add(&dev_data->list, &domain->dev_list);
> > - set_dte_entry(dev_data->devid, domain, ats);
> > + if (!translation_pre_enabled()) {
> > + set_dte_entry(dev_data->devid, domain, ats);
> > + /* Flush the DTE entry */
> > + device_flush_dte(dev_data);
> > + }
>
> Hmm, this patch adds a lot of special cases into the AMD IOMMU code to
> make sure the domain is attached at driver init time.
>
> Can we change the code to generally defer domain attachment to driver
> init time? There is a set_dma_mask call-back in the dma-ops that can be
> used for that.
>
> This would limit the special cases to device table initialization and
> iommu enable time.
Will try set_dma_mask().
>
> > + if ( !translation_pre_enabled()) {
> > + if (flags & ACPI_DEVFLAG_INITPASS)
> > + set_dev_entry_bit(devid, DEV_ENTRY_INIT_PASS);
> > + if (flags & ACPI_DEVFLAG_EXTINT)
> > + set_dev_entry_bit(devid, DEV_ENTRY_EINT_PASS);
> > + if (flags & ACPI_DEVFLAG_NMI)
> > + set_dev_entry_bit(devid, DEV_ENTRY_NMI_PASS);
> > + if (flags & ACPI_DEVFLAG_SYSMGT1)
> > + set_dev_entry_bit(devid, DEV_ENTRY_SYSMGT1);
> > + if (flags & ACPI_DEVFLAG_SYSMGT2)
> > + set_dev_entry_bit(devid, DEV_ENTRY_SYSMGT2);
> > + if (flags & ACPI_DEVFLAG_LINT0)
> > + set_dev_entry_bit(devid, DEV_ENTRY_LINT0_PASS);
> > + if (flags & ACPI_DEVFLAG_LINT1)
> > + set_dev_entry_bit(devid, DEV_ENTRY_LINT1_PASS);
> > +
> > + amd_iommu_apply_erratum_63(devid);
> > + }
>
> This bothers, will the flags still get set when translation is
> pre-enabled?
Yeah, it will call set_dev_entry_from_acpi() to set dev table if do not
check here.
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu