* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.