[PATCH 1/2] drm/etnaviv: move idle mapping reaping into separate function
Guido Günther
agx at sigxcpu.org
Wed Aug 24 07:27:35 UTC 2022
Hi,
On Thu, Jul 14, 2022 at 12:31:42PM +0200, Lucas Stach wrote:
> The same logic is already used in two different places and now
> it will also be needed outside of the compilation unit, so split
> it into a separate function.
>
> Cc: stable at vger.kernel.org # 5.19
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
> drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 23 +++++++++++++++--------
> drivers/gpu/drm/etnaviv/etnaviv_mmu.h | 1 +
> 2 files changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
> index dc1aa738c4f1..55479cb8b1ac 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
> @@ -135,6 +135,19 @@ static void etnaviv_iommu_remove_mapping(struct etnaviv_iommu_context *context,
> drm_mm_remove_node(&mapping->vram_node);
> }
>
> +void etnaviv_iommu_reap_mapping(struct etnaviv_vram_mapping *mapping)
> +{
> + struct etnaviv_iommu_context *context = mapping->context;
> +
> + lockdep_assert_held(&context->lock);
> + WARN_ON(mapping->use);
> +
> + etnaviv_iommu_remove_mapping(context, mapping);
> + etnaviv_iommu_context_put(mapping->context);
> + mapping->context = NULL;
> + list_del_init(&mapping->mmu_node);
> +}
> +
> static int etnaviv_iommu_find_iova(struct etnaviv_iommu_context *context,
> struct drm_mm_node *node, size_t size)
> {
> @@ -202,10 +215,7 @@ static int etnaviv_iommu_find_iova(struct etnaviv_iommu_context *context,
> * this mapping.
> */
> list_for_each_entry_safe(m, n, &list, scan_node) {
> - etnaviv_iommu_remove_mapping(context, m);
> - etnaviv_iommu_context_put(m->context);
> - m->context = NULL;
> - list_del_init(&m->mmu_node);
> + etnaviv_iommu_reap_mapping(m);
> list_del_init(&m->scan_node);
> }
>
> @@ -257,10 +267,7 @@ static int etnaviv_iommu_insert_exact(struct etnaviv_iommu_context *context,
> }
>
> list_for_each_entry_safe(m, n, &scan_list, scan_node) {
> - etnaviv_iommu_remove_mapping(context, m);
> - etnaviv_iommu_context_put(m->context);
> - m->context = NULL;
> - list_del_init(&m->mmu_node);
> + etnaviv_iommu_reap_mapping(m);
> list_del_init(&m->scan_node);
> }
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.h b/drivers/gpu/drm/etnaviv/etnaviv_mmu.h
> index e4a0b7d09c2e..c01a147f0dfd 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.h
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.h
> @@ -91,6 +91,7 @@ int etnaviv_iommu_map_gem(struct etnaviv_iommu_context *context,
> struct etnaviv_vram_mapping *mapping, u64 va);
> void etnaviv_iommu_unmap_gem(struct etnaviv_iommu_context *context,
> struct etnaviv_vram_mapping *mapping);
> +void etnaviv_iommu_reap_mapping(struct etnaviv_vram_mapping *mapping);
>
> int etnaviv_iommu_get_suballoc_va(struct etnaviv_iommu_context *ctx,
> struct etnaviv_vram_mapping *mapping,
Reviewed-by: Guido Günther <agx at sigxcpu.org>
Cheers,
-- Guido
> --
> 2.30.2
>
More information about the etnaviv
mailing list