Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2BA85C64EC7 for ; Sun, 26 Feb 2023 02:29:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229641AbjBZC3z (ORCPT ); Sat, 25 Feb 2023 21:29:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229627AbjBZC3y (ORCPT ); Sat, 25 Feb 2023 21:29:54 -0500 Received: from netrider.rowland.org (netrider.rowland.org [192.131.102.5]) by lindbergh.monkeyblade.net (Postfix) with SMTP id C50EBE3A5 for ; Sat, 25 Feb 2023 18:29:52 -0800 (PST) Received: (qmail 82207 invoked by uid 1000); 25 Feb 2023 21:29:51 -0500 Date: Sat, 25 Feb 2023 21:29:51 -0500 From: Alan Stern To: "Paul E. McKenney" Cc: Jonas Oberhauser , parri.andrea@gmail.com, will@kernel.org, peterz@infradead.org, boqun.feng@gmail.com, npiggin@gmail.com, dhowells@redhat.com, j.alglave@ucl.ac.uk, luc.maranget@inria.fr, akiyks@gmail.com, dlustig@nvidia.com, joel@joelfernandes.org, urezki@gmail.com, quic_neeraju@quicinc.com, frederic@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] tools/memory-model: Make ppo a subrelation of po Message-ID: References: <20230224135251.24989-1-jonas.oberhauser@huaweicloud.com> <20230224183758.GQ2948950@paulmck-ThinkPad-P17-Gen-1> <20230226010110.GA1576556@paulmck-ThinkPad-P17-Gen-1> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230226010110.GA1576556@paulmck-ThinkPad-P17-Gen-1> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Feb 25, 2023 at 05:01:10PM -0800, Paul E. McKenney wrote: > A few other oddities: > > litmus/auto/C-LB-Lww+R-OC.litmus > > Both versions flag a data race, which I am not seeing. It appears > to me that P1's store to u0 cannot happen unless P0's store > has completed. So what am I missing here? The LKMM doesn't believe that a control or data dependency orders a plain write after a marked read. Hence in this test it thinks that P1's store to u0 can happen before the load of x1. I don't remember why we did it this way -- probably we just wanted to minimize the restrictions on when plain accesses can execute. (I do remember the reason for making address dependencies induce order; it was so RCU would work.) The patch below will change what the LKMM believes. It eliminates the positive outcome of the litmus test and the data race. Should it be adopted into the memory model? > litmus/auto/C-LB-Lrw+R-OC.litmus > litmus/auto/C-LB-Lww+R-Oc.litmus > litmus/auto/C-LB-Lrw+R-Oc.litmus > litmus/auto/C-LB-Lrw+R-A+R-Oc.litmus > litmus/auto/C-LB-Lww+R-A+R-OC.litmus > > Ditto. (There are likely more.) I haven't looked at these but they're probably similar. Alan --- usb-devel.orig/tools/memory-model/linux-kernel.cat +++ usb-devel/tools/memory-model/linux-kernel.cat @@ -172,7 +172,7 @@ let vis = cumul-fence* ; rfe? ; [Marked] ((strong-fence ; [Marked] ; xbstar) | (xbstar & int)) (* Boundaries for lifetimes of plain accesses *) -let w-pre-bounded = [Marked] ; (addr | fence)? +let w-pre-bounded = [Marked] ; (rwdep | fence)? let r-pre-bounded = [Marked] ; (addr | nonrw-fence | ([R4rmb] ; fencerel(Rmb) ; [~Noreturn]))? let w-post-bounded = fence? ; [Marked] ; rmw-sequence