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@xxxxxxxxxxxxxxx # 5.19 > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxx> Cheers, -- Guido > -- > 2.30.2 >