Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3546fb0c authored by Lucas Stach's avatar Lucas Stach
Browse files

drm/etnaviv: trick drm_mm into giving out a low IOVA



After rollover of the IOVA space, we want to get a low IOVA address,
otherwise the the games we play by remembering the last IOVA are
pointless. When we search for a free hole with DRM_MM_SEARCH_DEFAULT,
drm_mm will pop the next entry from the free holes stack, which will
likely be a high IOVA. By using DRM_MM_SEARCH_BELOW we can trick
drm_mm into reversing the search and provide us with a low IOVA.

Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Reviewed-by: default avatarWladimir van der Laan <laanwj@gmail.com>
parent 7ce7d89f
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -116,9 +116,14 @@ static int etnaviv_iommu_find_iova(struct etnaviv_iommu *mmu,
		struct list_head list;
		bool found;

		/*
		 * XXX: The DRM_MM_SEARCH_BELOW is really a hack to trick
		 * drm_mm into giving out a low IOVA after address space
		 * rollover. This needs a proper fix.
		 */
		ret = drm_mm_insert_node_in_range(&mmu->mm, node,
			size, 0, mmu->last_iova, ~0UL,
			DRM_MM_SEARCH_DEFAULT);
			mmu->last_iova ? DRM_MM_SEARCH_DEFAULT : DRM_MM_SEARCH_BELOW);

		if (ret != -ENOSPC)
			break;