Messages in this thread |  | | | Date | Wed, 24 Feb 2010 14:18:34 -0800 | | From | "Paul E. McKenney" <> | | Subject | Re: [PATCH 00/10] __rcu annotations, first draft |
| |
On Wed, Feb 24, 2010 at 09:03:56PM +0100, Arnd Bergmann wrote: > 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.
No need to apologize, this is an interesting option!
Thanx, Paul
> 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(-) >
|  |