Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Arnd Bergmann <arnd <at> arndb.de>
Subject: [PATCH 00/10] __rcu annotations, first draft
Newsgroups: gmane.linux.kernel
Date: Wednesday 24th February 2010 20:03:56 UTC (over 6 years ago)
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(-)
 
CD: 3ms