linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonas Oberhauser <jonas.oberhauser@huaweicloud.com>
To: paulmck@kernel.org, Alan Stern <stern@rowland.harvard.edu>
Cc: Andrea Parri <parri.andrea@gmail.com>,
	Jonas Oberhauser <jonas.oberhauser@huawei.com>,
	Peter Zijlstra <peterz@infradead.org>, will <will@kernel.org>,
	"boqun.feng" <boqun.feng@gmail.com>, npiggin <npiggin@gmail.com>,
	dhowells <dhowells@redhat.com>, "j.alglave" <j.alglave@ucl.ac.uk>,
	"luc.maranget" <luc.maranget@inria.fr>, akiyks <akiyks@gmail.com>,
	dlustig <dlustig@nvidia.com>, joel <joel@joelfernandes.org>,
	urezki <urezki@gmail.com>,
	quic_neeraju <quic_neeraju@quicinc.com>,
	frederic <frederic@kernel.org>,
	Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: Internal vs. external barriers (was: Re: Interesting LKMM litmus test)
Date: Fri, 20 Jan 2023 10:20:11 +0100	[thread overview]
Message-ID: <acbbd099-07de-fba9-3d44-874bdfc47365@huaweicloud.com> (raw)
In-Reply-To: <20230120035521.GA319650@paulmck-ThinkPad-P17-Gen-1>



On 1/20/2023 4:55 AM, Paul E. McKenney wrote:
> On Thu, Jan 19, 2023 at 02:51:53PM -0500, Alan Stern wrote:
>> On Thu, Jan 19, 2023 at 10:41:07AM -0800, Paul E. McKenney wrote:
>>> In contrast, this actually needs srcu_down_read() and srcu_up_read():
>>>
>>> ------------------------------------------------------------------------
>>>
>>> C C-srcu-nest-6
>>>
>>> (*
>>>   * Result: Never
>>>   *
>>>   * Flag unbalanced-srcu-locking
>>>   * This would be valid for srcu_down_read() and srcu_up_read().
>>>   *)
>>>
>>> {}
>>>
>>> P0(int *x, int *y, struct srcu_struct *s1, int *idx)
>>> {
>>> 	int r2;
>>> 	int r3;
>>>
>>> 	r3 = srcu_down_read(s1);
>>> 	WRITE_ONCE(*idx, r3);
>>> 	r2 = READ_ONCE(*y);
>>> }
>>>
>>> P1(int *x, int *y, struct srcu_struct *s1, int *idx)
>>> {
>>> 	int r1;
>>> 	int r3;
>>>
>>> 	r1 = READ_ONCE(*x);
>>> 	r3 = READ_ONCE(*idx);
>>> 	srcu_up_read(s1, r3);
>>> }
>>>
>>> P2(int *x, int *y, struct srcu_struct *s1)
>>> {
>>> 	WRITE_ONCE(*y, 1);
>>> 	synchronize_srcu(s1);
>>> 	WRITE_ONCE(*x, 1);
>>> }
>>>
>>> locations [0:r1]
>>> exists (1:r1=1 /\ 0:r2=0)
>> I modified this litmus test by adding a flag variable with an
>> smp_store_release in P0, an smp_load_acquire in P1, and a filter clause
>> to ensure that P1 reads the flag and idx from P1.
>>
>> With the patch below, the results were as expected:
>>
>> Test C-srcu-nest-6 Allowed
>> States 3
>> 0:r1=0; 0:r2=0; 1:r1=0;
>> 0:r1=0; 0:r2=1; 1:r1=0;
>> 0:r1=0; 0:r2=1; 1:r1=1;
>> No
>> Witnesses
>> Positive: 0 Negative: 3
>> Condition exists (1:r1=1 /\ 0:r2=0)
>> Observation C-srcu-nest-6 Never 0 3
>> Time C-srcu-nest-6 0.04
>> Hash=2b010cf3446879fb84752a6016ff88c5
>>
>> It turns out that the idea of removing rf edges from Srcu-unlock events
>> doesn't work well.  The missing edges mess up herd's calculation of the
>> fr relation and the coherence axiom.  So I've gone back to filtering
>> those edges out of carry-dep.
>>
>> Also, Boqun's suggestion for flagging ordinary accesses to SRCU
>> structures no longer works, because the lock and unlock operations now
>> _are_ normal accesses.  I removed that check too, but it shouldn't hurt
>> much because I don't expect to encounter litmus tests that try to read
>> or write srcu_structs directly.
>>
>> Alan
>>
>>
>>
>> Index: usb-devel/tools/memory-model/linux-kernel.bell
>> ===================================================================
>> --- usb-devel.orig/tools/memory-model/linux-kernel.bell
>> +++ usb-devel/tools/memory-model/linux-kernel.bell
>> @@ -53,38 +53,30 @@ let rcu-rscs = let rec
>>   	in matched
>>   
>>   (* Validate nesting *)
>> -flag ~empty Rcu-lock \ domain(rcu-rscs) as unbalanced-rcu-locking
>> -flag ~empty Rcu-unlock \ range(rcu-rscs) as unbalanced-rcu-locking
>> +flag ~empty Rcu-lock \ domain(rcu-rscs) as unbalanced-rcu-lock
>> +flag ~empty Rcu-unlock \ range(rcu-rscs) as unbalanced-rcu-unlock
>>   
>>   (* Compute matching pairs of nested Srcu-lock and Srcu-unlock *)
>> -let srcu-rscs = let rec
>> -	    unmatched-locks = Srcu-lock \ domain(matched)
>> -	and unmatched-unlocks = Srcu-unlock \ range(matched)
>> -	and unmatched = unmatched-locks | unmatched-unlocks
>> -	and unmatched-po = ([unmatched] ; po ; [unmatched]) & loc
>> -	and unmatched-locks-to-unlocks =
>> -		([unmatched-locks] ; po ; [unmatched-unlocks]) & loc
>> -	and matched = matched | (unmatched-locks-to-unlocks \
>> -		(unmatched-po ; unmatched-po))
>> -	in matched
>> +let srcu-rscs = ([Srcu-lock] ; (data | rf)+ ; [Srcu-unlock]) & loc
>>   
>>   (* Validate nesting *)
>> -flag ~empty Srcu-lock \ domain(srcu-rscs) as unbalanced-srcu-locking
>> -flag ~empty Srcu-unlock \ range(srcu-rscs) as unbalanced-srcu-locking
>> +flag ~empty Srcu-lock \ domain(srcu-rscs) as unbalanced-srcu-lock
>> +flag ~empty Srcu-unlock \ range(srcu-rscs) as unbalanced-srcu-unlock
>> +flag ~empty (srcu-rscs^-1 ; srcu-rscs) \ id as multiple-srcu-matches
>>   
>>   (* Check for use of synchronize_srcu() inside an RCU critical section *)
>>   flag ~empty rcu-rscs & (po ; [Sync-srcu] ; po) as invalid-sleep
>>   
>>   (* Validate SRCU dynamic match *)
>> -flag ~empty different-values(srcu-rscs) as srcu-bad-nesting
>> +flag ~empty different-values(srcu-rscs) as bad-srcu-value-match
>>   
>>   (* Compute marked and plain memory accesses *)
>>   let Marked = (~M) | IW | Once | Release | Acquire | domain(rmw) | range(rmw) |
>> -		LKR | LKW | UL | LF | RL | RU
>> + 		LKR | LKW | UL | LF | RL | RU | Srcu-lock | Srcu-unlock
>>   let Plain = M \ Marked
>>   
>>   (* Redefine dependencies to include those carried through plain accesses *)
>> -let carry-dep = (data ; rfi)*
>> +let carry-dep = (data ; [~ Srcu-unlock] ; rfi)*
>>   let addr = carry-dep ; addr
>>   let ctrl = carry-dep ; ctrl
>>   let data = carry-dep ; data
>> Index: usb-devel/tools/memory-model/linux-kernel.def
>> ===================================================================
>> --- usb-devel.orig/tools/memory-model/linux-kernel.def
>> +++ usb-devel/tools/memory-model/linux-kernel.def
>> @@ -49,8 +49,10 @@ synchronize_rcu() { __fence{sync-rcu}; }
>>   synchronize_rcu_expedited() { __fence{sync-rcu}; }
>>   
>>   // SRCU
>> -srcu_read_lock(X)  __srcu{srcu-lock}(X)
>> -srcu_read_unlock(X,Y) { __srcu{srcu-unlock}(X,Y); }
>> +srcu_read_lock(X) __load{srcu-lock}(*X)
>> +srcu_read_unlock(X,Y) { __store{srcu-unlock}(*X,Y); }
>> +srcu_down_read(X) __load{srcu-lock}(*X)
>> +srcu_up_read(X,Y) { __store{srcu-unlock}(*X,Y); }
>>   synchronize_srcu(X)  { __srcu{sync-srcu}(X); }
>>   synchronize_srcu_expedited(X)  { __srcu{sync-srcu}(X); }
> And for some initial tests:
>
> https://github.com/paulmckrcu/litmus/blob/master/manual/kernel/C-srcu-nest-1.litmus
>
> 	"Flag multiple-srcu-matches" but otherwise OK.
> 	As a "hail Mary" exercise, I used r4 for the second SRCU
> 	read-side critical section, but this had no effect.
> 	(This flag is expected and seen for #4 below.)

This is because srcu_lock/srcu_unlock are reads and writes, and so you 
get the accidental rf relation here I was talking about earlier.
In particular your first lock() is linked by  data ; rf ; data to the 
second unlock(), which therefore seems to have data coming in from two 
sources.

You would be better off moving the carry-dep/data definitions higher in 
the file,

-let carry-dep = (data ; rfi)*
+let carry-dep = (data ; [~ Srcu-unlock] ; rfi)*
  let addr = carry-dep ; addr
  let ctrl = carry-dep ; ctrl
  let data = carry-dep ; data

and then defining

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

Note here I'm just using the freshly redefined data, instead of the (data;rf)+


best wishes, jonas


  reply	other threads:[~2023-01-20  9:20 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20220921173109.GA1214281@paulmck-ThinkPad-P17-Gen-1>
     [not found] ` <YytfFiMT2Xsdwowf@rowland.harvard.edu>
     [not found]   ` <YywXuzZ/922LHfjI@hirez.programming.kicks-ass.net>
     [not found]     ` <114ECED5-FED1-4361-94F7-8D9BC02449B7>
     [not found]       ` <YzSAnclenTz7KQyt@rowland.harvard.edu>
     [not found]         ` <f763bd5ff835458d8750b61da47fe316@huawei.com>
2023-01-03 18:56           ` Internal vs. external barriers (was: Re: Interesting LKMM litmus test) Alan Stern
2023-01-04 15:37             ` Andrea Parri
2023-01-04 20:58               ` Alan Stern
     [not found]             ` <ee186bc17a5e48298a5373f688496dce@huawei.com>
2023-01-05 17:32               ` Paul E. McKenney
     [not found]                 ` <bea712c82e6346f8973399a5711ff78a@huawei.com>
2023-01-11 15:06                   ` Alan Stern
     [not found]                     ` <768ffe7edc7f4ddfacd5b0a8e844ed84@huawei.com>
2023-01-11 17:01                       ` Alan Stern
     [not found]                         ` <07579baee4b84532a76ea8b0b33052bb@huawei.com>
2023-01-12 21:57                           ` Paul E. McKenney
2023-01-13 16:38                             ` Alan Stern
2023-01-13 19:54                               ` Paul E. McKenney
     [not found]                               ` <06a8aef7eb8d46bca34521a80880dae3@huawei.com>
2023-01-14 17:42                                 ` Paul E. McKenney
     [not found]                             ` <e51c82a113484b6bb62354a49376f248@huawei.com>
2023-01-14 16:42                               ` Alan Stern
2023-01-17 17:48                                 ` Jonas Oberhauser
2023-01-17 21:19                                   ` Alan Stern
2023-01-18 11:25                                     ` Jonas Oberhauser
2023-01-19  2:28                                       ` Alan Stern
2023-01-19 11:22                                         ` Jonas Oberhauser
2023-01-19 16:41                                           ` Alan Stern
2023-01-19 18:43                                             ` Paul E. McKenney
2023-01-23 16:16                                             ` Jonas Oberhauser
2023-01-23 19:58                                               ` Alan Stern
2023-01-23 20:06                                                 ` Jonas Oberhauser
2023-01-23 20:41                                                   ` Alan Stern
2023-01-24 13:21                                                     ` Jonas Oberhauser
2023-01-24 15:54                                             ` Jonas Oberhauser
2023-01-24 17:22                                               ` Alan Stern
     [not found]                     ` <4c1abc7733794519ad7c5153ae8b58f9@huawei.com>
2023-01-13 16:28                       ` Alan Stern
2023-01-13 20:07                         ` Paul E. McKenney
2023-01-13 20:32                           ` Paul E. McKenney
2023-01-14 17:40                             ` Alan Stern
2023-01-14 17:48                               ` Paul E. McKenney
     [not found]                             ` <136d019d8c8049f6b737627df830e66f@huawei.com>
2023-01-14 17:53                               ` Paul E. McKenney
2023-01-14 18:15                                 ` Paul E. McKenney
2023-01-14 19:58                                   ` Alan Stern
2023-01-15  5:19                                     ` Paul E. McKenney
2023-01-14 20:19                                   ` Alan Stern
2023-01-15  5:15                                     ` Paul E. McKenney
2023-01-15 16:23                                       ` Alan Stern
2023-01-15 18:10                                         ` Paul E. McKenney
2023-01-15 20:46                                           ` Alan Stern
2023-01-16  4:23                                             ` Paul E. McKenney
2023-01-16 18:11                                               ` Alan Stern
2023-01-16 19:06                                                 ` Paul E. McKenney
2023-01-16 19:20                                                   ` Alan Stern
2023-01-16 22:13                                                     ` Paul E. McKenney
2023-01-17 11:46                                                       ` Andrea Parri
2023-01-17 15:14                                                         ` Paul E. McKenney
2023-01-17 15:56                                                           ` Alan Stern
2023-01-17 17:43                                                             ` Paul E. McKenney
2023-01-17 18:27                                                               ` Jonas Oberhauser
2023-01-17 18:55                                                                 ` Paul E. McKenney
2023-01-17 20:20                                                                   ` Jonas Oberhauser
2023-01-17 20:15                                                               ` Alan Stern
2023-01-18  3:50                                                                 ` Paul E. McKenney
2023-01-18 16:50                                                                   ` Alan Stern
2023-01-18 19:42                                                                     ` Jonas Oberhauser
2023-01-18 20:19                                                                       ` Paul E. McKenney
2023-01-18 20:30                                                                         ` Jonas Oberhauser
2023-01-18 21:12                                                                           ` Paul E. McKenney
2023-01-18 21:24                                                                             ` Jonas Oberhauser
2023-01-19  0:11                                                                               ` Paul E. McKenney
2023-01-19 13:39                                                                                 ` Jonas Oberhauser
2023-01-19 18:41                                                                                   ` Paul E. McKenney
2023-01-19 19:51                                                                                     ` Alan Stern
2023-01-19 21:53                                                                                       ` Paul E. McKenney
2023-01-19 22:04                                                                                         ` Alan Stern
2023-01-19 23:03                                                                                           ` Paul E. McKenney
2023-01-20  9:43                                                                                         ` Jonas Oberhauser
2023-01-20 15:39                                                                                           ` Paul E. McKenney
2023-01-20 20:46                                                                                             ` Jonas Oberhauser
2023-01-20 21:37                                                                                               ` Paul E. McKenney
2023-01-20 22:36                                                                                                 ` Jonas Oberhauser
2023-01-20 23:19                                                                                                   ` Paul E. McKenney
2023-01-21  0:03                                                                                                     ` Jonas Oberhauser
2023-01-21  0:34                                                                                                       ` Paul E. McKenney
2023-01-20  3:55                                                                                       ` Paul E. McKenney
2023-01-20  9:20                                                                                         ` Jonas Oberhauser [this message]
2023-01-20 12:34                                                                                         ` Jonas Oberhauser
2023-01-20 12:51                                                                                           ` Jonas Oberhauser
2023-01-20 15:32                                                                                             ` Paul E. McKenney
2023-01-20 20:56                                                                                               ` Jonas Oberhauser
2023-01-20 21:40                                                                                                 ` Paul E. McKenney
2023-01-20 16:14                                                                                         ` Alan Stern
2023-01-20 17:30                                                                                           ` Paul E. McKenney
2023-01-20 18:15                                                                                             ` Alan Stern
2023-01-20 18:59                                                                                               ` Paul E. McKenney
2023-01-20 10:13                                                                                     ` Jonas Oberhauser
2023-01-20 15:47                                                                                       ` Paul E. McKenney
2023-01-20 22:21                                                                                         ` Jonas Oberhauser
2023-01-20 16:18                                                                                       ` Alan Stern
2023-01-20 21:41                                                                                         ` Jonas Oberhauser
2023-01-21  4:38                                                                                           ` Paul E. McKenney
2023-01-21 17:36                                                                                           ` Alan Stern
2023-01-21 18:40                                                                                             ` Paul E. McKenney
2023-01-21 19:56                                                                                               ` Alan Stern
2023-01-21 20:10                                                                                                 ` Paul E. McKenney
2023-01-21 21:03                                                                                                   ` Alan Stern
2023-01-21 23:49                                                                                                     ` Paul E. McKenney
2023-01-23 11:48                                                                                             ` Jonas Oberhauser
2023-01-23 15:55                                                                                               ` Alan Stern
2023-01-23 19:40                                                                                                 ` Jonas Oberhauser
2023-01-23 20:34                                                                                                   ` Alan Stern
2023-01-18 20:06                                                                     ` Paul E. McKenney
2023-01-18 20:54                                                                       ` Alan Stern
2023-01-18 21:05                                                                         ` Jonas Oberhauser
2023-01-19  0:02                                                                         ` Paul E. McKenney
2023-01-19  2:19                                                                           ` Alan Stern
2023-01-19 11:23                                                                             ` Paul E. McKenney
2023-01-20 16:01                                                                           ` Alan Stern
2023-01-20 17:58                                                                             ` Paul E. McKenney
2023-01-20 18:37                                                                               ` Alan Stern
2023-01-20 19:20                                                                                 ` Paul E. McKenney
2023-01-20 20:36                                                                                   ` Alan Stern
2023-01-20 21:20                                                                                     ` Paul E. McKenney
2023-01-22 20:32                                                                                       ` Alan Stern
2023-01-23 20:16                                                                                         ` Paul E. McKenney
2023-01-24  2:18                                                                                           ` Alan Stern
2023-01-24  4:06                                                                                             ` Paul E. McKenney
2023-01-24 11:09                                                                                               ` Andrea Parri
2023-01-24 14:54                                                                                                 ` Paul E. McKenney
2023-01-24 15:11                                                                                                   ` Jonas Oberhauser
2023-01-24 16:22                                                                                                     ` Paul E. McKenney
2023-01-24 16:39                                                                                                       ` Jonas Oberhauser
2023-01-24 17:26                                                                                                         ` Paul E. McKenney
2023-01-24 19:30                                                                                                           ` Jonas Oberhauser
2023-01-24 22:15                                                                                                             ` Paul E. McKenney
2023-01-24 22:35                                                                                                               ` Alan Stern
2023-01-24 22:54                                                                                                                 ` Paul E. McKenney
2023-01-25  1:54                                                                                                                   ` Alan Stern
2023-01-25  2:20                                                                                                                     ` Paul E. McKenney
2023-01-25 13:10                                                                                                                       ` Jonas Oberhauser
2023-01-25 15:05                                                                                                                         ` Paul E. McKenney
2023-01-25 15:34                                                                                                                           ` Alan Stern
2023-01-25 17:18                                                                                                                             ` Paul E. McKenney
2023-01-25 17:42                                                                                                                               ` Jonas Oberhauser
2023-01-25 19:08                                                                                                                               ` Alan Stern
2023-01-25 19:46                                                                                                                                 ` Paul E. McKenney
2023-01-25 20:36                                                                                                                                   ` Andrea Parri
2023-01-25 21:10                                                                                                                                     ` Jonas Oberhauser
2023-01-25 21:23                                                                                                                                       ` Paul E. McKenney
2023-01-25 20:46                                                                                                                                   ` Alan Stern
2023-01-25 21:38                                                                                                                                     ` Paul E. McKenney
2023-01-25 23:33                                                                                                                                       ` Paul E. McKenney
2023-01-26  1:45                                                                                                                                         ` Alan Stern
2023-01-26  1:53                                                                                                                                           ` Paul E. McKenney
2023-01-26 12:17                                                                                                                                             ` Jonas Oberhauser
2023-01-26 18:48                                                                                                                                               ` Paul E. McKenney
2023-01-27 15:03                                                                                                                                                 ` Jonas Oberhauser
2023-01-27 16:50                                                                                                                                                   ` Paul E. McKenney
2023-01-27 16:54                                                                                                                                                     ` Paul E. McKenney
2023-01-18 19:57                                                                   ` Jonas Oberhauser
2023-01-18 21:06                                                                     ` Paul E. McKenney
2023-01-18  2:15                                                               ` Alan Stern
2023-01-18  5:17                                                                 ` Paul E. McKenney
2023-01-18 16:03                                                                   ` Alan Stern
2023-01-18 16:59                                                                     ` Boqun Feng
2023-01-18 17:08                                                                       ` Alan Stern
2023-01-18 17:41                                                                     ` Paul E. McKenney
2023-01-19 19:07                                                                       ` Paul E. McKenney
2023-01-14 16:55                           ` Alan Stern
2023-01-14 17:35                             ` Paul E. McKenney
     [not found]                         ` <17078dd97cb6480f9c51e27058af3197@huawei.com>
2023-01-14 17:27                           ` Alan Stern

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=acbbd099-07de-fba9-3d44-874bdfc47365@huaweicloud.com \
    --to=jonas.oberhauser@huaweicloud.com \
    --cc=akiyks@gmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=dlustig@nvidia.com \
    --cc=frederic@kernel.org \
    --cc=j.alglave@ucl.ac.uk \
    --cc=joel@joelfernandes.org \
    --cc=jonas.oberhauser@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luc.maranget@inria.fr \
    --cc=npiggin@gmail.com \
    --cc=parri.andrea@gmail.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=quic_neeraju@quicinc.com \
    --cc=stern@rowland.harvard.edu \
    --cc=urezki@gmail.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).