drm/i915/params: use generics for parameter debugfs file creation
authorJani Nikula <jani.nikula@intel.com>
Wed, 18 Jan 2023 15:18:00 +0000 (17:18 +0200)
committerJani Nikula <jani.nikula@intel.com>
Wed, 25 Jan 2023 14:25:36 +0000 (16:25 +0200)
Replace the __builtin_strcmp() if ladder with generics.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230118151800.3669913-4-jani.nikula@intel.com
drivers/gpu/drm/i915/i915_debugfs_params.c

index 783c867..614bde3 100644 (file)
@@ -230,27 +230,16 @@ i915_debugfs_create_charp(const char *name, umode_t mode,
                                   &i915_param_charp_fops);
 }
 
-static __always_inline void
-_i915_param_create_file(struct dentry *parent, const char *name,
-                       const char *type, int mode, void *value)
-{
-       if (!mode)
-               return;
-
-       if (!__builtin_strcmp(type, "bool"))
-               debugfs_create_bool(name, mode, parent, value);
-       else if (!__builtin_strcmp(type, "int"))
-               i915_debugfs_create_int(name, mode, parent, value);
-       else if (!__builtin_strcmp(type, "unsigned int"))
-               i915_debugfs_create_uint(name, mode, parent, value);
-       else if (!__builtin_strcmp(type, "unsigned long"))
-               debugfs_create_ulong(name, mode, parent, value);
-       else if (!__builtin_strcmp(type, "char *"))
-               i915_debugfs_create_charp(name, mode, parent, value);
-       else
-               WARN(1, "no debugfs fops defined for param type %s (i915.%s)\n",
-                    type, name);
-}
+#define _i915_param_create_file(parent, name, mode, valp)              \
+       do {                                                            \
+               if (mode)                                               \
+                       _Generic(valp,                                  \
+                                bool *: debugfs_create_bool,           \
+                                int *: i915_debugfs_create_int,        \
+                                unsigned int *: i915_debugfs_create_uint, \
+                                unsigned long *: debugfs_create_ulong, \
+                                char **: i915_debugfs_create_charp)(name, mode, parent, valp); \
+       } while(0)
 
 /* add a subdirectory with files for each i915 param */
 struct dentry *i915_debugfs_params(struct drm_i915_private *i915)
@@ -269,7 +258,7 @@ struct dentry *i915_debugfs_params(struct drm_i915_private *i915)
         * just let the generic create file fail silently with -EEXIST.
         */
 
-#define REGISTER(T, x, unused, mode, ...) _i915_param_create_file(dir, #x, #T, mode, &params->x);
+#define REGISTER(T, x, unused, mode, ...) _i915_param_create_file(dir, #x, mode, &params->x);
        I915_PARAMS_FOR_EACH(REGISTER);
 #undef REGISTER