rcu: Panic if a call_rcu() CB blocks
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 19 Jul 2018 21:14:54 +0000 (17:14 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 19 Jul 2018 21:21:52 +0000 (17:21 -0400)
commitb778c95c529faba19efffaf688deab99b45cee0a
tree9d4f1ecda408dcbb34642d530bdd9837f877abcc
parent8755f50ce5ff3bc644332b7c235da12cf942a24f
rcu: Panic if a call_rcu() CB blocks

RCU callbacks are not allowed to block.  Here's what Linux has to say:

... the callback function must be written to be called from softirq
context.  In particular, it cannot block.

Same goes for us.  If a CB blocks, then all further CBs will be blocked
too, and the code that will wake up the first CB could also be blocked on a
later CB.

Note the distinction between RCU callbacks and RCU threads.  The threads
are critical parts of implementing RCU; they are never allowed to block on
RCU primitives.  Yes, any RCU callback will be run by an RCU thread, but
the problem is slightly different.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/trap.h
kern/src/rcu.c