diff mbox

[3/3] drm/i915/debugfs: Highlight modified i915 params

Message ID 20170608150734.42296-4-michal.wajdeczko@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michal Wajdeczko June 8, 2017, 3:07 p.m. UTC
We know default values for all params and we know which params are safe
to change. Mark params that were changed when dumping them in debugfs.

Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 53 ++++++++++++++++++++++++++++---------
 1 file changed, 41 insertions(+), 12 deletions(-)

Comments

Chris Wilson June 8, 2017, 3:25 p.m. UTC | #1
Quoting Michal Wajdeczko (2017-06-08 16:07:34)
> We know default values for all params and we know which params are safe
> to change. Mark params that were changed when dumping them in debugfs.
> 
> Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 53 ++++++++++++++++++++++++++++---------
>  1 file changed, 41 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 7a2f0b8..4dc5e8f 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -35,20 +35,42 @@ static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
>         return to_i915(node->minor->dev);
>  }
>  
> +static inline const char *param_diagnostic(bool is_default, bool is_unsafe)
> +{
> +       if (is_default)
> +               return "";
> +       if (is_unsafe)
> +               return " [modified *unsafe*]";
> +       return " [modified]";

There's one more complication here: those parameters that are
automatically reset based on HW support. Probably not worth it since how
do we tell the difference (between the driver adjustment and user),
without support of modparam tracking. :|

> +       } else if (!__builtin_strcmp(type, "charp")) {
> +               const char *new = *(const char **)x;
> +               const char *old = *(const char **)v;
> +               bool is_default = old ? new ? !strcmp(old, new) : false :
> +                                 new ? false : true;

is_default = old && new ? !strcmp(old, new) : old == new; ?
-Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 7a2f0b8..4dc5e8f 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -35,20 +35,42 @@  static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
 	return to_i915(node->minor->dev);
 }
 
+static inline const char *param_diagnostic(bool is_default, bool is_unsafe)
+{
+	if (is_default)
+		return "";
+	if (is_unsafe)
+		return " [modified *unsafe*]";
+	return " [modified]";
+}
+
 static __always_inline void seq_print_param(struct seq_file *m,
 					    const char *name,
 					    const char *type,
-					    const void *x)
-{
-	if (!__builtin_strcmp(type, "bool"))
-		seq_printf(m, "i915.%s=%s\n", name, yesno(*(const bool *)x));
-	else if (!__builtin_strcmp(type, "int"))
-		seq_printf(m, "i915.%s=%d\n", name, *(const int *)x);
-	else if (!__builtin_strcmp(type, "uint"))
-		seq_printf(m, "i915.%s=%u\n", name, *(const unsigned int *)x);
-	else if (!__builtin_strcmp(type, "charp"))
-		seq_printf(m, "i915.%s=%s\n", name, *(const char **)x);
-	else
+					    const void *x,
+					    const void *v,
+					    bool is_unsafe)
+{
+	if (!__builtin_strcmp(type, "bool")) {
+		bool is_default = *(const bool *)x == *(const bool *)v;
+		seq_printf(m, "i915.%s=%s%s\n", name, yesno(*(const bool *)x),
+			   param_diagnostic(is_default, is_unsafe));
+	} else if (!__builtin_strcmp(type, "int")) {
+		bool is_default = *(const int *)x == *(const int *)v;
+		seq_printf(m, "i915.%s=%d%s\n", name, *(const int *)x,
+			   param_diagnostic(is_default, is_unsafe));
+	} else if (!__builtin_strcmp(type, "uint")) {
+		bool is_default = *(const uint *)x == *(const uint *)v;
+		seq_printf(m, "i915.%s=%u%s\n", name, *(const unsigned int *)x,
+			   param_diagnostic(is_default, is_unsafe));
+	} else if (!__builtin_strcmp(type, "charp")) {
+		const char *new = *(const char **)x;
+		const char *old = *(const char **)v;
+		bool is_default = old ? new ? !strcmp(old, new) : false :
+				  new ? false : true;
+		seq_printf(m, "i915.%s=%s%s\n", name, *(const char **)x,
+			   param_diagnostic(is_default, is_unsafe));
+	} else
 		BUILD_BUG();
 }
 
@@ -66,9 +88,16 @@  static int i915_capabilities(struct seq_file *m, void *data)
 #undef PRINT_FLAG
 
 	kernel_param_lock(THIS_MODULE);
-#define PRINT_PARAM(T, X, V, M, S, B, D) seq_print_param(m, #X, #T, &i915.X);
+#define FLAG false
+#define FLAG_unsafe true
+#define PRINT_PARAM(T, X, V, M, S, B, D) do { \
+		typeof(i915.X) __v = V; \
+		seq_print_param(m, #X, #T, &i915.X, &__v, FLAG##S); \
+	} while(0);
 	I915_PARAMS_FOR_EACH(PRINT_PARAM);
 #undef PRINT_PARAM
+#undef FLAG
+#undef FLAG_unsafe
 	kernel_param_unlock(THIS_MODULE);
 
 	return 0;