Messages in this thread | | | Date | Mon, 16 Jan 2023 13:11:41 -0500 | From | Alan Stern <> | Subject | Re: Internal vs. external barriers (was: Re: Interesting LKMM litmus test) |
| |
On Sun, Jan 15, 2023 at 08:23:29PM -0800, Paul E. McKenney wrote: > On Sun, Jan 15, 2023 at 03:46:10PM -0500, Alan Stern wrote: > > On Sun, Jan 15, 2023 at 10:10:52AM -0800, Paul E. McKenney wrote: > > > On Sun, Jan 15, 2023 at 11:23:31AM -0500, Alan Stern wrote: > > > > On Sat, Jan 14, 2023 at 09:15:10PM -0800, Paul E. McKenney wrote: > > > > > What am I missing here? > > > > > > > > I don't think you're missing anything. This is a matter for Boqun or > > > > Luc; it must have something to do with the way herd treats the > > > > srcu_read_lock() and srcu_read_unlock() primitives. > > > > > > It looks like we need something that tracks (data | rf)* between > > > the return value of srcu_read_lock() and the second parameter of > > > srcu_read_unlock(). The reason for rf rather than rfi is the upcoming > > > srcu_down_read() and srcu_up_read(). > > > > Or just make herd treat srcu_read_lock(s) as an annotated equivalent of > > READ_ONCE(&s) and srcu_read_unlock(s, v) as an annotated equivalent of > > WRITE_ONCE(s, v). But with some special accomodation to avoid > > interaction with the new carry-dep relation. > > This is a modification to herd7 you are suggesting? Otherwise, I am > suffering a failure of imagination on how to properly sort it from the > other READ_ONCE() and WRITE_ONCE() instances.
srcu_read_lock and srcu_read_unlock events would be distinguished from other marked loads and stores by belonging to the Srcu-lock and Srcu-unlock sets. But I don't know whether this result can be accomplished just by modifying the .def file -- it might require changes to herd7. (In fact, as far as I know there is no documentation at all for the double-underscore operations used in linux-kernel.def. Hint hint!)
As mentioned earlier, we should ask Luc or Boqun.
> > > Or is there some better intermediate position that could be taken? > > > > Do you mean go back to the current linux-kernel.bell? The code you > > wrote above is different, since it prohibits nesting. > > Not to the current linux-kernel.bell, but, as you say, making the change > to obtain a better approximation by prohibiting nesting.
Why do you want to prohibit nesting? Why would that be a better approximation?
Alan
| |