aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_context.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2019-03-05 21:38:30 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2019-03-06 10:00:50 +0000
commit103b76eeff2e86cad489a54e6003d0173df76bde (patch)
treea33db60570ef59918a2b2fb9c62532c075e2844a /drivers/gpu/drm/i915/i915_gem_context.c
parentdrm/i915/icl: Default to Thread Group preemption for compute workloads (diff)
downloadlinux-dev-103b76eeff2e86cad489a54e6003d0173df76bde.tar.xz
linux-dev-103b76eeff2e86cad489a54e6003d0173df76bde.zip
drm/i915: Use i915_global_register()
Rather than manually add every new global into each hook, use i915_global_register() function and keep a list of registered globals to invoke instead. However, I haven't found a way for random drivers to add an .init table to avoid having to manually add ourselves to i915_globals_init() each time. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190305213830.18094-1-chris@chris-wilson.co.uk Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_context.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 1e3211e909f1..b9f321947982 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -88,6 +88,7 @@
#include <linux/log2.h>
#include <drm/i915_drm.h>
#include "i915_drv.h"
+#include "i915_globals.h"
#include "i915_trace.h"
#include "intel_lrc_reg.h"
#include "intel_workarounds.h"
@@ -95,6 +96,7 @@
#define ALL_L3_SLICES(dev) (1 << NUM_L3_SLICES(dev)) - 1
static struct i915_global_context {
+ struct i915_global base;
struct kmem_cache *slab_luts;
} global;
@@ -1423,21 +1425,27 @@ out_unlock:
#include "selftests/i915_gem_context.c"
#endif
-int __init i915_global_context_init(void)
+static void i915_global_context_shrink(void)
{
- global.slab_luts = KMEM_CACHE(i915_lut_handle, 0);
- if (!global.slab_luts)
- return -ENOMEM;
-
- return 0;
+ kmem_cache_shrink(global.slab_luts);
}
-void i915_global_context_shrink(void)
+static void i915_global_context_exit(void)
{
- kmem_cache_shrink(global.slab_luts);
+ kmem_cache_destroy(global.slab_luts);
}
-void i915_global_context_exit(void)
+static struct i915_global_context global = { {
+ .shrink = i915_global_context_shrink,
+ .exit = i915_global_context_exit,
+} };
+
+int __init i915_global_context_init(void)
{
- kmem_cache_destroy(global.slab_luts);
+ global.slab_luts = KMEM_CACHE(i915_lut_handle, 0);
+ if (!global.slab_luts)
+ return -ENOMEM;
+
+ i915_global_register(&global.base);
+ return 0;
}