- 
                Notifications
    
You must be signed in to change notification settings  - Fork 1
 
Remove unnecessary RCU grace period chaining #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: rcu-dev
Are you sure you want to change the base?
Conversation
| 
           Master branch: 4b9dfbb Pull request is NOT updated. Failed to apply https://patchwork.kernel.org/project/rcu/list/?series=684412 conflict:  | 
    
5ca9bde    to
    f965c82      
    Compare
  
    996bf5c    to
    00c153b      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
112760b    to
    7745abd      
    Compare
  
    87e7989    to
    fa70e60      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
7745abd    to
    3f7d87e      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
3f7d87e    to
    5e0d56c      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
5e0d56c    to
    0892932      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
0892932    to
    cbbf01f      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
cbbf01f    to
    c98ad5b      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
c98ad5b    to
    2c30954      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
2c30954    to
    05b5b6c      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
05b5b6c    to
    260938f      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
260938f    to
    a23361c      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
a23361c    to
    323b6f8      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
323b6f8    to
    bc6d7cc      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
bc6d7cc    to
    759167c      
    Compare
  
    | 
           Master branch: fa70e60  | 
    
759167c    to
    2f582b5      
    Compare
  
    As an accident of implementation, an RCU Tasks Trace grace period also acts as an RCU grace period. However, this could change at any time. This commit therefore creates an rcu_trace_implies_rcu_gp() that currently returns true to codify this accident. Code relying on this accident must call this function to verify that this accident is still happening. Reported-by: Hou Tao <[email protected]> Signed-off-by: Paul E. McKenney <[email protected]> Cc: Alexei Starovoitov <[email protected]> Cc: Martin KaFai Lau <[email protected]>
The memory free logic in bpf memory allocator chains a RCU Tasks Trace grace period and a normal RCU grace period one after the other, so it can ensure that both sleepable and non-sleepable programs have finished. With the introduction of rcu_trace_implies_rcu_gp(), __free_rcu_tasks_trace() can check whether or not a normal RCU grace period has also passed after a RCU Tasks Trace grace period has passed. If it is true, freeing these elements directly, else freeing through call_rcu(). Signed-off-by: Hou Tao <[email protected]>
Local storage map is accessible for both sleepable and non-sleepable bpf program, and its memory is freed by using both call_rcu_tasks_trace() and kfree_rcu() to wait for both RCU-tasks-trace grace period and RCU grace period to pass. With the introduction of rcu_trace_implies_rcu_gp(), both bpf_selem_free_rcu() and bpf_local_storage_free_rcu() can check whether or not a normal RCU grace period has also passed after a RCU-tasks-trace grace period has passed. If it is true, it is safe to call kfree() directly. Signed-off-by: Hou Tao <[email protected]>
To support both sleepable and normal uprobe bpf program, the freeing of trace program array chains a RCU-tasks-trace grace period and a normal RCU grace period one after the other. With the introduction of rcu_trace_implies_rcu_gp(), __bpf_prog_array_free_sleepable_cb() can check whether or not a normal RCU grace period has also passed after a RCU-tasks-trace grace period has passed. If it is true, it is safe to invoke kfree() directly. Signed-off-by: Hou Tao <[email protected]>
| 
           Master branch: fa70e60  | 
    
2f582b5    to
    32140fa      
    Compare
  
    
Pull request for series with
subject: Remove unnecessary RCU grace period chaining
version: 1
url: https://patchwork.kernel.org/project/rcu/list/?series=684412