at v4.7-rc2 67 lines 1.8 kB view raw
1/// Use DEFINE_DEBUGFS_ATTRIBUTE rather than DEFINE_SIMPLE_ATTRIBUTE 2/// for debugfs files. 3/// 4//# Rationale: DEFINE_SIMPLE_ATTRIBUTE + debugfs_create_file() 5//# imposes some significant overhead as compared to 6//# DEFINE_DEBUGFS_ATTRIBUTE + debugfs_create_file_unsafe(). 7// 8// Copyright (C): 2016 Nicolai Stange 9// Options: --no-includes 10// 11 12virtual context 13virtual patch 14virtual org 15virtual report 16 17@dsa@ 18declarer name DEFINE_SIMPLE_ATTRIBUTE; 19identifier dsa_fops; 20expression dsa_get, dsa_set, dsa_fmt; 21position p; 22@@ 23DEFINE_SIMPLE_ATTRIBUTE@p(dsa_fops, dsa_get, dsa_set, dsa_fmt); 24 25@dcf@ 26expression name, mode, parent, data; 27identifier dsa.dsa_fops; 28@@ 29debugfs_create_file(name, mode, parent, data, &dsa_fops) 30 31 32@context_dsa depends on context && dcf@ 33declarer name DEFINE_DEBUGFS_ATTRIBUTE; 34identifier dsa.dsa_fops; 35expression dsa.dsa_get, dsa.dsa_set, dsa.dsa_fmt; 36@@ 37* DEFINE_SIMPLE_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt); 38 39 40@patch_dcf depends on patch expression@ 41expression name, mode, parent, data; 42identifier dsa.dsa_fops; 43@@ 44- debugfs_create_file(name, mode, parent, data, &dsa_fops) 45+ debugfs_create_file_unsafe(name, mode, parent, data, &dsa_fops) 46 47@patch_dsa depends on patch_dcf && patch@ 48identifier dsa.dsa_fops; 49expression dsa.dsa_get, dsa.dsa_set, dsa.dsa_fmt; 50@@ 51- DEFINE_SIMPLE_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt); 52+ DEFINE_DEBUGFS_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt); 53 54 55@script:python depends on org && dcf@ 56fops << dsa.dsa_fops; 57p << dsa.p; 58@@ 59msg="%s should be defined with DEFINE_DEBUGFS_ATTRIBUTE" % (fops) 60coccilib.org.print_todo(p[0], msg) 61 62@script:python depends on report && dcf@ 63fops << dsa.dsa_fops; 64p << dsa.p; 65@@ 66msg="WARNING: %s should be defined with DEFINE_DEBUGFS_ATTRIBUTE" % (fops) 67coccilib.report.print_report(p[0], msg)