On Tue, Jan 17, 2023 at 10:56:34AM -0500, Alan Stern wrote:
On Tue, Jan 17, 2023 at 07:14:16AM -0800, Paul E. McKenney wrote:Now that you mention it, it does indeed, flagging srcu-bad-nesting.
On Tue, Jan 17, 2023 at 12:46:28PM +0100, Andrea Parri wrote:Isn't it true that the current code will flag srcu-bad-nesting if a
This was reminiscent of old discussions, in fact, we do have:Good point, if we do change the definition, we also need to update
[tools/memory-model/Documentation/litmus-tests.txt]
e. Although sleepable RCU (SRCU) is now modeled, there
are some subtle differences between its semantics and
those in the Linux kernel. For example, the kernel
might interpret the following sequence as two partially
overlapping SRCU read-side critical sections:
1 r1 = srcu_read_lock(&my_srcu);
2 do_something_1();
3 r2 = srcu_read_lock(&my_srcu);
4 do_something_2();
5 srcu_read_unlock(&my_srcu, r1);
6 do_something_3();
7 srcu_read_unlock(&my_srcu, r2);
In contrast, LKMM will interpret this as a nested pair of
SRCU read-side critical sections, with the outer critical
section spanning lines 1-7 and the inner critical section
spanning lines 3-5.
This difference would be more of a concern had anyone
identified a reasonable use case for partially overlapping
SRCU read-side critical sections. For more information
on the trickiness of such overlapping, please see:
https://paulmck.livejournal.com/40593.html
this documentation.
More recently/related,It would not be a bad thing for LKMM to be able to show people the
https://lore.kernel.org/lkml/20220421230848.GA194034@paulmck-ThinkPad-P17-Gen-1/T/#m2a8701c7c377ccb27190a6679e58b0929b0b0ad9
error of their ways when they try non-nested partially overlapping SRCU
read-side critical sections. Or, should they find some valid use case,
to help them prove their point. ;-)
litmus test has non-nested overlapping SRCU read-side critical sections?
Just to see if I understand, different-values yields true if the set
contains multiple elements with the same value mapping to different
values. Or, to put it another way, if the relation does not correspond
to a function.
Or am I still missing something?
And if it is true, is there any need to change the memory model at thisAgreed, changes must wait for SRCU support in herd7.
point?
(And if it's not true, that's most likely due to a bug in herd7.)
At which point something roughly similar to this might work?
let srcu-rscs = return_value(Srcu-lock) ; (dep | rfi)* ;
parameter(Srcu-unlock, 2)