Re: Internal vs. external barriers (was: Re: Interesting LKMM litmus test)

From: Jonas Oberhauser
Date: Fri Jan 20 2023 - 15:57:16 EST




On 1/20/2023 4:32 PM, Paul E. McKenney wrote:
On Fri, Jan 20, 2023 at 01:51:01PM +0100, Jonas Oberhauser wrote:
I'm not going to get it right today, am I?
Believe me, I know that feeling! Open-source development is therefore
an extremely good character-building exercise. At least that is what
I keep telling myself. ;-)

"Calvin, go do something you hate! Being miserable builds character!"


+let srcu-rscs = ([Srcu-lock] ; (data ; [~ Srcu-unlock] ; rfe) * ; data ;
[Srcu-unlock]) & loc

I see now that I copied the format from your message but without realizing
the original had a `|` where I have a `;`.
I hope this version is finally right and perhaps more natural than the (data
| rf) version, considering rf can't actually appear in most places and this
more closely matches carry-dep;data.
But of course feel free to use
+let srcu-rscs = ([Srcu-lock] ; (data  | [~ Srcu-unlock] ; rf)+ ;
[Srcu-unlock]) & loc
instead if you prefer.

The reason for favoring "rf" over "rfe" is the possibility of a litmus
test where the process containing the srcu_down_read() sometimes but
not always also has the matching srcu_up_read(). Perhaps a pair of "if"
statements control which process does the matching srcu_up_read().

If you put the redefinition of data early enough to affect this definition, the rfi option should be covered by the carry-dep in the redefinition of data, so I left it out.

And thank you!!!

always ;-)

jonas