On Wed, Feb 04, 2015 at 04:31:55PM +0200, Laurent Pinchart wrote:
> Hi Thierry,
> 
> Thank you for the patch.
> 
> On Wednesday 04 February 2015 08:58:08 Thierry Reding wrote:
> > From: Thierry Reding <tred...@nvidia.com>
> > 
> > The OMAP IOMMU driver unconditionally executes code and registers a
> > struct iommu_ops with the platform bus irrespective of whether it runs
> > on an OMAP SoC or not. This causes problems in multi-platform kernels
> > where drivers for other SoCs will no longer be able to register their
> > own struct iommu_ops or even try to use a struct iommu_ops for an IOMMU
> > that obviously isn't there.
> > 
> > The smallest fix I could think of is to check for the existence of any
> > OMAP IOMMU devices in the device tree and skip initialization otherwise.
> >
> > This fixes a problem on Tegra20 where the DRM driver will try to use the
> > obviously non-existent OMAP IOMMU.
> > 
> > Reported-by: Nicolas Chauvet <kwiz...@gmail.com>
> > Cc: Tony Lindgren <t...@atomide.com>
> > Cc: Suman Anna <s-a...@ti.com>
> > Cc: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> > Signed-off-by: Thierry Reding <tred...@nvidia.com>
> > ---
> >  drivers/iommu/omap-iommu.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
> > index bbb7dcef02d3..e4d4f133a3b3 100644
> > --- a/drivers/iommu/omap-iommu.c
> > +++ b/drivers/iommu/omap-iommu.c
> > @@ -1377,6 +1377,9 @@ static int __init omap_iommu_init(void)
> >     const unsigned long flags = SLAB_HWCACHE_ALIGN;
> >     size_t align = 1 << 10; /* L2 pagetable alignement */
> > 
> > +   if (!of_find_matching_node(NULL, omap_iommu_of_match))
> > +           return 0;
> > +
> 
> We should convert the omap-iommu driver to proper DT instantiation, but this 
> should do for now.
> 
> >     p = kmem_cache_create("iopte_cache", IOPTE_TABLE_SIZE, align, flags,
> >                           iopte_cachep_ctor);
> >     if (!p)
> > @@ -1394,6 +1397,9 @@ subsys_initcall(omap_iommu_init);
> > 
> >  static void __exit omap_iommu_exit(void)
> >  {
> > +   if (!of_find_matching_node(NULL, omap_iommu_of_match))
> > +           return;
> > +
> >     kmem_cache_destroy(iopte_cachep);
> > 
> >     platform_driver_unregister(&omap_iommu_driver);
> 
> The exit function will never be called as the omap-iommu driver is always 
> built-in. You could just remove the exit function.

I've omitted this hunk since this code will not run anyway. I agree that
we should remove the code altogether if it's dead anyway, but that kind
of cleanup isn't really suitable for patches this late in the release
cycle.

Thierry

Attachment: pgpFdkkLRbqHi.pgp
Description: PGP signature

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to