It turns out that there are BPF use cases that rely on nesting RCU
Tasks Trace readers.  These use cases are well-served by the old
rcu_read_lock_trace() and rcu_read_unlock_trace() functions that maintain
a nesting counter in the task_struct structure.  But these use cases incur
a performance penalty when using the shiny new rcu_read_lock_tasks_trace()
and rcu_read_unlock_tasks_trace() functions, which nest in the same way
that SRCU does.

This means that rcu_read_lock_trace() and rcu_read_unlock_trace()
will be with us for some time.  Therefore, remove the checkpatch.pl
deprecation.

Also, the rcu_read_lock_tasks_trace() and rcu_read_unlock_tasks_trace()
functions are intended for use only by BPF.  Therefore, add them to
the list of functions that checkpatch complains about outside of BPF
(and of course, RCU).

Reported-by: Puranjay Mohan <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>
Cc: Andy Whitcroft <[email protected]>
Cc: Joe Perches <[email protected]>
Cc: Dwaipayan Ray <[email protected]>
Cc: Lukas Bulwahn <[email protected]>
---
 scripts/checkpatch.pl | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 0492d6afc9a1fc..cc5bbd70cb843e 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -865,8 +865,6 @@ our %deprecated_apis = (
        "DEFINE_IDR"                            => "DEFINE_XARRAY",
        "idr_init"                              => "xa_init",
        "idr_init_base"                         => "xa_init_flags",
-       "rcu_read_lock_trace"                   => "rcu_read_lock_tasks_trace",
-       "rcu_read_unlock_trace"                 => 
"rcu_read_unlock_tasks_trace",
 );
 
 #Create a search pattern for all these strings to speed up a loop below
@@ -7596,12 +7594,15 @@ sub process {
 
 # Complain about RCU Tasks Trace used outside of BPF (and of course, RCU).
                our $rcu_trace_funcs = qr{(?x:
+                       rcu_read_lock_tasks_trace |
                        rcu_read_lock_trace |
                        rcu_read_lock_trace_held |
                        rcu_read_unlock_trace |
+                       rcu_read_unlock_tasks_trace |
                        call_rcu_tasks_trace |
                        synchronize_rcu_tasks_trace |
                        rcu_barrier_tasks_trace |
+                       rcu_tasks_trace_expedite_current |
                        rcu_request_urgent_qs_task
                )};
                our $rcu_trace_paths = qr{(?x:
-- 
2.40.1


Reply via email to