drm/i915: add a helper to free the members of i915_params
authorJani Nikula <jani.nikula@intel.com>
Thu, 27 Dec 2018 14:33:38 +0000 (16:33 +0200)
committerJani Nikula <jani.nikula@intel.com>
Mon, 31 Dec 2018 13:27:00 +0000 (15:27 +0200)
Abstract the one user in anticipation of more. Set the dangling pointers
to NULL while at it.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/8637d1e5049dc003718772f19d664aeaf9540856.1545920737.git.jani.nikula@intel.com
drivers/gpu/drm/i915/i915_gpu_error.c
drivers/gpu/drm/i915/i915_params.c
drivers/gpu/drm/i915/i915_params.h

index 8c04479c158623bac7303b2b85da9f9971b892c1..2bd7991ec9afc8ac4723e90643020917c419f0fd 100644 (file)
@@ -963,17 +963,10 @@ static void i915_error_object_free(struct drm_i915_error_object *obj)
        kfree(obj);
 }
 
-static __always_inline void free_param(const char *type, void *x)
-{
-       if (!__builtin_strcmp(type, "char *"))
-               kfree(*(void **)x);
-}
 
 static void cleanup_params(struct i915_gpu_state *error)
 {
-#define FREE(T, x, ...) free_param(#T, &error->params.x);
-       I915_PARAMS_FOR_EACH(FREE);
-#undef FREE
+       i915_params_free(&error->params);
 }
 
 static void cleanup_uc_state(struct i915_gpu_state *error)
index ae3ece4ec7abe466f6d6180665a20e3515a6546b..81c73bfc799185131b728863cb9fb5d87f410942 100644 (file)
@@ -217,3 +217,19 @@ void i915_params_copy(struct i915_params *dest, const struct i915_params *src)
        I915_PARAMS_FOR_EACH(DUP);
 #undef DUP
 }
+
+static __always_inline void free_param(const char *type, void *x)
+{
+       if (!__builtin_strcmp(type, "char *")) {
+               kfree(*(void **)x);
+               *(void **)x = NULL;
+       }
+}
+
+/* free the allocated members, *not* the passed in params itself */
+void i915_params_free(struct i915_params *params)
+{
+#define FREE(T, x, ...) free_param(#T, &params->x);
+       I915_PARAMS_FOR_EACH(FREE);
+#undef FREE
+}
index fd1cf9415e60e2cde8a2eb263e36012717383066..93f665eced16ca6b650d96f53187b046a539a050 100644 (file)
@@ -79,6 +79,7 @@ extern struct i915_params i915_modparams __read_mostly;
 
 void i915_params_dump(const struct i915_params *params, struct drm_printer *p);
 void i915_params_copy(struct i915_params *dest, const struct i915_params *src);
+void i915_params_free(struct i915_params *params);
 
 #endif