OSDN Git Service

checkpatch: Create table of obsolete APIs and apply to RCU
authorJoe Perches <joe@perches.com>
Fri, 7 Sep 2018 22:26:18 +0000 (15:26 -0700)
committerPaul E. McKenney <paulmck@linux.ibm.com>
Mon, 12 Nov 2018 17:03:59 +0000 (09:03 -0800)
This patch creates a deprecated_apis map, which allows such APIs to
be flagged with suggested replacements more compactly and straightforwardly.
It also uses this map to flag the old flavorful RCU APIs as deprecated,
suggesting their vanilla-RCU counterparts as replacements.

Signed-off-by: Joe Perches <joe@perches.com>
Cc: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
[ paulmck: Merged with earlier less-deft approach. ]

scripts/checkpatch.pl

index c883ec5..dd29e3c 100755 (executable)
@@ -573,6 +573,27 @@ foreach my $entry (@mode_permission_funcs) {
 }
 $mode_perms_search = "(?:${mode_perms_search})";
 
+our %deprecated_apis = (
+       "synchronize_rcu_bh"                    => "synchronize_rcu",
+       "synchronize_rcu_bh_expedited"          => "synchronize_rcu_expedited",
+       "call_rcu_bh"                           => "call_rcu",
+       "rcu_barrier_bh"                        => "rcu_barrier",
+       "synchronize_sched"                     => "synchronize_rcu",
+       "synchronize_sched_expedited"           => "synchronize_rcu_expedited",
+       "call_rcu_sched"                        => "call_rcu",
+       "rcu_barrier_sched"                     => "rcu_barrier",
+       "get_state_synchronize_sched"           => "get_state_synchronize_rcu",
+       "cond_synchronize_sched"                => "cond_synchronize_rcu",
+);
+
+#Create a search pattern for all these strings to speed up a loop below
+our $deprecated_apis_search = "";
+foreach my $entry (keys %deprecated_apis) {
+       $deprecated_apis_search .= '|' if ($deprecated_apis_search ne "");
+       $deprecated_apis_search .= $entry;
+}
+$deprecated_apis_search = "(?:${deprecated_apis_search})";
+
 our $mode_perms_world_writable = qr{
        S_IWUGO         |
        S_IWOTH         |
@@ -6368,6 +6389,14 @@ sub process {
                             "please use device_initcall() or more appropriate function instead of __initcall() (see include/linux/init.h)\n" . $herecurr);
                }
 
+# check for deprecated apis
+               if ($line =~ /\b($deprecated_apis_search)\b\s*\(/) {
+                       my $deprecated_api = $1;
+                       my $new_api = $deprecated_apis{$deprecated_api};
+                       WARN("DEPRECATED_API",
+                            "Deprecated use of '$deprecated_api', prefer '$new_api' instead\n" . $herecurr);
+               }
+
 # check for various structs that are normally const (ops, kgdb, device_tree)
 # and avoid what seem like struct definitions 'struct foo {'
                if ($line !~ /\bconst\b/ &&