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. ;-)
+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().
And thank you!!!