All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH-perfbook] memorder: Fix typos
@ 2022-02-03 21:10 Johann Klähn
  2022-02-03 22:01 ` Paul E. McKenney
  0 siblings, 1 reply; 2+ messages in thread
From: Johann Klähn @ 2022-02-03 21:10 UTC (permalink / raw)
  To: Paul E. McKenney; +Cc: perfbook

Signed-off-by: Johann Klähn <johann@jklaehn.de>
---
 memorder/memorder.tex | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/memorder/memorder.tex b/memorder/memorder.tex
index 865eff95..9792099f 100644
--- a/memorder/memorder.tex
+++ b/memorder/memorder.tex
@@ -2169,7 +2169,7 @@ from a particular store, then, courtesy of the finite speed of light and
 the non-zero size of modern computing systems, the store absolutely has
 to have executed at an earlier time than did the load.
 This means that carefully constructed programs can rely on the
-passage of time itself as an memory-ordering operation.
+passage of time itself as a memory-ordering operation.
 
 \begin{figure}
 \centering
@@ -2588,7 +2588,7 @@ if (p == &reserve_int) {
 \item	Although it is permissible to compute offsets from a
 	pointer, these offsets must not result in total cancellation.
 	For example, given a \co{char} pointer \co{cp},
-	\co{cp-(uintptr_t)cp)} will cancel and can allow the compiler
+	\co{cp-(uintptr_t)cp} will cancel and can allow the compiler
 	to break your dependency chain.
 	On the other hand, canceling offset values with each other
 	is perfectly safe and legal.
@@ -2753,7 +2753,7 @@ void updater(void)		\lnlbl[upd:b]
 {
 	struct foo *p;
 
-	p = malloc(sizeo(*p));		\lnlbl[upd:alloc]
+	p = malloc(sizeof(*p));		\lnlbl[upd:alloc]
 	BUG_ON(!p);			\lnlbl[upd:bug]
 	p->a = 42;			\lnlbl[upd:init:a]
 	p->b = 43;
@@ -2803,7 +2803,7 @@ bitterly on \clnref{bug} if none is available.
 \Clnrefrange{init:a}{init:c} initialize the newly allocated structure,
 and then \clnref{assign1} assigns the pointer to \co{gp1}.
 \Clnref{upd:b,upd:c} then update two of the structure's fields, and does
-so \co{after} \clnref{assign1} has made those fields visible to readers.
+so \emph{after} \clnref{assign1} has made those fields visible to readers.
 Please note that unsynchronized update of reader-visible fields
 often constitutes a bug.
 Although there are legitimate use cases doing just this, such use cases
@@ -3032,7 +3032,7 @@ if (q || 1 > 0)
 
 Because the first condition cannot fault and the second condition is
 always true, the compiler can transform this example as following,
-defeating control dependency:
+defeating the control dependency:
 
 \begin{VerbatimN}
 q = READ_ONCE(x);
@@ -3238,7 +3238,7 @@ These facts are what enables the lockless fastpaths in
 \cref{lst:SMPdesign:Allocator-Cache Allocator Function,%
 lst:SMPdesign:Allocator-Cache Free Function},
 respectively.
-However, this also why the developer is responsible for providing
+However, this is also why the developer is responsible for providing
 appropriate ordering (for example, by using \co{smp_store_release()})
 when publishing a pointer to a newly allocated block of memory.
 After all, in the CPU-local case, the allocator has not necessarily
@@ -3307,7 +3307,7 @@ As it turns out, quite a bit:
 	Is some other CPU or thread not holding that lock guaranteed to
 	see A and B in order?
 \item	As above, but with the lock reacquisition carried out by some
-	other CPU or threads?
+	other CPU or thread?
 \item	As above, but with the lock reacquisition being some other lock?
 \item	What ordering guarantees are provided by \co{spin_is_locked()}?
 \end{enumerate}
@@ -3571,7 +3571,7 @@ One reason is modeling performance, as shown in
 on
 \cpageref{tab:formal:Locking: Modeling vs. Emulation Time (s)}.
 Directly modeling locking in general is orders of magnitude faster
-than modeling even a trivial implementation.
+than emulating even a trivial implementation.
 This should be no surprise, given the combinatorial explosion experienced
 by present-day formal-verification tools with increases in the number of
 memory accesses executed by the code being modeled.
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH-perfbook] memorder: Fix typos
  2022-02-03 21:10 [PATCH-perfbook] memorder: Fix typos Johann Klähn
@ 2022-02-03 22:01 ` Paul E. McKenney
  0 siblings, 0 replies; 2+ messages in thread
From: Paul E. McKenney @ 2022-02-03 22:01 UTC (permalink / raw)
  To: Johann Klähn; +Cc: perfbook

On Thu, Feb 03, 2022 at 10:10:01PM +0100, Johann Klähn wrote:
> Signed-off-by: Johann Klähn <johann@jklaehn.de>

Good catches, queued and pushed, thank you!

							Thanx, Paul

> ---
>  memorder/memorder.tex | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/memorder/memorder.tex b/memorder/memorder.tex
> index 865eff95..9792099f 100644
> --- a/memorder/memorder.tex
> +++ b/memorder/memorder.tex
> @@ -2169,7 +2169,7 @@ from a particular store, then, courtesy of the finite speed of light and
>  the non-zero size of modern computing systems, the store absolutely has
>  to have executed at an earlier time than did the load.
>  This means that carefully constructed programs can rely on the
> -passage of time itself as an memory-ordering operation.
> +passage of time itself as a memory-ordering operation.
>  
>  \begin{figure}
>  \centering
> @@ -2588,7 +2588,7 @@ if (p == &reserve_int) {
>  \item	Although it is permissible to compute offsets from a
>  	pointer, these offsets must not result in total cancellation.
>  	For example, given a \co{char} pointer \co{cp},
> -	\co{cp-(uintptr_t)cp)} will cancel and can allow the compiler
> +	\co{cp-(uintptr_t)cp} will cancel and can allow the compiler
>  	to break your dependency chain.
>  	On the other hand, canceling offset values with each other
>  	is perfectly safe and legal.
> @@ -2753,7 +2753,7 @@ void updater(void)		\lnlbl[upd:b]
>  {
>  	struct foo *p;
>  
> -	p = malloc(sizeo(*p));		\lnlbl[upd:alloc]
> +	p = malloc(sizeof(*p));		\lnlbl[upd:alloc]
>  	BUG_ON(!p);			\lnlbl[upd:bug]
>  	p->a = 42;			\lnlbl[upd:init:a]
>  	p->b = 43;
> @@ -2803,7 +2803,7 @@ bitterly on \clnref{bug} if none is available.
>  \Clnrefrange{init:a}{init:c} initialize the newly allocated structure,
>  and then \clnref{assign1} assigns the pointer to \co{gp1}.
>  \Clnref{upd:b,upd:c} then update two of the structure's fields, and does
> -so \co{after} \clnref{assign1} has made those fields visible to readers.
> +so \emph{after} \clnref{assign1} has made those fields visible to readers.
>  Please note that unsynchronized update of reader-visible fields
>  often constitutes a bug.
>  Although there are legitimate use cases doing just this, such use cases
> @@ -3032,7 +3032,7 @@ if (q || 1 > 0)
>  
>  Because the first condition cannot fault and the second condition is
>  always true, the compiler can transform this example as following,
> -defeating control dependency:
> +defeating the control dependency:
>  
>  \begin{VerbatimN}
>  q = READ_ONCE(x);
> @@ -3238,7 +3238,7 @@ These facts are what enables the lockless fastpaths in
>  \cref{lst:SMPdesign:Allocator-Cache Allocator Function,%
>  lst:SMPdesign:Allocator-Cache Free Function},
>  respectively.
> -However, this also why the developer is responsible for providing
> +However, this is also why the developer is responsible for providing
>  appropriate ordering (for example, by using \co{smp_store_release()})
>  when publishing a pointer to a newly allocated block of memory.
>  After all, in the CPU-local case, the allocator has not necessarily
> @@ -3307,7 +3307,7 @@ As it turns out, quite a bit:
>  	Is some other CPU or thread not holding that lock guaranteed to
>  	see A and B in order?
>  \item	As above, but with the lock reacquisition carried out by some
> -	other CPU or threads?
> +	other CPU or thread?
>  \item	As above, but with the lock reacquisition being some other lock?
>  \item	What ordering guarantees are provided by \co{spin_is_locked()}?
>  \end{enumerate}
> @@ -3571,7 +3571,7 @@ One reason is modeling performance, as shown in
>  on
>  \cpageref{tab:formal:Locking: Modeling vs. Emulation Time (s)}.
>  Directly modeling locking in general is orders of magnitude faster
> -than modeling even a trivial implementation.
> +than emulating even a trivial implementation.
>  This should be no surprise, given the combinatorial explosion experienced
>  by present-day formal-verification tools with increases in the number of
>  memory accesses executed by the code being modeled.
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-02-03 22:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-03 21:10 [PATCH-perfbook] memorder: Fix typos Johann Klähn
2022-02-03 22:01 ` 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.