From: Arnd Bergmann on 24 Feb 2010 15:10 On Tuesday 23 February 2010, Paul E. McKenney wrote: > > I've just started an experimental implementation and got stuck at list rcu. > > The two to deal with it that I can see are > > - ignore list-rcu for now, and make all include/linux/rculist.h __force the > > problem to be ignored. > > - introduce a new struct rcu_list_head that needs to be used for list rcu. > > > > A nicer option might be if sparse would let you write > > 'struct list_head __rcu head' and interpret that as having the pointers > > inside it annotated as __rcu. > > Only the "next" pointer, not the "prev" pointer, but yes. > > Perhaps it would be best to see if the sparse guys are willing to take > this on? I've implemented the second option now, and this seems to work alright. In order to test this out, I've annotated all rcu users in the kernel directory. One observation is that many members of task_struct are using RCU inconsistently. I'm not sure whether these should be considered bugs or false positives though. If we get a lot of false positives or people are generally unhappy about the annotations, they are not worth it, but if we find a few actual bugs, I guess it would be good to have this. Examples of pointers that I did not annotate because most of the places accessing them do not use RCU are task->sighand, task->nsproxy, and task->real_parent. Sorry for hijacking the discussion on your patch, but I assume that the same people interested in the lockdep diagnostics are also interested in the static annotations for RCU. Arnd Arnd Bergmann (10): rcu: define __rcu address space modifier for sparse rcu: annotated list rcu code cgroups: __rcu annotations credentials: rcu annotation perf_event: __rcu annotations audit: __rcu annotations module: __rcu annotations pid: __rcu annotations notifiers: __rcu annotations scheduler: __rcu annotations include/linux/cgroup.h | 6 +- include/linux/compiler.h | 2 + include/linux/cred.h | 4 +- include/linux/fdtable.h | 2 +- include/linux/init_task.h | 6 +- include/linux/module.h | 4 +- include/linux/notifier.h | 10 ++-- include/linux/perf_event.h | 10 ++-- include/linux/pid.h | 9 ++- include/linux/rculist.h | 152 ++++++++++++++++++++++++++++++++------------ include/linux/rcupdate.h | 46 ++++++++++++-- include/linux/sched.h | 14 ++-- kernel/audit.c | 4 +- kernel/audit.h | 6 +- kernel/audit_tree.c | 14 ++-- kernel/auditfilter.c | 28 ++++---- kernel/auditsc.c | 8 +- kernel/cgroup.c | 63 ++++++++++--------- kernel/cpuset.c | 2 +- kernel/cred.c | 50 ++++++++------- kernel/exit.c | 12 ++-- kernel/fork.c | 6 +- kernel/module.c | 20 ++++-- kernel/notifier.c | 12 ++-- kernel/perf_event.c | 52 ++++++++-------- kernel/pid.c | 8 +- kernel/sched.c | 31 +++++---- 27 files changed, 352 insertions(+), 229 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [PATCH 09/10] notifiers: __rcu annotations Next: module: __rcu annotations |