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