✗ CI.checkpatch: warning for Add new debug infrastruct ure for configfs (rev4)

Patchwork <[email protected]> Wed, 05 Aug 2026 23:59:10 -0000
Newsgroups org.freedesktop.lists.intel-xe
Message-ID <178597435091.23279.11605106476246033031@61270ab9df2a>
== Series Details ==

Series: Add new debug infrastructure for configfs (rev4)
URL   : https://patchwork.freedesktop.org/series/165879/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit d0a674d2a49d70b2e9307fbbd61332ab107c8e56
Author: Stuart Summers <[email protected]>
Date:   Wed Aug 5 23:20:31 2026 +0000

    drm/xe: Taint kernel when debug configfs parameters are set
    
    Writing any debug configfs attribute indicates the system is running
    in a non-standard configuration that may mask bugs or produce misleading
    behaviour. Taint the kernel with TAINT_TEST on each successful write so
    bug reports clearly reflect when debug settings were active.
    
    Signed-off-by: Stuart Summers <[email protected]>
    Assisted-by: Copilot:claude-sonnet-4.6,claude-sonnet-5
+ /mt/dim checkpatch caffd4cac0c4c2696d90c76d21f81342c288784e drm-intel
e5d0c8e0fd11 drm/xe: Guard configfs attribute reads in getters
fe56e2e81997 drm/xe: Sort xe_config_device fields
-:825: WARNING:LINE_SPACING: Missing a blank line after declarations
#825: FILE: drivers/gpu/drm/xe/xe_configfs.c:868:
+	struct xe_config_group_device *dev = to_xe_config_group_device(item);
+	char *buf __free(kfree) = kstrdup(page, GFP_KERNEL);

total: 0 errors, 1 warnings, 0 checks, 1269 lines checked
f5c88fbdb9aa drm/xe: Split out configfs data structures
-:100: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#100: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 122 lines checked
3fb389920a97 drm/xe: Add a new debug focused configfs group
-:51: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#51: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 61 lines checked
6937e102327b drm/xe: Move debug configfs entries to xe_configfs_debug.c
-:1504: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#1504: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:219:
+	{ .cls = "vcs", .mask = XE_HW_ENGINE_VCS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_DECODE },

-:1505: WARNING:LONG_LINE: line length of 105 exceeds 100 columns
#1505: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:220:
+	{ .cls = "vecs", .mask = XE_HW_ENGINE_VECS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_ENHANCE },

-:2216: WARNING:MACRO_ARG_UNUSED: Argument '_item' is not used in function-like macro
#2216: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:931:
+#define XE_PARAM_VISIBLE_ALWAYS(_item) \
+	(true)

-:2218: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_item' - possible side-effects?
#2218: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:933:
+#define XE_PARAM_VISIBLE_SURVIVABILITY(_item) \
+	(xe_configfs_subgroup_to_group_device(_item)->desc->is_dgfx && \
+	 xe_configfs_subgroup_to_group_device(_item)->desc->platform >= XE_BATTLEMAGE)

total: 0 errors, 3 warnings, 1 checks, 2338 lines checked
e438960160bd drm/xe/guc: Add configfs support for guc_log_level
95933951daf3 drm/xe/guc: Add support for NPK as a GuC log target
-:178: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#178: FILE: drivers/gpu/drm/xe/xe_configfs_debug.h:53:
 }
+static inline u8 xe_configfs_get_guc_log_target(struct pci_dev *pdev)

total: 0 errors, 0 warnings, 1 checks, 180 lines checked
b523aea24b80 drm/xe: Add infrastructure for debug configfs parameters
-:76: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#76: 
new file mode 100644

-:124: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects?
#124: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:44:
+#define _XE_PARAM_DEFINE_OPS_NUMERIC(_T, _name, _kstrto, _fmt, _validator) \
+static ssize_t _name##_show(struct config_item *item, char *page) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+	XE_PARAM_TYPE_##_T val; \
+	scoped_guard(mutex, &dev->lock) \
+		val = dev->config.debug.params._name; \
+	return sprintf(page, _fmt "\n", val); \
+} \
+static ssize_t _name##_store(struct config_item *item, const char *page, size_t len) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+	XE_PARAM_TYPE_##_T val; \
+	int ret = _kstrto(page, 0, &val); \
+	if (ret) \
+		return ret; \
+	ret = _validator(val); \
+	if (ret) \
+		return ret; \
+	guard(mutex)(&dev->lock); \
+	if (xe_configfs_is_bound(dev)) \
+		return -EBUSY; \
+	dev->config.debug.params._name = val; \
+	return len; \
+}

-:160: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects?
#160: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:80:
+#define _XE_PARAM_DEFINE_OPS_bool(_name, _validator) \
+static ssize_t _name##_show(struct config_item *item, char *page) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+	bool val; \
+	scoped_guard(mutex, &dev->lock) \
+		val = dev->config.debug.params._name; \
+	return sprintf(page, "%d\n", val); \
+} \
+static ssize_t _name##_store(struct config_item *item, const char *page, size_t len) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+	bool val; \
+	int ret = kstrtobool(page, &val); \
+	if (ret) \
+		return ret; \
+	ret = _validator(val); \
+	if (ret) \
+		return ret; \
+	guard(mutex)(&dev->lock); \
+	if (xe_configfs_is_bound(dev)) \
+		return -EBUSY; \
+	dev->config.debug.params._name = val; \
+	return len; \
+}

-:186: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+	_XE_PARAM_DEFINE_OPS_##_T(_name, _validator)

-:186: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+	_XE_PARAM_DEFINE_OPS_##_T(_name, _validator)

-:186: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+	_XE_PARAM_DEFINE_OPS_##_T(_name, _validator)

-:186: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+	_XE_PARAM_DEFINE_OPS_##_T(_name, _validator)

-:194: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:194: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:194: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:194: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:194: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:194: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:194: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute attr_##_name = {                              \
+	.ca_name	= __stringify(_name),                           \
+	.ca_owner	= THIS_MODULE,                                  \
+	.ca_mode	= 0644,                                         \
+	.show		= _name##_show,                                 \
+	.store		= _name##_store,                                \
+};

-:218: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+	XE_PARAM_TYPE_##_T ret; \
+	if (!dev) \
+		return (_fallback); \
+	scoped_guard(mutex, &dev->lock) \
+		ret = _get(dev, _name); \
+	config_group_put(&dev->group); \
+	return ret; \
+}

BUT SEE:

   do {} while (0) advice is over-stated in a few situations:

   The more obvious case is macros, like MODULE_PARM_DESC, invoked at
   file-scope, where C disallows code (it must be in functions).  See
   $exceptions if you have one to add by name.

   More troublesome is declarative macros used at top of new scope,
   like DECLARE_PER_CPU.  These might just compile with a do-while-0
   wrapper, but would be incorrect.  Most of these are handled by
   detecting struct,union,etc declaration primitives in $exceptions.

   Theres also macros called inside an if (block), which "return" an
   expression.  These cannot do-while, and need a ({}) wrapper.

   Enjoy this qualification while we work to improve our heuristics.

-:218: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+	XE_PARAM_TYPE_##_T ret; \
+	if (!dev) \
+		return (_fallback); \
+	scoped_guard(mutex, &dev->lock) \
+		ret = _get(dev, _name); \
+	config_group_put(&dev->group); \
+	return ret; \
+}

-:218: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+	XE_PARAM_TYPE_##_T ret; \
+	if (!dev) \
+		return (_fallback); \
+	scoped_guard(mutex, &dev->lock) \
+		ret = _get(dev, _name); \
+	config_group_put(&dev->group); \
+	return ret; \
+}

-:218: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+	XE_PARAM_TYPE_##_T ret; \
+	if (!dev) \
+		return (_fallback); \
+	scoped_guard(mutex, &dev->lock) \
+		ret = _get(dev, _name); \
+	config_group_put(&dev->group); \
+	return ret; \
+}

-:230: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#230: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:150:
+}
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DEFINE_GETTER)

-:287: WARNING:MACRO_ARG_UNUSED: Argument '_v' is not used in function-like macro
#287: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:50:
+#define XE_PARAM_VALIDATE_NONE(_v)		(0)

-:349: WARNING:MULTISTATEMENT_MACRO_USE_DO_WHILE: Non-declarative macros with multiple statements should be enclosed in a do - while loop
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

BUT SEE:

   do {} while (0) advice is over-stated in a few situations:

   The more obvious case is macros, like MODULE_PARM_DESC, invoked at
   file-scope, where C disallows code (it must be in functions).  See
   $exceptions if you have one to add by name.

   More troublesome is declarative macros used at top of new scope,
   like DECLARE_PER_CPU.  These might just compile with a do-while-0
   wrapper, but would be incorrect.  Most of these are handled by
   detecting struct,union,etc declaration primitives in $exceptions.

   Theres also macros called inside an if (block), which "return" an
   expression.  These cannot do-while, and need a ({}) wrapper.

   Enjoy this qualification while we work to improve our heuristics.

-:349: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

-:349: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

-:349: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

-:349: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

-:349: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

-:349: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;

-:363: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback)	._name = (_def),

-:363: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback)	._name = (_def),

-:363: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback)	._name = (_def),

-:363: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback)	._name = (_def),

-:363: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback)	._name = (_def),

-:376: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:376: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:376: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:376: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:376: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:376: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:376: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+	extern struct configfs_attribute attr_##_name;

-:385: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

BUT SEE:

   do {} while (0) advice is over-stated in a few situations:

   The more obvious case is macros, like MODULE_PARM_DESC, invoked at
   file-scope, where C disallows code (it must be in functions).  See
   $exceptions if you have one to add by name.

   More troublesome is declarative macros used at top of new scope,
   like DECLARE_PER_CPU.  These might just compile with a do-while-0
   wrapper, but would be incorrect.  Most of these are handled by
   detecting struct,union,etc declaration primitives in $exceptions.

   Theres also macros called inside an if (block), which "return" an
   expression.  These cannot do-while, and need a ({}) wrapper.

   Enjoy this qualification while we work to improve our heuristics.

-:385: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

-:385: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

-:385: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

-:385: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

-:385: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

-:385: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) &attr_##_name,

-:395: WARNING:MULTISTATEMENT_MACRO_USE_DO_WHILE: Non-declarative macros with multiple statements should be enclosed in a do - while loop
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

BUT SEE:

   do {} while (0) advice is over-stated in a few situations:

   The more obvious case is macros, like MODULE_PARM_DESC, invoked at
   file-scope, where C disallows code (it must be in functions).  See
   $exceptions if you have one to add by name.

   More troublesome is declarative macros used at top of new scope,
   like DECLARE_PER_CPU.  These might just compile with a do-while-0
   wrapper, but would be incorrect.  Most of these are handled by
   detecting struct,union,etc declaration primitives in $exceptions.

   Theres also macros called inside an if (block), which "return" an
   expression.  These cannot do-while, and need a ({}) wrapper.

   Enjoy this qualification while we work to improve our heuristics.

-:395: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

-:395: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

-:395: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

-:395: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

-:395: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

-:395: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#395: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:158:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+	XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);

-:404: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#404: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:167:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	return _fallback; \
+}

BUT SEE:

   do {} while (0) advice is over-stated in a few situations:

   The more obvious case is macros, like MODULE_PARM_DESC, invoked at
   file-scope, where C disallows code (it must be in functions).  See
   $exceptions if you have one to add by name.

   More troublesome is declarative macros used at top of new scope,
   like DECLARE_PER_CPU.  These might just compile with a do-while-0
   wrapper, but would be incorrect.  Most of these are handled by
   detecting struct,union,etc declaration primitives in $exceptions.

   Theres also macros called inside an if (block), which "return" an
   expression.  These cannot do-while, and need a ({}) wrapper.

   Enjoy this qualification while we work to improve our heuristics.

-:404: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#404: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:167:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	return _fallback; \
+}

-:404: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#404: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:167:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	return _fallback; \
+}

-:404: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#404: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:167:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	return _fallback; \
+}

-:404: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#404: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:167:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+	return _fallback; \
+}

total: 3 errors, 52 warnings, 3 checks, 332 lines checked
ba801810ef87 drm/xe: Migrate existing debug configfs entries to params infrastructure
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:421:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+	PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);

-:48: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:421:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+	PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);

-:48: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:421:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+	PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);

-:48: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:421:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+	PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);

-:48: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:421:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+	PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);

-:48: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:421:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+	PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);

-:338: CHECK:LINE_SPACING: Please don't use multiple blank lines
#338: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:809:
 
+

-:352: ERROR:MULTISTATEMENT_MACRO_USE_DO_WHILE: Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:352: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:352: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:352: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:352: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:352: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:352: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#352: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:828:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+	if (attr == &attr_##_name) \
+		return _vis(item);

-:445: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_v' - possible side-effects?
#445: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:58:
+#define XE_PARAM_VALIDATE_GUC_LOG_LEVEL(_v) \
+	(((_v) == XE_GUC_LOG_LEVEL_UNSET || \
+	  ((_v) >= 0 && (_v) <= GUC_LOG_LEVEL_MAX)) ? 0 : -EINVAL)

-:458: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects?
#458: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:86:
+#define XE_PARAM_GETTER_GUC_LOG_LEVEL(_dev, _name) \
+	({ typeof((_dev)->config.debug.params._name) __v = (_dev)->config.debug.params._name; \
+	   __v >= 0 ? __v : xe_modparam.guc_log_level; })

-:470: WARNING:LONG_LINE: line length of 192 exceeds 100 columns
#470: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:125:
+	param(int,  guc_log_level,      XE_GUC_LOG_LEVEL_UNSET,    XE_PARAM_VALIDATE_GUC_LOG_LEVEL,  XE_PARAM_VISIBLE_ALWAYS,        XE_PARAM_GETTER_GUC_LOG_LEVEL, xe_modparam.guc_log_level) \

-:471: WARNING:LONG_LINE: line length of 192 exceeds 100 columns
#471: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+	param(u8,   guc_log_target,     XE_DEFAULT_GUC_LOG_TARGET, XE_PARAM_VALIDATE_GUC_LOG_TARGET, XE_PARAM_VISIBLE_ALWAYS,        XE_PARAM_GETTER_READ,          XE_DEFAULT_GUC_LOG_TARGET) \

-:472: WARNING:LONG_LINE: line length of 171 exceeds 100 columns
#472: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:127:
+	param(bool, enable_multi_queue, true,                      XE_PARAM_VALIDATE_NONE,           XE_PARAM_VISIBLE_ALWAYS,        XE_PARAM_GETTER_READ,          true) \

-:473: WARNING:LONG_LINE: line length of 172 exceeds 100 columns
#473: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:128:
+	param(bool, enable_psmi,        false,                     XE_PARAM_VALIDATE_NONE,           XE_PARAM_VISIBLE_ALWAYS,        XE_PARAM_GETTER_READ,          false) \

-:474: WARNING:LONG_LINE: line length of 170 exceeds 100 columns
#474: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:129:
+	param(bool, survivability_mode, false,                     XE_PARAM_VALIDATE_NONE,           XE_PARAM_VISIBLE_SURVIVABILITY, XE_PARAM_GETTER_READ,          false)

total: 1 errors, 17 warnings, 3 checks, 469 lines checked
d0a674d2a49d drm/xe: Taint kernel when debug configfs parameters are set