On 29/09/2026 04:44, Adrián Larumbe wrote: > The device init function feels a bit cluttered with things that should be > done in the specific subsystems where those locks and lists are being > used. Same goes for module parameters, it's best to limit them to the > subsystems where they're relevant. > > Then we can also discard panfrost_drv.h since the transparent_huge_page > doesn't need to be accessed elsewhere. We can also simplify the > creation of a mount point, because drm_gem_get_huge_mnt() would never > return NULL if drm_gem_huge_mnt_create() returns 0 when kernel is built > with support for transparent huge pages. > > Signed-off-by: Adrián Larumbe <[email protected]> > Reviewed-by: Boris Brezillon <[email protected]>
Reviewed-by: Steven Price <[email protected]> > --- > drivers/gpu/drm/panfrost/panfrost_device.c | 7 ------- > drivers/gpu/drm/panfrost/panfrost_drv.c | 10 ---------- > drivers/gpu/drm/panfrost/panfrost_drv.h | 9 --------- > drivers/gpu/drm/panfrost/panfrost_gem.c | 19 +++++++++++++------ > drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 3 +++ > drivers/gpu/drm/panfrost/panfrost_gpu.c | 2 ++ > drivers/gpu/drm/panfrost/panfrost_job.c | 1 + > drivers/gpu/drm/panfrost/panfrost_mmu.c | 3 +++ > 8 files changed, 22 insertions(+), 32 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c > b/drivers/gpu/drm/panfrost/panfrost_device.c > index 05c40d5a20b5..c1a2e93a2b9b 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_device.c > +++ b/drivers/gpu/drm/panfrost/panfrost_device.c > @@ -216,13 +216,6 @@ int panfrost_device_init(struct panfrost_device *pfdev) > { > int err; > > - mutex_init(&pfdev->sched_lock); > - INIT_LIST_HEAD(&pfdev->as_lru_list); > - > - spin_lock_init(&pfdev->as_lock); > - > - spin_lock_init(&pfdev->cycle_counter.lock); > - > #ifdef CONFIG_DEBUG_FS > mutex_init(&pfdev->debugfs.gems_lock); > INIT_LIST_HEAD(&pfdev->debugfs.gems_list); > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c > b/drivers/gpu/drm/panfrost/panfrost_drv.c > index 9882a3ede75f..59af79a534fa 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > @@ -21,7 +21,6 @@ > #include <drm/drm_utils.h> > > #include "panfrost_device.h" > -#include "panfrost_drv.h" > #include "panfrost_gem.h" > #include "panfrost_mmu.h" > #include "panfrost_job.h" > @@ -955,12 +954,6 @@ static const struct drm_driver panfrost_drm_driver = { > #endif > }; > > -#ifdef CONFIG_TRANSPARENT_HUGEPAGE > -bool panfrost_transparent_hugepage = true; > -module_param_named(transparent_hugepage, panfrost_transparent_hugepage, > bool, 0400); > -MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point > with Transparent Hugepage enabled (true = default)"); > -#endif > - > static int panfrost_probe(struct platform_device *pdev) > { > struct panfrost_device *pfdev; > @@ -979,9 +972,6 @@ static int panfrost_probe(struct platform_device *pdev) > > pfdev->coherent = device_get_dma_attr(&pdev->dev) == DEV_DMA_COHERENT; > > - mutex_init(&pfdev->shrinker_lock); > - INIT_LIST_HEAD(&pfdev->shrinker_list); > - > err = panfrost_device_init(pfdev); > if (err) { > if (err != -EPROBE_DEFER) > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.h > b/drivers/gpu/drm/panfrost/panfrost_drv.h > deleted file mode 100644 > index a2277ec61aab..000000000000 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.h > +++ /dev/null > @@ -1,9 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 or MIT */ > -/* Copyright 2025 Amazon.com, Inc. or its affiliates */ > - > -#ifndef __PANFROST_DRV_H__ > -#define __PANFROST_DRV_H__ > - > -extern bool panfrost_transparent_hugepage; > - > -#endif > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c > b/drivers/gpu/drm/panfrost/panfrost_gem.c > index f39c0f50ed4f..383ac8cd5645 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c > @@ -11,20 +11,27 @@ > #include <drm/panfrost_drm.h> > #include <drm/drm_print.h> > #include "panfrost_device.h" > -#include "panfrost_drv.h" > #include "panfrost_gem.h" > #include "panfrost_mmu.h" > > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > +static bool panfrost_transparent_hugepage = true; > +module_param_named(transparent_hugepage, panfrost_transparent_hugepage, > bool, 0400); > +MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point > with Transparent Hugepage enabled (true = default)"); > +#else > +#define panfrost_transparent_hugepage false > +#endif > + > int panfrost_gem_init(struct panfrost_device *pfdev) > { > - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && > panfrost_transparent_hugepage) { > + if (panfrost_transparent_hugepage) { > int err = drm_gem_huge_mnt_create(&pfdev->base, "within_size"); > > - if (drm_gem_get_huge_mnt(&pfdev->base)) > + if (err) > + drm_warn(&pfdev->base, > + "Can't use Transparent Hugepage (%d)\n", err); > + else > drm_info(&pfdev->base, "Using Transparent Hugepage\n"); > - else if (err) > - drm_warn(&pfdev->base, "Can't use Transparent Hugepage > (%d)\n", > - err); > } > > return panfrost_gem_shrinker_init(pfdev); > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > index fefae87535d6..72cd7a165e6d 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > @@ -97,6 +97,9 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, > struct shrink_control *sc) > */ > int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) > { > + mutex_init(&pfdev->shrinker_lock); > + INIT_LIST_HEAD(&pfdev->shrinker_list); > + > pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); > if (!pfdev->shrinker) > return -ENOMEM; > diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c > b/drivers/gpu/drm/panfrost/panfrost_gpu.c > index 7d555e63e21a..8a15ccce08e9 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c > @@ -516,6 +516,8 @@ int panfrost_gpu_init(struct panfrost_device *pfdev) > { > int err; > > + spin_lock_init(&pfdev->cycle_counter.lock); > + > err = panfrost_gpu_soft_reset(pfdev); > if (err) > return err; > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c > b/drivers/gpu/drm/panfrost/panfrost_job.c > index d59b4863b8ad..476c936b54e6 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_job.c > +++ b/drivers/gpu/drm/panfrost/panfrost_job.c > @@ -874,6 +874,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) > > INIT_WORK(&pfdev->reset.work, panfrost_reset_work); > spin_lock_init(&js->job_lock); > + mutex_init(&pfdev->sched_lock); > > js->irq = platform_get_irq_byname(to_platform_device(pfdev->base.dev), > "job"); > if (js->irq < 0) > diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c > b/drivers/gpu/drm/panfrost/panfrost_mmu.c > index 4a3162c3b659..5c393ed6e310 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c > +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c > @@ -955,6 +955,9 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) > { > int err; > > + INIT_LIST_HEAD(&pfdev->as_lru_list); > + spin_lock_init(&pfdev->as_lock); > + > pfdev->mmu_irq = > platform_get_irq_byname(to_platform_device(pfdev->base.dev), "mmu"); > if (pfdev->mmu_irq < 0) > return pfdev->mmu_irq; >
