Re: [PATCH] defer: Fix grammar issues across Chapter 9 text

"Kunwu Chan" <[email protected]> Fri, 27 Feb 2026 02:34:43 +0000
Newsgroups org.kernel.vger.perfbook
Message-ID <[email protected]>
February 27, 2026 at 3:09 AM, "Paul E. McKenney" <[email protected] mail=
to:[email protected]?to=3D%22Paul%20E.%20McKenney%22%20%3Cpaulmck%40kern=
el.org%3E > wrote:


>=20
>=20On Thu, Feb 26, 2026 at 02:49:16AM +0000, Kunwu Chan wrote:
>=20
>=20>=20
>=20> February 26, 2026 at 9:02 AM, "Paul E. McKenney" <[email protected]=
g mailto:[email protected]?to=3D%22Paul%20E.%20McKenney%22%20%3Cpaulmck%=
40kernel.org%3E > wrote:
> >=20=20
>=20>=20=20
>=20>=20=20
>=20>  On Wed, Feb 25, 2026 at 08:44:24PM +0800, Kunwu Chan wrote:
> >=20=20
>=20>  >=20
>=20>  > Fix subject-verb agreement, singular/plural forms, pronoun agree=
ment,
> >  > and countability in Chapter 9 prose.
> >  >=20
>=20>  > These wording-only edits improve readability without changing
> >  > technical meaning.
> >  >=20
>=20>  > Signed-off-by: Kunwu Chan <[email protected]>
> >  >=20
>=20>  Again, good eyes and thank you! I applied all three, with the exce=
ption of=20
>=20>  this hunk:
> >=20=20
>=20>  ------------------------------------------------------------------=
------
> >=20=20
>=20>  diff --git a/defer/rcufundamental.tex b/defer/rcufundamental.tex
> >  index 0c8c2e23..23bda66b 100644
> >  --- a/defer/rcufundamental.tex
> >  +++ b/defer/rcufundamental.tex
> >  @@ -559,7 +559,7 @@ tolerable, they are in fact invisible.
> >  In such cases, RCU readers can be considered to be fully ordered wit=
h
> >  updaters, despite the fact that these readers might be executing the
> >  exact same sequence of machine instructions that would be executed b=
y
> >  -a single-threaded program, as hinted on
> >  +a single-threaded program, as hinted at
> >  \cpageref{sec:defer:Mysteries RCU}.
> >  For example, referring back to
> >  \cref{lst:defer:Insertion and Deletion With Concurrent Readers}
> >=20=20
>=20>  ------------------------------------------------------------------=
------
> >=20=20
>=20>  This one is one of the many strangenesses of English. You might st=
art
> >  reading "at page 30", but you would find information "on page 30". O=
r
> >  am I misreading this?
> >=20=20
>=20>  Thanx, Paul
> >=20=20
>=20>  Makes sense =E2=80=94 both forms seem to be used.
> >=20=20
>=20>  I originally changed it based on my understanding of the usual phr=
asing,
> >  but I also noticed the perfbook currently uses both "hinted at" and =
"hinted on".
> >  I can send a small follow-up patch to make them consistent if that s=
ounds good.
> >=20
>=20Good point!
>=20
>=20But when I took a quick look, I found reasons for the divergence.
> Maybe the best way forward is for you to send me a list of (say) 25 of
> them, and for me to explain why what is there is correct on the one han=
d
> or to not the needed change on the other.
>=20
>=20Then you could use that information to create the patch for those
> needing change.
>=20
>=20Seem reasonable?
>=20
>=20 Thanx, Paul
>=20
Hi=20Paul,

Sounds good. I went through the current PDF and gathered the occurrences=
=20
of=20"hinted at/on" that I could find. Here is the list for review:

Using PDF file: perfbook.2025.12.18a.pdf.

1) PDF location:
   p.98 (PDF page 110/686), Chapter 6 (Beyond Partitioning)
   Source location: SMPdesign/beyond.tex (line 14)

   =E2=80=9CThis chapter has discussed how data partitioning can be used =
to
   design simple linearly scalable parallel programs.
   \Cref{sec:SMPdesign:Data Ownership} hinted at the possibilities of
   data replication, which will be used to great effect in
   \cref{sec:defer:Read-Copy Update (RCU)}.=E2=80=9D

2) PDF location:
   p.142 (PDF page 154/686), Chapter 9.4 (Sequence Locks)
   Source location: defer/seqlock.tex (lines 411=E2=80=93416)

   =E2=80=9CAs hinted on
   \cpageref{sec:defer:Mysteries sequence locking},
   both the read-side and write-side critical sections of a sequence
   lock can be thought of as transactions, and sequence locking
   therefore can be thought of as a limited form of transactional
   memory, which will be discussed in
   \cref{sec:future:Transactional Memory}.=E2=80=9D

3) PDF location:
   p.155 (PDF page 167/686), Chapter 9.5 (RCU)
   Source location: defer/rcufundamental.tex (lines 559=E2=80=93563)

   =E2=80=9CIn such cases, RCU readers can be considered to be fully orde=
red with
   updaters, despite the fact that these readers might be executing the
   exact same sequence of machine instructions that would be executed by
   a single-threaded program, as hinted on
   \cpageref{sec:defer:Mysteries RCU}.=E2=80=9D

4) PDF location:
   p.184 (PDF page 196/686), Chapter 9.5.4.12 area
   Source location: defer/rcuusage.tex (lines 2052=E2=80=932054)

   =E2=80=9CAnd so it is that RCU's use cases are conceptually more compl=
ex than
   is RCU itself, as hinted on
   \cpageref{sec:defer:Mysteries RCU Use Cases}.=E2=80=9D

5) PDF location:
   p.533 (PDF page 545/686), Quick Quiz answers area
   Source location: defer/rcuintro.tex (lines 141=E2=80=93145)

   =E2=80=9CAs hinted at in
   \cref{sec:cpu:Hardware Optimizations,sec:cpu:Hardware Free Lunch?},
   speed-of-light delays mean that a computer's data is always stale
   compared to whatever external reality that data is intended to model.=
=E2=80=9D

Please let me know which ones you=E2=80=99d prefer to keep as-is and=20
which=20should be adjusted, and I=E2=80=99ll prepare a patch accordingly.


Thanx, Kunwu

> >=20
>=20> Thanx, Kunwu
> >=20=20
>=20>  >=20
>=20>  > ---
> >  > defer/defer.tex | 2 +-
> >  > defer/rcu.tex | 2 +-
> >  > defer/rcuapi.tex | 2 +-
> >  > defer/rcufundamental.tex | 2 +-
> >  > defer/rcuusage.tex | 4 ++--
> >  > defer/whichtochoose.tex | 10 +++++-----
> >  > 6 files changed, 11 insertions(+), 11 deletions(-)
> >  >=20
>=20>  > diff --git a/defer/defer.tex b/defer/defer.tex
> >  > index eefb1215..3a24ee5d 100644
> >  > --- a/defer/defer.tex
> >  > +++ b/defer/defer.tex
> >  > @@ -87,7 +87,7 @@ interface~3, and address~17 to interface~7.
> >  > This list will normally be searched frequently and updated rarely.
> >  > In \cref{chp:Hardware and its Habits}
> >  > we learned that the best ways to evade inconvenient laws of physic=
s, such as
> >  > -the finite speed of light and the atomic nature of matter, is to
> >  > +the finite speed of light and the atomic nature of matter, are to
> >  > either partition the data or to rely on read-mostly sharing.
> >  > This chapter applies read-mostly sharing techniques to Pre-BSD pac=
ket
> >  > routing.
> >  > diff --git a/defer/rcu.tex b/defer/rcu.tex
> >  > index 13078687..9d812d77 100644
> >  > --- a/defer/rcu.tex
> >  > +++ b/defer/rcu.tex
> >  > @@ -16,7 +16,7 @@ use explicit counters to defer actions that coul=
d disturb readers,
> >  > which results in read-side contention and thus poor scalability.
> >  > The hazard pointers covered by
> >  > \cref{sec:defer:Hazard Pointers}
> >  > -uses implicit counters in the guise of per-thread lists of pointe=
r.
> >  > +use implicit counters in the guise of per-thread lists of pointer=
s.
> >  > This avoids read-side contention, but requires readers to do store=
s and
> >  > conditional branches, as well as either \IXhpl{full}{memory barrie=
r}
> >  > in read-side primitives or real-time-unfriendly \IXacrlpl{ipi} in
> >  > diff --git a/defer/rcuapi.tex b/defer/rcuapi.tex
> >  > index 4e231e5a..09e7c277 100644
> >  > --- a/defer/rcuapi.tex
> >  > +++ b/defer/rcuapi.tex
> >  > @@ -599,7 +599,7 @@ to reuse during the grace period that otherwis=
e would have allowed them
> >  > to be freed.
> >  > Although this can be handled through careful use of flags that int=
eract
> >  > with the RCU callback queued by \co{call_rcu()}, this can be incon=
venient
> >  > -and can waste CPU times due to the overhead of the doomed \co{cal=
l_rcu()}
> >  > +and can waste CPU time due to the overhead of the doomed \co{call=
_rcu()}
> >  > invocations.
> >  >=20
>=20>  > In these cases, RCU's polled grace-period primitives can be help=
ful.
> >  > diff --git a/defer/rcufundamental.tex b/defer/rcufundamental.tex
> >  > index ccfe9133..604381a9 100644
> >  > --- a/defer/rcufundamental.tex
> >  > +++ b/defer/rcufundamental.tex
> >  > @@ -11,7 +11,7 @@ independent of any particular example or use cas=
e.
> >  > People who prefer to live their lives very close to the actual cod=
e may
> >  > wish to skip the underlying fundamentals presented in this section=
.
> >  >=20
>=20>=20=20> -The common use of RCU to protect linked data structure is c=
omprised
> >  > +The common use of RCU to protect linked data structures is compri=
sed
> >  > of three fundamental mechanisms, the first being used for insertio=
n,
> >  > the second being used for deletion, and the third being used to al=
low
> >  > readers to tolerate concurrent insertions and deletions.
> >  > diff --git a/defer/rcuusage.tex b/defer/rcuusage.tex
> >  > index 2bbd4cef..36939300 100644
> >  > --- a/defer/rcuusage.tex
> >  > +++ b/defer/rcuusage.tex
> >  > @@ -156,7 +156,7 @@ that of the ideal synchronization-free workloa=
d.
> >  > \cref{sec:cpu:Pipelined CPUs}
> >  > carefully already knew all of this!
> >  >=20
>=20>  > - These counter-intuitive results of course means that any
> >  > + These counter-intuitive results of course mean that any
> >  > performance result on modern microprocessors must be subject to
> >  > some skepticism.
> >  > In theory, it really does not make sense to obtain performance
> >  > @@ -241,7 +241,7 @@ As noted in \cref{sec:defer:RCU Fundamentals}
> >  > an important component
> >  > of RCU is a way of waiting for RCU readers to finish.
> >  > One of
> >  > -RCU's great strength is that it allows you to wait for each of
> >  > +RCU's great strengths is that it allows you to wait for each of
> >  > thousands of different things to finish without having to explicit=
ly
> >  > track each and every one of them, and without incurring
> >  > the performance degradation, scalability limitations, complex dead=
lock
> >  > diff --git a/defer/whichtochoose.tex b/defer/whichtochoose.tex
> >  > index a152b028..a11de412 100644
> >  > --- a/defer/whichtochoose.tex
> >  > +++ b/defer/whichtochoose.tex
> >  > @@ -102,8 +102,8 @@ and that there be sufficient pointers for each=
 CPU or thread to
> >  > track all the objects being referenced at any given time.
> >  > Given that most hazard-pointer-based traversals require only a few
> >  > hazard pointers, this is not normally a problem in practice.
> >  > -Of course, sequence locks provides no pointer-traversal protectio=
n,
> >  > -which is why it is normally used on static data.
> >  > +Of course, sequence locks provide no pointer-traversal protection=
,
> >  > +which is why they are normally used on static data.
> >  >=20
>=20>  > \QuickQuiz{
> >  > Why can't users dynamically allocate the hazard pointers as they
> >  > @@ -124,7 +124,7 @@ RCU readers must therefore be relatively short=
 in order to avoid running
> >  > the system out of memory, with special-purpose implementations suc=
h
> >  > as SRCU, Tasks RCU, and Tasks Trace RCU being exceptions to this r=
ule.
> >  > Again, sequence locks provide no pointer-traversal protection,
> >  > -which is why it is normally used on static data.
> >  > +which is why they are normally used on static data.
> >  >=20
>=20>  > The ``Need for Traversal Retries'' row tells whether a new refer=
ence to
> >  > a given object may be acquired unconditionally, as it can with RCU=
, or
> >  > @@ -319,7 +319,7 @@ Hazard pointers incur the overhead of a \IX{me=
mory barrier}
> >  > for each data element
> >  > traversed, and sequence locks incur the overhead of a pair of memo=
ry barriers
> >  > for each attempt to execute the critical section.
> >  > -The overhead of RCU implementations vary from nothing to that of =
a pair of
> >  > +The overhead of RCU implementations varies from nothing to that o=
f a pair of
> >  > memory barriers for each read-side critical section, thus providin=
g RCU
> >  > with the best performance, particularly for read-side critical sec=
tions
> >  > that traverse many data elements.
> >  > @@ -622,7 +622,7 @@ Stjepan Glavina merged an epoch-based RCU impl=
ementation into the
> >  > \co{crossbeam} set of concurrency-support ``crates'' for the Rust
> >  > language~\cite{StjepanGlavina2018RustRCU}.
> >  >=20
>=20>  > -Jason Donenfeld produced an RCU implementations as part of his =
port of
> >  > +Jason Donenfeld produced an RCU implementation as part of his por=
t of
> >  > WireGuard to Windows~NT kernel~\cite{JasonDonenfeld2021:WindowsNTw=
ireguardRCU}.
> >  >=20
>=20>  > Finally, any garbage-collected concurrent language (not just Go!=
\@) gets
> >  > --=20
>=20>  > 2.25.1
> >  >
> >
>