summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@kernel.org>2023-06-02 11:52:58 -0700
committerPaul E. McKenney <paulmck@kernel.org>2023-06-02 11:52:58 -0700
commit94f01e467566ebfaee77868cc02b747e8950ad0b (patch)
tree97565544e172a0b4cb1a991f3cb70da6bebd80e3
parent5b30425421c140af7ff1293820ee6fe85c8a6499 (diff)
downloadperfbook-94f01e467566ebfaee77868cc02b747e8950ad0b.tar.gz
together/applyrcu: Note possibility of lost counts
Reported-by: Alan Huang <mmpgouride@gmail.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
-rw-r--r--together/applyrcu.tex9
1 files changed, 9 insertions, 0 deletions
diff --git a/together/applyrcu.tex b/together/applyrcu.tex
index dee027b9..a9cbfd22 100644
--- a/together/applyrcu.tex
+++ b/together/applyrcu.tex
@@ -151,6 +151,15 @@ is invoked by each newly created thread.
So, interestingly enough, when adding a new thread, this
implementation gets the effect of allocating a new structure,
but without actually having to do the allocation.
+
+ \begin{fcvref}[ln:count:count_end_rcu:whole:unreg]
+ On the other hand, \co{count_unregister_thread()} can result
+ in the outgoing thread's counts being lost.
+ This can happen when \co{read_count()} is invoked between
+ \clnref{null,assign}.
+ There are efficient ways of avoiding this count loss, but
+ these are left as an exercise for the reader.
+ \end{fcvref}
}\QuickQuizEnd
\begin{fcvref}[ln:count:count_end_rcu:whole:unreg]