On Fri, Jul 23, 2021 at 2:29 PM Daniel Vetter daniel.vetter@ffwll.ch wrote:
With the global kmem_cache shrink infrastructure gone there's nothing special and we can convert them over.
I'm doing this split up into each patch because there's quite a bit of noise with removing the static global.slab_cache to just a slab_cache.
Cc: Jason Ekstrand jason@jlekstrand.net Signed-off-by: Daniel Vetter daniel.vetter@intel.com
drivers/gpu/drm/i915/i915_active.c | 31 ++++++++++------------------- drivers/gpu/drm/i915/i915_active.h | 3 +++ drivers/gpu/drm/i915/i915_globals.c | 2 -- drivers/gpu/drm/i915/i915_globals.h | 1 - drivers/gpu/drm/i915/i915_pci.c | 2 ++ 5 files changed, 16 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c index 91723123ae9f..9ffeb77eb5bb 100644 --- a/drivers/gpu/drm/i915/i915_active.c +++ b/drivers/gpu/drm/i915/i915_active.c @@ -13,7 +13,6 @@
#include "i915_drv.h" #include "i915_active.h" -#include "i915_globals.h"
/*
- Active refs memory management
@@ -22,10 +21,7 @@
- they idle (when we know the active requests are inactive) and allocate the
- nodes from a local slab cache to hopefully reduce the fragmentation.
*/ -static struct i915_global_active {
struct i915_global base;
struct kmem_cache *slab_cache;
-} global; +struct kmem_cache *slab_cache;
static? Or were you planning to expose it somehow? With that fixed,
Reviewed-by: Jason Ekstrand jason@jlekstrand.net
struct active_node { struct rb_node node; @@ -174,7 +170,7 @@ __active_retire(struct i915_active *ref) /* Finally free the discarded timeline tree */ rbtree_postorder_for_each_entry_safe(it, n, &root, node) { GEM_BUG_ON(i915_active_fence_isset(&it->base));
kmem_cache_free(global.slab_cache, it);
kmem_cache_free(slab_cache, it); }
}
@@ -322,7 +318,7 @@ active_instance(struct i915_active *ref, u64 idx) * XXX: We should preallocate this before i915_active_ref() is ever * called, but we cannot call into fs_reclaim() anyway, so use GFP_ATOMIC. */
node = kmem_cache_alloc(global.slab_cache, GFP_ATOMIC);
node = kmem_cache_alloc(slab_cache, GFP_ATOMIC); if (!node) goto out;
@@ -788,7 +784,7 @@ void i915_active_fini(struct i915_active *ref) mutex_destroy(&ref->mutex);
if (ref->cache)
kmem_cache_free(global.slab_cache, ref->cache);
kmem_cache_free(slab_cache, ref->cache);
}
static inline bool is_idle_barrier(struct active_node *node, u64 idx) @@ -908,7 +904,7 @@ int i915_active_acquire_preallocate_barrier(struct i915_active *ref, node = reuse_idle_barrier(ref, idx); rcu_read_unlock(); if (!node) {
node = kmem_cache_alloc(global.slab_cache, GFP_KERNEL);
node = kmem_cache_alloc(slab_cache, GFP_KERNEL); if (!node) goto unwind;
@@ -956,7 +952,7 @@ int i915_active_acquire_preallocate_barrier(struct i915_active *ref, atomic_dec(&ref->count); intel_engine_pm_put(barrier_to_engine(node));
kmem_cache_free(global.slab_cache, node);
kmem_cache_free(slab_cache, node); } return -ENOMEM;
} @@ -1176,21 +1172,16 @@ struct i915_active *i915_active_create(void) #include "selftests/i915_active.c" #endif
-static void i915_global_active_exit(void) +void i915_active_module_exit(void) {
kmem_cache_destroy(global.slab_cache);
kmem_cache_destroy(slab_cache);
}
-static struct i915_global_active global = { {
.exit = i915_global_active_exit,
-} };
-int __init i915_global_active_init(void) +int __init i915_active_module_init(void) {
global.slab_cache = KMEM_CACHE(active_node, SLAB_HWCACHE_ALIGN);
if (!global.slab_cache)
slab_cache = KMEM_CACHE(active_node, SLAB_HWCACHE_ALIGN);
if (!slab_cache) return -ENOMEM;
i915_global_register(&global.base); return 0;
} diff --git a/drivers/gpu/drm/i915/i915_active.h b/drivers/gpu/drm/i915/i915_active.h index d0feda68b874..5fcdb0e2bc9e 100644 --- a/drivers/gpu/drm/i915/i915_active.h +++ b/drivers/gpu/drm/i915/i915_active.h @@ -247,4 +247,7 @@ static inline int __i915_request_await_exclusive(struct i915_request *rq, return err; }
+void i915_active_module_exit(void); +int i915_active_module_init(void);
#endif /* _I915_ACTIVE_H_ */ diff --git a/drivers/gpu/drm/i915/i915_globals.c b/drivers/gpu/drm/i915/i915_globals.c index 91198f5b0a06..a53135ee831d 100644 --- a/drivers/gpu/drm/i915/i915_globals.c +++ b/drivers/gpu/drm/i915/i915_globals.c @@ -7,7 +7,6 @@ #include <linux/slab.h> #include <linux/workqueue.h>
-#include "i915_active.h" #include "i915_buddy.h" #include "gem/i915_gem_context.h" #include "gem/i915_gem_object.h" @@ -34,7 +33,6 @@ static void __i915_globals_cleanup(void) }
static __initconst int (* const initfn[])(void) = {
i915_global_active_init, i915_global_buddy_init, i915_global_context_init, i915_global_gem_context_init,
diff --git a/drivers/gpu/drm/i915/i915_globals.h b/drivers/gpu/drm/i915/i915_globals.h index 9e6b4fd07528..d80901ba75e3 100644 --- a/drivers/gpu/drm/i915/i915_globals.h +++ b/drivers/gpu/drm/i915/i915_globals.h @@ -23,7 +23,6 @@ int i915_globals_init(void); void i915_globals_exit(void);
/* constructors */ -int i915_global_active_init(void); int i915_global_context_init(void); int i915_global_gem_context_init(void); int i915_global_objects_init(void); diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c index 0deaeeba2347..6ee77a8f43d6 100644 --- a/drivers/gpu/drm/i915/i915_pci.c +++ b/drivers/gpu/drm/i915/i915_pci.c @@ -30,6 +30,7 @@
#include "display/intel_fbdev.h"
+#include "i915_active.h" #include "i915_drv.h" #include "i915_perf.h" #include "i915_globals.h" @@ -1293,6 +1294,7 @@ static const struct { void (*exit)(void); } init_funcs[] = { { i915_check_nomodeset, NULL },
{ i915_active_module_init, i915_active_module_exit }, { i915_globals_init, i915_globals_exit }, { i915_mock_selftests, NULL }, { i915_pmu_init, i915_pmu_exit },
-- 2.32.0