History

tasks: Add a count of task RCU users

Add a count of the number of RCU users (currently 1) of the task struct so that we can later add the scheduler case and get rid of the very subtle task_rcu_dereference(), and just use rcu_dereference(). As suggested by Oleg have the count overlap rcu_head so that no additional space in task_struct is required.

Eric W. Biederman committed 7 years ago

Commit 3fbd7ee1 parent 42fd8ba4 files · +14 −6Browse files

Showing the changes to include/linux (2 of 4 files). Show all

Unified · Split

2 files
  1. include/linux/sched.h +4 −1
  2. include/linux/sched/task.h +1 −0
include/linux/sched.h+4−1
@@ -1147,7 +1147,10 @@ struct task_struct { · 1146 unmodified lines
11471147
11481148 struct tlbflush_unmap_batch tlb_ubc;
11491149
1150− struct rcu_head rcu;
1150+ union {
1151+ refcount_t rcu_users;
1152+ struct rcu_head rcu;
1153+ };
11511154
11521155 /* Cache last used pipe for splice(): */
11531156 struct pipe_inode_info *splice_pipe;
include/linux/sched/task.h+1−0
@@ -120,6 +120,7 @@ static inline void put_task_struct(struct task_struct *t) · 119 unmodified lines
120120 }
121121
122122 struct task_struct *task_rcu_dereference(struct task_struct **ptask);
123+void put_task_struct_rcu_user(struct task_struct *task);
123124
124125 #ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT
125126 extern int arch_task_struct_size __read_mostly;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t