|
@@ -0,0 +1,67 @@
|
|
|
+/// Use DEFINE_DEBUGFS_ATTRIBUTE rather than DEFINE_SIMPLE_ATTRIBUTE
|
|
|
+/// for debugfs files.
|
|
|
+///
|
|
|
+//# Rationale: DEFINE_SIMPLE_ATTRIBUTE + debugfs_create_file()
|
|
|
+//# imposes some significant overhead as compared to
|
|
|
+//# DEFINE_DEBUGFS_ATTRIBUTE + debugfs_create_file_unsafe().
|
|
|
+//
|
|
|
+// Copyright (C): 2016 Nicolai Stange
|
|
|
+// Options: --no-includes
|
|
|
+//
|
|
|
+
|
|
|
+virtual context
|
|
|
+virtual patch
|
|
|
+virtual org
|
|
|
+virtual report
|
|
|
+
|
|
|
+@dsa@
|
|
|
+declarer name DEFINE_SIMPLE_ATTRIBUTE;
|
|
|
+identifier dsa_fops;
|
|
|
+expression dsa_get, dsa_set, dsa_fmt;
|
|
|
+position p;
|
|
|
+@@
|
|
|
+DEFINE_SIMPLE_ATTRIBUTE@p(dsa_fops, dsa_get, dsa_set, dsa_fmt);
|
|
|
+
|
|
|
+@dcf@
|
|
|
+expression name, mode, parent, data;
|
|
|
+identifier dsa.dsa_fops;
|
|
|
+@@
|
|
|
+debugfs_create_file(name, mode, parent, data, &dsa_fops)
|
|
|
+
|
|
|
+
|
|
|
+@context_dsa depends on context && dcf@
|
|
|
+declarer name DEFINE_DEBUGFS_ATTRIBUTE;
|
|
|
+identifier dsa.dsa_fops;
|
|
|
+expression dsa.dsa_get, dsa.dsa_set, dsa.dsa_fmt;
|
|
|
+@@
|
|
|
+* DEFINE_SIMPLE_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt);
|
|
|
+
|
|
|
+
|
|
|
+@patch_dcf depends on patch expression@
|
|
|
+expression name, mode, parent, data;
|
|
|
+identifier dsa.dsa_fops;
|
|
|
+@@
|
|
|
+- debugfs_create_file(name, mode, parent, data, &dsa_fops)
|
|
|
++ debugfs_create_file_unsafe(name, mode, parent, data, &dsa_fops)
|
|
|
+
|
|
|
+@patch_dsa depends on patch_dcf && patch@
|
|
|
+identifier dsa.dsa_fops;
|
|
|
+expression dsa.dsa_get, dsa.dsa_set, dsa.dsa_fmt;
|
|
|
+@@
|
|
|
+- DEFINE_SIMPLE_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt);
|
|
|
++ DEFINE_DEBUGFS_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt);
|
|
|
+
|
|
|
+
|
|
|
+@script:python depends on org && dcf@
|
|
|
+fops << dsa.dsa_fops;
|
|
|
+p << dsa.p;
|
|
|
+@@
|
|
|
+msg="%s should be defined with DEFINE_DEBUGFS_ATTRIBUTE" % (fops)
|
|
|
+coccilib.org.print_todo(p[0], msg)
|
|
|
+
|
|
|
+@script:python depends on report && dcf@
|
|
|
+fops << dsa.dsa_fops;
|
|
|
+p << dsa.p;
|
|
|
+@@
|
|
|
+msg="WARNING: %s should be defined with DEFINE_DEBUGFS_ATTRIBUTE" % (fops)
|
|
|
+coccilib.report.print_report(p[0], msg)
|