* [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates
@ 2025-10-07 14:48 Akira Yokosawa
2025-10-07 14:49 ` [PATCH -perfbook 1/5] CodeSamples/formal: Update rcu-test.dat for v6.17 Akira Yokosawa
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Akira Yokosawa @ 2025-10-07 14:48 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
Hi Paul,
Prompted by your recent updates, I have looked into them and made final
touches for them.
Patch 1/5 is an independent update of rcu-test.dat for Linux v6.17.
Patches 2/5 and 4/5 take care of line-count references by embedding labels
in the .litmus sources.
Patches 3/5 and 5/5 add non-breakable white spaces around one-letter
variables and single digit numbers.
All of them have only summary phrases, but I think they should be good
enough.
Thanks, Akira
--
Akira Yokosawa (5):
CodeSamples/formal: Update rcu-test.dat for v6.17
together/applyrcu: Use \clnref{} and its friends in Section 13.5.9
together/applyrcu: Use nbsp around one-letter variables in Section 13.5.9
together/applyrcu: Use \clnref{} and its friends in Section 13.5.10
together/applyrcu: Use nbsp around one-letter variables in Section 13.5.10
CodeSamples/formal/data/rcu-test.dat | 1 +
...usync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus | 26 +++----
.../formal/herd/C-double-check-rcu-2.litmus | 32 ++++-----
together/applyrcu.tex | 71 +++++++++++--------
4 files changed, 72 insertions(+), 58 deletions(-)
base-commit: fb44848431946e5a42d42fd5dd8a05d6a2298805
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH -perfbook 1/5] CodeSamples/formal: Update rcu-test.dat for v6.17
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
@ 2025-10-07 14:49 ` Akira Yokosawa
2025-10-07 14:51 ` [PATCH -perfbook 2/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.9 Akira Yokosawa
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Akira Yokosawa @ 2025-10-07 14:49 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
CodeSamples/formal/data/rcu-test.dat | 1 +
1 file changed, 1 insertion(+)
diff --git a/CodeSamples/formal/data/rcu-test.dat b/CodeSamples/formal/data/rcu-test.dat
index d63c1bd7..56355595 100644
--- a/CodeSamples/formal/data/rcu-test.dat
+++ b/CodeSamples/formal/data/rcu-test.dat
@@ -104,3 +104,4 @@ v6.12 22834 12313 35147 35.0
"" 22107 12620 34727 36.3
"" 22300 12758 35058 36.4
v6.16 22370 12983 35353 36.7
+"" 22437 13261 35698 37.1
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH -perfbook 2/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.9
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
2025-10-07 14:49 ` [PATCH -perfbook 1/5] CodeSamples/formal: Update rcu-test.dat for v6.17 Akira Yokosawa
@ 2025-10-07 14:51 ` Akira Yokosawa
2025-10-07 14:52 ` [PATCH -perfbook 3/5] together/applyrcu: Use nbsp around one-letter variables " Akira Yokosawa
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Akira Yokosawa @ 2025-10-07 14:51 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
...usync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus | 26 ++++++++---------
together/applyrcu.tex | 29 ++++++++++++-------
2 files changed, 32 insertions(+), 23 deletions(-)
diff --git a/CodeSamples/formal/herd/C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus b/CodeSamples/formal/herd/C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus
index 2f0de350..73859c24 100644
--- a/CodeSamples/formal/herd/C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus
+++ b/CodeSamples/formal/herd/C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus
@@ -5,7 +5,7 @@ C C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul
int a=1;
int b;
int c;
- int *p=a;
+ int *p=a; //\lnlbl[init:p]
}
P0(int *a, int *b, int *c, int **p)
@@ -13,9 +13,9 @@ P0(int *a, int *b, int *c, int **p)
int *r1;
*b = 1;
- r1 = xchg(p, b);
- synchronize_rcu();
- *r1 = 0; // Emulate kfree();
+ r1 = xchg(p, b); //\lnlbl[P0:xchg]
+ synchronize_rcu(); //\lnlbl[P0:sync]
+ *r1 = 0; // Emulate kfree(); //\lnlbl[P0:free]
}
P1(int *a, int *b, int *c, int **p)
@@ -23,9 +23,9 @@ P1(int *a, int *b, int *c, int **p)
int *r1;
*c = 1;
- r1 = xchg(p, c);
- synchronize_rcu();
- *r1 = 0; // Emulate kfree();
+ r1 = xchg(p, c); //\lnlbl[P1:xchg]
+ synchronize_rcu(); //\lnlbl[P1:sync]
+ *r1 = 0; // Emulate kfree(); //\lnlbl[P1:free]
}
P2(int *a, int *b, int *c, int **p)
@@ -33,15 +33,15 @@ P2(int *a, int *b, int *c, int **p)
int *r1;
int r2;
- rcu_read_lock();
- r1 = rcu_dereference(*p);
- r2 = *r1;
- rcu_read_unlock();
+ rcu_read_lock(); //\lnlbl[P2:lock]
+ r1 = rcu_dereference(*p); //\lnlbl[P2:load]
+ r2 = *r1; //\lnlbl[P2:deref]
+ rcu_read_unlock(); //\lnlbl[P2:unlock]
}
//\end[snippet]
locations [0:r1; 1:r1; 2:r1; 2:r2; a; b; c; p]
(* Better not be freed!!! *)
-exists (2:r2=0 \/ a=1 \/
+exists (2:r2=0 \/ a=1 \/ (* \lnlbl[ex:1] *)
(* Better be only one in use! *)
- (b=1 /\ c=1) \/ (b=0 /\ c=0))
+ (b=1 /\ c=1) \/ (b=0 /\ c=0)) (* \lnlbl[ex:2] *)
diff --git a/together/applyrcu.tex b/together/applyrcu.tex
index ff1a276b..48eaa685 100644
--- a/together/applyrcu.tex
+++ b/together/applyrcu.tex
@@ -877,25 +877,30 @@ they use \co{rcu_assign_pointer()}.
However, if we have concurrent lockless updates, one update's
\co{rcu_assign_pointer()} can be silently overwritten by the next update,
resulting in a memory leak.
+\begin{fcvref}[ln:formal:C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul:whole]
One way to avoid this is to use an atomic \co{xchg()} instruction,
-as shown on lines~15 and~25 of
+as shown on \clnref{P0:xchg, P1:xchg} of
\cref{lst:formal:Configuration-Update Example}.
This way, the pointer from the overwritten \co{xchg()} is returned by
the next \co{xchg()}, allowing the caller to free it after an RCU
-grace period (lines~16 and 26).
+grace period (\clnref{P0:sync, P1:sync}).
Because the Linux-kernel memory model does not support dynamic allocation,
this code emulates freeing by storing the value zero.
+\end{fcvref}
\QuickQuiz{
Wait!!!
- Isn't it necessary for lines~17 and~27 of
+ \begin{fcvref}[ln:formal:C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul:whole]
+ Isn't it necessary for \clnref{P0:free, P1:free} of
\cref{lst:formal:Configuration-Update Example}
- to check for a \co{NULL} pointer returned from lines~15
- and~25?
+ to check for a \co{NULL} pointer returned from
+ \clnref{P0:xchg, P1:xchg}?
+ \end{fcvref}
}\QuickQuizAnswer{
In this textbook example, no.
- This is because line~7 initialized pointer \co{p} to point to
+ \begin{fcvref}[ln:formal:C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul:whole]
+ This is because \clnref{init:p} initialized pointer \co{p} to point to
variable \co{a}, so that this pointer will never be \co{NULL}.
However, this is a very good question to ask because in most
production-quality code, a \co{NULL} check would indeed be
@@ -903,19 +908,23 @@ this code emulates freeing by storing the value zero.
On top of that, the first sentence of this section suggested
that the pointer might in fact be \co{NULL}.
Adding the NULL checks is left as an exercise for the reader.
+ \end{fcvref}
}\QuickQuizEnd
+\begin{fcvref}[ln:formal:C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul:whole]
The reader can then be written as a straightforward RCU reader
-(lines~35 and~38), loading the current pointer on line~36 and
-dereferencing it on line~37.
+(\clnrefrange{P2:lock}{P2:unlock}),
+loading the current pointer on \clnref{P2:load} and
+dereferencing it on \clnref{P2:deref}.
Running this example
(\path{CodeSamples/formal/herd/C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus})
through \co{herd}
(see \cref{sec:formal:Axiomatic Approaches})
-verifies that this algorithm avoid use-after-free errors (line~43) and that it
+verifies that this algorithm avoid use-after-free errors (\clnref{ex:1}) and that it
emulates freeing of all but one of the objects \co{a}, \co{b}, and \co{c}
-(line~45), thus also avoiding memory leaks.
+(\clnref{ex:2}), thus also avoiding memory leaks.
+\end{fcvref}
\subsection{Lockless Double-Checked Locking}
\label{sec:together:Lockless Double-Checked Locking}
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH -perfbook 3/5] together/applyrcu: Use nbsp around one-letter variables in Section 13.5.9
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
2025-10-07 14:49 ` [PATCH -perfbook 1/5] CodeSamples/formal: Update rcu-test.dat for v6.17 Akira Yokosawa
2025-10-07 14:51 ` [PATCH -perfbook 2/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.9 Akira Yokosawa
@ 2025-10-07 14:52 ` Akira Yokosawa
2025-10-07 14:57 ` [PATCH -perfbook 4/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.10 Akira Yokosawa
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Akira Yokosawa @ 2025-10-07 14:52 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
together/applyrcu.tex | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/together/applyrcu.tex b/together/applyrcu.tex
index 48eaa685..ff462a3b 100644
--- a/together/applyrcu.tex
+++ b/together/applyrcu.tex
@@ -900,8 +900,8 @@ this code emulates freeing by storing the value zero.
In this textbook example, no.
\begin{fcvref}[ln:formal:C-MP+o-xchg-rcusync-o+o-xchg-rcusync-o+rl-o-o-rul:whole]
- This is because \clnref{init:p} initialized pointer \co{p} to point to
- variable \co{a}, so that this pointer will never be \co{NULL}.
+ This is because \clnref{init:p} initialized pointer~\co{p} to point to
+ variable~\co{a}, so that this pointer will never be \co{NULL}.
However, this is a very good question to ask because in most
production-quality code, a \co{NULL} check would indeed be
necessary.
@@ -922,7 +922,7 @@ Running this example
through \co{herd}
(see \cref{sec:formal:Axiomatic Approaches})
verifies that this algorithm avoid use-after-free errors (\clnref{ex:1}) and that it
-emulates freeing of all but one of the objects \co{a}, \co{b}, and \co{c}
+emulates freeing of all but one of the objects~\co{a}, \co{b}, and~\co{c}
(\clnref{ex:2}), thus also avoiding memory leaks.
\end{fcvref}
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH -perfbook 4/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.10
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
` (2 preceding siblings ...)
2025-10-07 14:52 ` [PATCH -perfbook 3/5] together/applyrcu: Use nbsp around one-letter variables " Akira Yokosawa
@ 2025-10-07 14:57 ` Akira Yokosawa
2025-10-07 14:58 ` [PATCH -perfbook 5/5] together/applyrcu: Use nbsp around one-letter variables " Akira Yokosawa
2025-10-07 15:12 ` [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Paul E. McKenney
5 siblings, 0 replies; 7+ messages in thread
From: Akira Yokosawa @ 2025-10-07 14:57 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
.../formal/herd/C-double-check-rcu-2.litmus | 32 +++++++++----------
together/applyrcu.tex | 32 +++++++++++--------
2 files changed, 34 insertions(+), 30 deletions(-)
diff --git a/CodeSamples/formal/herd/C-double-check-rcu-2.litmus b/CodeSamples/formal/herd/C-double-check-rcu-2.litmus
index e23bc081..ff7a1dd3 100644
--- a/CodeSamples/formal/herd/C-double-check-rcu-2.litmus
+++ b/CodeSamples/formal/herd/C-double-check-rcu-2.litmus
@@ -12,24 +12,24 @@ P0(int *a, int *b, int **p)
int *r1;
int r2;
- rcu_read_lock();
- r1 = rcu_dereference(*p);
- if (r1) {
- r2 = *r1;
- rcu_read_unlock();
+ rcu_read_lock(); //\lnlbl[P0:lock]
+ r1 = rcu_dereference(*p); //\lnlbl[P0:load]
+ if (r1) { //\lnlbl[P0:if]
+ r2 = *r1; //\lnlbl[P0:deref]
+ rcu_read_unlock(); //\lnlbl[P0:unl:1]
} else {
- rcu_read_unlock();
- *a = 1;
- r1 = xchg(p, a);
- if (r1) {
- synchronize_rcu();
- *r1 = 0; // Emulate kfree();
+ rcu_read_unlock(); //\lnlbl[P0:unl:2]
+ *a = 1; //\lnlbl[P0:init:a]
+ r1 = xchg(p, a); //\lnlbl[P0:xchg]
+ if (r1) { //\lnlbl[P0:if:2]
+ synchronize_rcu(); //\lnlbl[P0:sync]
+ *r1 = 0; // Emulate kfree(); //\lnlbl[P0:free]
}
r2 = 1;
}
}
-P1(int *a, int *b, int **p)
+P1(int *a, int *b, int **p) //\lnlbl[P1:b]
{
int *r1;
int r2;
@@ -49,11 +49,11 @@ P1(int *a, int *b, int **p)
}
r2 = 1;
}
-}
+} //\lnlbl[P1:e]
//\end[snippet]
-locations [0:r1; 1:r1; a; b; p]
+locations [0:r1; 1:r1; a; b; p] (* \lnlbl[loc] *)
(* Reader better not see freed element!!! *)
-exists (0:r2=0 \/ 1:r2=0 \/
+exists (0:r2=0 \/ 1:r2=0 \/ (* \lnlbl[ex:1] *)
(* Better only be one in use! *)
- (a=1 /\ b=1) \/ (a=0 /\ b=0))
+ (a=1 /\ b=1) \/ (a=0 /\ b=0)) (* \lnlbl[ex:2] *)
diff --git a/together/applyrcu.tex b/together/applyrcu.tex
index ff462a3b..455bf2a1 100644
--- a/together/applyrcu.tex
+++ b/together/applyrcu.tex
@@ -957,31 +957,35 @@ avoid disrupting concurrent readers, for example, as shown in
The fastpath covers the common case where initialization has already
completed.
-Line~14 begins an RCU read-side critical section, and line~15 fetches
+\begin{fcvref}[ln:formal:C-double-check-rcu-2:whole:P0]
+\Clnref{lock} begins an RCU read-side critical section, and \clnref{load} fetches
the current pointer.
-If line~16 determines that this pointer is non-\co{NULL}, then
-initialization is complete, so that line~17 fetches the element's contents
-and line~18 exits the critical section.
+If \clnref{if} determines that this pointer is non-\co{NULL}, then
+initialization is complete, so that \clnref{deref} fetches the element's contents
+and \clnref{unl:1} exits the critical section.
-Otherwise, line~16 will see the pre-initialization \co{NULL} pointer
-and transfer control to line~20, which exits the RCU read-side critical
+Otherwise, \clnref{if} will see the pre-initialization \co{NULL} pointer
+and transfer control to \clnref{unl:2}, which exits the RCU read-side critical
section.
-Line~21 initializes the element (abstracting away any required allocation),
-line~22 atomically exchanges the pointer to this element with the global
+\Clnref{init:a} initializes the element (abstracting away any required allocation),
+\clnref{xchg} atomically exchanges the pointer to this element with the global
pointer \co{p}, returning the old value in \co{r1}.
-If line~23 determines that \co{r1} was non-\co{NULL}, then line~24
-waits for any readers accessing the old element to finish and line~25
+If \clnref{if:2} determines that \co{r1} was non-\co{NULL}, then \clnref{sync}
+waits for any readers accessing the old element to finish and \clnref{free}
emulates a \co{kfree()}.
Either way, \co{r2} is set to the initial value of 1.
+\end{fcvref}
-Lines~31-51 operate in the same manner, but using element \co{b} instead
+\begin{fcvref}[ln:formal:C-double-check-rcu-2:whole]
+\Clnrefrange{P1:b}{P1:e} operate in the same manner, but using element \co{b} instead
of \co{a}.
-Line~53 displays all variables to ease debugging of the litmus test.
-Line~55 verifies that both processes obtain an initialized value,
-and line~57 verifies that there are no memory leaks and that at least
+\Clnref{loc} displays all variables to ease debugging of the litmus test.
+\Clnref{ex:1} verifies that both processes obtain an initialized value,
+and \clnref{ex:2} verifies that there are no memory leaks and that at least
one element remains in use.
Running \co{herd} confirms that this code satisfies these constraints.
+\end{fcvref}
\QuickQuiz{
But wouldn't memory allocation also be forbidden in such
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH -perfbook 5/5] together/applyrcu: Use nbsp around one-letter variables in Section 13.5.10
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
` (3 preceding siblings ...)
2025-10-07 14:57 ` [PATCH -perfbook 4/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.10 Akira Yokosawa
@ 2025-10-07 14:58 ` Akira Yokosawa
2025-10-07 15:12 ` [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Paul E. McKenney
5 siblings, 0 replies; 7+ messages in thread
From: Akira Yokosawa @ 2025-10-07 14:58 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
together/applyrcu.tex | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/together/applyrcu.tex b/together/applyrcu.tex
index 455bf2a1..6004cb24 100644
--- a/together/applyrcu.tex
+++ b/together/applyrcu.tex
@@ -969,16 +969,16 @@ and transfer control to \clnref{unl:2}, which exits the RCU read-side critical
section.
\Clnref{init:a} initializes the element (abstracting away any required allocation),
\clnref{xchg} atomically exchanges the pointer to this element with the global
-pointer \co{p}, returning the old value in \co{r1}.
+pointer~\co{p}, returning the old value in \co{r1}.
If \clnref{if:2} determines that \co{r1} was non-\co{NULL}, then \clnref{sync}
waits for any readers accessing the old element to finish and \clnref{free}
emulates a \co{kfree()}.
-Either way, \co{r2} is set to the initial value of 1.
+Either way, \co{r2} is set to the initial value of~1.
\end{fcvref}
\begin{fcvref}[ln:formal:C-double-check-rcu-2:whole]
-\Clnrefrange{P1:b}{P1:e} operate in the same manner, but using element \co{b} instead
-of \co{a}.
+\Clnrefrange{P1:b}{P1:e} operate in the same manner, but using element~\co{b} instead
+of~\co{a}.
\Clnref{loc} displays all variables to ease debugging of the litmus test.
\Clnref{ex:1} verifies that both processes obtain an initialized value,
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
` (4 preceding siblings ...)
2025-10-07 14:58 ` [PATCH -perfbook 5/5] together/applyrcu: Use nbsp around one-letter variables " Akira Yokosawa
@ 2025-10-07 15:12 ` Paul E. McKenney
5 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2025-10-07 15:12 UTC (permalink / raw)
To: Akira Yokosawa; +Cc: perfbook
On Tue, Oct 07, 2025 at 11:48:34PM +0900, Akira Yokosawa wrote:
> Hi Paul,
>
> Prompted by your recent updates, I have looked into them and made final
> touches for them.
>
> Patch 1/5 is an independent update of rcu-test.dat for Linux v6.17.
>
> Patches 2/5 and 4/5 take care of line-count references by embedding labels
> in the .litmus sources.
>
> Patches 3/5 and 5/5 add non-breakable white spaces around one-letter
> variables and single digit numbers.
>
> All of them have only summary phrases, but I think they should be good
> enough.
Agreed! Queued and pushed, and thank you very much! Those line-count
changes especially will make any future modifications of those litmus
tests much easier.
Thanx, Paul
> Thanks, Akira
> --
> Akira Yokosawa (5):
> CodeSamples/formal: Update rcu-test.dat for v6.17
> together/applyrcu: Use \clnref{} and its friends in Section 13.5.9
> together/applyrcu: Use nbsp around one-letter variables in Section 13.5.9
> together/applyrcu: Use \clnref{} and its friends in Section 13.5.10
> together/applyrcu: Use nbsp around one-letter variables in Section 13.5.10
>
> CodeSamples/formal/data/rcu-test.dat | 1 +
> ...usync-o+o-xchg-rcusync-o+rl-o-o-rul.litmus | 26 +++----
> .../formal/herd/C-double-check-rcu-2.litmus | 32 ++++-----
> together/applyrcu.tex | 71 +++++++++++--------
> 4 files changed, 72 insertions(+), 58 deletions(-)
>
>
> base-commit: fb44848431946e5a42d42fd5dd8a05d6a2298805
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-10-07 15:12 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-07 14:48 [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Akira Yokosawa
2025-10-07 14:49 ` [PATCH -perfbook 1/5] CodeSamples/formal: Update rcu-test.dat for v6.17 Akira Yokosawa
2025-10-07 14:51 ` [PATCH -perfbook 2/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.9 Akira Yokosawa
2025-10-07 14:52 ` [PATCH -perfbook 3/5] together/applyrcu: Use nbsp around one-letter variables " Akira Yokosawa
2025-10-07 14:57 ` [PATCH -perfbook 4/5] together/applyrcu: Use \clnref{} and its friends in Section 13.5.10 Akira Yokosawa
2025-10-07 14:58 ` [PATCH -perfbook 5/5] together/applyrcu: Use nbsp around one-letter variables " Akira Yokosawa
2025-10-07 15:12 ` [PATCH -perfbook 0/5] together/applyrcu: Final touches for recent updates Paul E. McKenney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox