[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAPL0++4_Qa+dxzQ2k6BJi_o+VSSrHEtomYgVmRqjtjsOfHbGew@mail.gmail.com>
Date: Mon, 6 May 2019 16:27:09 +0100
From: Tom Murphy <tmurphy@...sta.com>
To: Lu Baolu <baolu.lu@...ux.intel.com>
Cc: iommu@...ts.linux-foundation.org, Tom Murphy <murphyt7@....ie>,
Joerg Roedel <joro@...tes.org>,
Will Deacon <will.deacon@....com>,
Robin Murphy <robin.murphy@....com>,
Marek Szyprowski <m.szyprowski@...sung.com>,
Kukjin Kim <kgene@...nel.org>,
Krzysztof Kozlowski <krzk@...nel.org>,
David Woodhouse <dwmw2@...radead.org>,
Andy Gross <andy.gross@...aro.org>,
David Brown <david.brown@...aro.org>,
Matthias Brugger <matthias.bgg@...il.com>,
Rob Clark <robdclark@...il.com>,
Heiko Stuebner <heiko@...ech.de>,
Gerald Schaefer <gerald.schaefer@...ibm.com>,
Thierry Reding <thierry.reding@...il.com>,
Jonathan Hunter <jonathanh@...dia.com>,
Alex Williamson <alex.williamson@...hat.com>,
Thomas Gleixner <tglx@...utronix.de>,
Marc Zyngier <marc.zyngier@....com>,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-samsung-soc@...r.kernel.org, linux-arm-msm@...r.kernel.org,
linux-mediatek@...ts.infradead.org,
linux-rockchip@...ts.infradead.org, linux-s390@...r.kernel.org,
linux-tegra@...r.kernel.org, kvm@...r.kernel.org
Subject: Re: [RFC 1/7] iommu/vt-d: Set the dma_ops per device so we can remove
the iommu_no_mapping code
On Mon, May 6, 2019 at 2:48 AM Lu Baolu <baolu.lu@...ux.intel.com> wrote:
>
> Hi,
>
> On 5/4/19 9:23 PM, Tom Murphy wrote:
> > Set the dma_ops per device so we can remove the iommu_no_mapping code.
> >
> > Signed-off-by: Tom Murphy<tmurphy@...sta.com>
> > ---
> > drivers/iommu/intel-iommu.c | 85 +++----------------------------------
> > 1 file changed, 6 insertions(+), 79 deletions(-)
> >
> > diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
> > index eace915602f0..2db1dc47e7e4 100644
> > --- a/drivers/iommu/intel-iommu.c
> > +++ b/drivers/iommu/intel-iommu.c
> > @@ -2622,17 +2622,6 @@ static int __init si_domain_init(int hw)
> > return 0;
> > }
> >
> > -static int identity_mapping(struct device *dev)
> > -{
> > - struct device_domain_info *info;
> > -
> > - info = dev->archdata.iommu;
> > - if (info && info != DUMMY_DEVICE_DOMAIN_INFO)
> > - return (info->domain == si_domain);
> > -
> > - return 0;
> > -}
> > -
> > static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev)
> > {
> > struct dmar_domain *ndomain;
> > @@ -3270,43 +3259,6 @@ static unsigned long intel_alloc_iova(struct device *dev,
> > return iova_pfn;
> > }
> >
> > -/* Check if the dev needs to go through non-identity map and unmap process.*/
> > -static int iommu_no_mapping(struct device *dev)
> > -{
> > - int found;
> > -
> > - if (iommu_dummy(dev))
> > - return 1;
> > -
> > - found = identity_mapping(dev);
> > - if (found) {
> > - /*
> > - * If the device's dma_mask is less than the system's memory
> > - * size then this is not a candidate for identity mapping.
> > - */
> > - u64 dma_mask = *dev->dma_mask;
> > -
> > - if (dev->coherent_dma_mask &&
> > - dev->coherent_dma_mask < dma_mask)
> > - dma_mask = dev->coherent_dma_mask;
> > -
> > - if (dma_mask < dma_get_required_mask(dev)) {
> > - /*
> > - * 32 bit DMA is removed from si_domain and fall back
> > - * to non-identity mapping.
> > - */
> > - dmar_remove_one_dev_info(dev);
> > - dev_warn(dev, "32bit DMA uses non-identity mapping\n");
> > -
> > - return 0;
> > - }
>
> The iommu_no_mapping() also checks whether any 32bit DMA device uses
> identity mapping. The device might not work if the system memory space
> is bigger than 4G.
It looks like their is actually a bug in the v3 of the "iommu/vt-d:
Delegate DMA domain to generic iommu" patch set. I will leave a
message in that email thread. Fixing that bug should also fix this
issue.
>
> Will you add this to other place, or it's unnecessary?
>
> Best regards,
> Lu Baolu
Powered by blists - more mailing lists