Linux IOMMU Development
 help / color / mirror / Atom feed
From: Dmitry Osipenko <dmitry.osipenko@collabora.com>
To: Thierry Reding <treding@nvidia.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Dmitry Osipenko <digetx@gmail.com>
Cc: Jon Hunter <jonathanh@nvidia.com>,
	joro@8bytes.org, will@kernel.org, iommu@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org, baolu.lu@linux.intel.com,
	kevin.tian@intel.com, suravee.suthikulpanit@amd.com,
	vasant.hegde@amd.com, mjrosato@linux.ibm.com,
	schnelle@linux.ibm.com, linux-kernel@vger.kernel.org,
	"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>
Subject: Re: [PATCH v4 05/16] iommu: Move bus setup to IOMMU device registration
Date: Thu, 6 Oct 2022 21:43:09 +0300	[thread overview]
Message-ID: <eeeb8199-e315-422b-4567-6139b9b27fde@collabora.com> (raw)
In-Reply-To: <Yz8Mabz/SL7gG9VA@orome>

On 10/6/22 20:12, Thierry Reding wrote:
> On Thu, Oct 06, 2022 at 04:27:39PM +0100, Robin Murphy wrote:
>> On 2022-10-06 15:01, Jon Hunter wrote:
>>> Hi Robin,
>>>
>>> On 15/08/2022 17:20, Robin Murphy wrote:
>>>> Move the bus setup to iommu_device_register(). This should allow
>>>> bus_iommu_probe() to be correctly replayed for multiple IOMMU instances,
>>>> and leaves bus_set_iommu() as a glorified no-op to be cleaned up next.
>>>>
>>>> At this point we can also handle cleanup better than just rolling back
>>>> the most-recently-touched bus upon failure - which may release devices
>>>> owned by other already-registered instances, and still leave devices on
>>>> other buses with dangling pointers to the failed instance. Now it's easy
>>>> to clean up the exact footprint of a given instance, no more, no less.
>>>
>>>
>>> Since this change, I have noticed that the DRM driver on Tegra20 is
>>> failing to probe and I am seeing ...
>>>
>>>   tegra-gr2d 54140000.gr2d: failed to attach to domain: -19
>>>   drm drm: failed to initialize 54140000.gr2d: -19

The upstream Tegra20 device-tree doesn't have IOMMU phandle for
54140000.gr2d. In this case IOMMU domain shouldn't be available for the
DRM driver [1]. Sounds like IOMMU core has a bug.

[1]
https://elixir.bootlin.com/linux/latest/source/drivers/iommu/tegra-gart.c#L243

>>> Bisect points to this change and reverting it fixes it. Let me know if
>>> you have any thoughts.
>>
>> Oh, apparently what's happened is that I've inadvertently enabled the
>> tegra-gart driver, since it seems that *wasn't* calling bus_set_iommu()
>> before. Looking at the history, it appears to have been that way since
>> c7e3ca515e78 ("iommu/tegra: gart: Do not register with bus"), so essentially
>> that driver has been broken and useless for close to 8 years now :(
>>
>> Given that, I'd be inclined to "fix" it as below, or just give up and delete
>> the whole thing.
> 
> I'm inclined to agree. GART is severely limited: it provides a single
> IOMMU domain with an aperture of 32 MiB. It's close to useless for
> anything we would want to do and my understanding is that people have
> been falling back to CMA for any graphics/display stuff that the GART
> would've been useful for.
> 
> Given that nobody's felt the urge to fix this for the past 8 years, I
> don't think there's enough interest in this to keep it going.
> 
> Dmitry, any thoughts?

This GART driver is used by a community kernel fork that has alternative
DRM driver supporting IOMMU/GART on Tegra20. The fork is periodically
synced with the latest upstream, it's used by postmarketOS. Hence it
wasn't a completely dead driver.

The 32M aperture works well for 2d/3d engines because it fits multiple
textures at once. Tegra DRM driver needs to remap buffers dynamically,
but this is easy to implement because DRM core has nice helpers for
that. We haven't got to the point where upstream DRM driver is ready to
support this feature.

CMA is hard to use for anything other than display framebuffers. It's
slow and fails to allocate memory if CMA area is "shared" due to
fragmentation and pinned pages. Reserved CMA isn't an option for GPU
because then there is no memory for the rest of system.

I don't see any problems with removing GART driver. It's not going to be
used soon in upstream and only adds maintenance burden. We can always
re-add it in the future.

-- 
Best regards,
Dmitry


  reply	other threads:[~2022-10-06 18:43 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-15 16:20 [PATCH v4 00/16] iommu: retire bus_set_iommu() Robin Murphy
2022-08-15 16:20 ` [PATCH v4 01/16] iommu/vt-d: Handle race between registration and device probe Robin Murphy
2022-08-15 16:20 ` [PATCH v4 02/16] iommu/amd: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 03/16] iommu/s390: Fail probe for non-PCI devices Robin Murphy
2022-08-15 16:20 ` [PATCH v4 04/16] iommu: Always register bus notifiers Robin Murphy
2022-08-18  7:34   ` Tian, Kevin
2022-09-07 18:50   ` Saravana Kannan
2022-09-07 20:27     ` Robin Murphy
2022-08-15 16:20 ` [PATCH v4 05/16] iommu: Move bus setup to IOMMU device registration Robin Murphy
2022-10-06 14:01   ` Jon Hunter
2022-10-06 15:27     ` Robin Murphy
2022-10-06 17:12       ` Thierry Reding
2022-10-06 18:43         ` Dmitry Osipenko [this message]
2022-10-18  6:13       ` Jon Hunter
2022-10-18 21:12         ` Dmitry Osipenko
2022-10-12 16:28   ` Alex Williamson
2022-10-13  1:08     ` Baolu Lu
2022-08-15 16:20 ` [PATCH v4 06/16] iommu/amd: Clean up bus_set_iommu() Robin Murphy
2022-08-15 16:20 ` [PATCH v4 07/16] iommu/arm-smmu: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 08/16] iommu/arm-smmu-v3: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 09/16] iommu/dart: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 10/16] iommu/exynos: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 11/16] iommu/ipmmu-vmsa: " Robin Murphy
2022-08-16  0:25   ` kernel test robot
2022-08-15 16:20 ` [PATCH v4 12/16] iommu/mtk: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 13/16] iommu/omap: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 14/16] iommu/tegra-smmu: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 15/16] iommu/virtio: " Robin Murphy
2022-08-15 16:20 ` [PATCH v4 16/16] iommu: " Robin Murphy
2022-09-07 12:27 ` [PATCH v4 00/16] iommu: retire bus_set_iommu() Joerg Roedel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=eeeb8199-e315-422b-4567-6139b9b27fde@collabora.com \
    --to=dmitry.osipenko@collabora.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=digetx@gmail.com \
    --cc=iommu@lists.linux.dev \
    --cc=jonathanh@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mjrosato@linux.ibm.com \
    --cc=robin.murphy@arm.com \
    --cc=schnelle@linux.ibm.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=treding@nvidia.com \
    --cc=vasant.hegde@amd.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox