[Intel-gfx] [PATCH v2 1/5] drm/i915: Generate i915_params {} using a macro

Chris Wilson chris at chris-wilson.co.uk
Thu Feb 2 10:04:42 UTC 2017


On Thu, Feb 02, 2017 at 11:37:06AM +0200, Jani Nikula wrote:
> On Thu, 02 Feb 2017, Chris Wilson <chris at chris-wilson.co.uk> wrote:
> > I want to print the struct from the error state and so would like to use
> > the existing struct definition as the template ala DEV_INFO*
> >
> > v2: Use MEMBER() rather than p().
> >
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> 
> I've been telling everyone who complains about testing specific firmware
> blob versions to add a module parameter to specify and override the
> default filename. AFAICT this series does not make string parameters any
> harder, but please do double check. I think they expect a static
> allocation for the string buffer too, so the struct assignment should be
> fine as well.

charp which is the dynamically allocated string might be easier,
certainly for 0400 parameters.

Hmm. Except for copying into the error state, 0600 charp will take a bit
more work (another iterator to kstrdup). 

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 86649610b9eb..2d32dacebeb3 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -76,6 +76,13 @@ static void seq_param_uint(struct seq_file *m, const char *name, param_uint x)
        seq_printf(m, "i915.%s=%u\n", name, x);
 }
 
+static void seq_param_charp(struct seq_file *m, const char *name, param_charp x)
+{
+       kernel_param_lock(THIS_MODULE);
+       seq_printf(m, "i915.%s=%s\n", name, x);
+       kernel_param_unlock(THIS_MODULE);
+}
+
 static int i915_capabilities(struct seq_file *m, void *data)
 {
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index b8f2b671fc0a..35602935dba8 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -567,6 +567,15 @@ static void err_param_uint(struct drm_i915_error_state_buf *m,
        err_printf(m, "%s: %u\n", name, x);
 }
 
+static void err_param_charp(struct drm_i915_error_state_buf *m,
+                           const char *name,
+                           param_charp x)
+{
+       kernel_param_lock(THIS_MODULE);
+       err_printf(m, "%s: %s\n", name, x);
+       kernel_param_unlock(THIS_MODULE);
+}
+
 static void err_print_params(struct drm_i915_error_state_buf *m,
                             const struct i915_params *p)
 {
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index f1fa51190dc6..f9cc170577c2 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -65,6 +65,8 @@ struct i915_params i915 __read_mostly = {
        .enable_gvt = false,
 };
 
+module_param_named_unsafe(my_string, i915.my_string, charp, 0400);
+
 module_param_named(modeset, i915.modeset, int, 0400);
 MODULE_PARM_DESC(modeset,
        "Use kernel modesetting [KMS] (0=disable, "
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 87ac6ed995d3..bc5aea9e3fb6 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -30,6 +30,7 @@
 typedef bool param_bool;
 typedef int param_int;
 typedef unsigned int param_uint;
+typedef char *param_charp;
 
 #define I915_PARAMS_FOR_EACH(func) \
        func(param_int, modeset); \
@@ -54,6 +55,7 @@ typedef unsigned int param_uint;
        func(param_int, mmio_debug); \
        func(param_int, edp_vswing); \
        func(param_uint, inject_load_failure); \
+       func(param_charp, my_string); \
        /* leave bools at the end to not create holes */ \
        func(param_bool, alpha_support); \
        func(param_bool, enable_cmd_parser); \

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list