67 lines · 1.8 KB · Text
RawDownload
/// 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 contextvirtual patchvirtual orgvirtual 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)