Message ID | 20220714103143.1704573-1-l.stach@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm/etnaviv: move idle mapping reaping into separate function | expand |
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@vger.kernel.org # 5.19 > Signed-off-by: Lucas Stach <l.stach@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@sigxcpu.org> Cheers, -- Guido > -- > 2.30.2 >
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,
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@vger.kernel.org # 5.19 Signed-off-by: Lucas Stach <l.stach@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(-)