Received: by 2002:a05:6358:f14:b0:e5:3b68:ec04 with SMTP id b20csp3995719rwj; Tue, 20 Dec 2022 04:56:22 -0800 (PST) X-Google-Smtp-Source: AA0mqf5BIHFUw602KGP5no0+YVJBWgVjy56+vtVadGP3Xxnkm7CjpFmOhnk93XG3Mth6cPIbLXk6 X-Received: by 2002:a05:6402:d46:b0:46a:d5ee:7664 with SMTP id ec6-20020a0564020d4600b0046ad5ee7664mr37470526edb.6.1671540981795; Tue, 20 Dec 2022 04:56:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671540981; cv=none; d=google.com; s=arc-20160816; b=zaD5UeIENNbiMFw6SUAno0M6PG5oGFOJtq/kgGaBJFwaj17y4oGlLuruI+H6ssx8vQ MXQyMblJxTZRR6SxesEWhwuqUpbnNWYmLlsO/Rnqhd0lnN0Qjib6oQ1pF1GfclFV5EpN zEnOLkubI6PYttq3dHCA12ysth8vCq1VAurKrJpDvEUH//JtuBDbjbGukO4qBZ71+pUY yOJJ5k/1bPZLQF8XHqYYRioBS7gQmM0EukFl2k4DAb+XBkXWDaE9Wg26Fy+GS7+5ZaR8 m0HYEmbvDuIdMqpJ1Zitdt+loivvF0+Ze0gxkdK74hFQGR1knSKk7wUmjWKB8sw5pxvM PK9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=HQL060GkhASN7dmUVoIwJO795hDfCvWc3QMLZXLlfi8=; b=bnA5ChD2e8YYHN+4EJlTCWDtmS2GXiA6iuSSyWdil/HtisQH01zAkpLrmj1NEccrFq +cYSFuI8G76V4lUIJKoqOpZOJlPDWX7auWFdMMZNUtcTWNkIjONHtaVx7F8/K3C+USpO 7yL5PeabDMwTPCmUxVeEcW/khWqMEwy5jowmrx1kQ0YohIkmnkdF3kGZX+MTTFEOp+Lb XRva9qiMLvO23IjDBeBxP+NmOQsTPpA6jeRBPzsRrphRKNffgiWvB2G4Z3rVD2NRwiVd Myaf15P8GPLFi9QDgc3Rg47DClEnyoj0j4ebShUhKB+WNIs8b/WgnlLdhF/MqXJ2gPYY VHpg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nVm+y8EY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y2-20020a056402440200b00475a6378758si12936703eda.554.2022.12.20.04.56.04; Tue, 20 Dec 2022 04:56:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nVm+y8EY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233423AbiLTMev (ORCPT + 70 others); Tue, 20 Dec 2022 07:34:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229738AbiLTMet (ORCPT ); Tue, 20 Dec 2022 07:34:49 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 716039582; Tue, 20 Dec 2022 04:34:48 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C5D7861361; Tue, 20 Dec 2022 12:34:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A742AC433D2; Tue, 20 Dec 2022 12:34:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1671539687; bh=8eug8XIIHc+WnkDu4WAtT/tZ70RrOELqcMx9toNkkIM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=nVm+y8EYKAVS0OSRdl4ykO0kvWavbrvx3wTzHw8FzJiY8Py8AqxSc4+7YAPEusTCM Czhy/9FeOup13C+L8bH20o2tRuF4MA0CJIPEuGd+E+mjkIoA6/BbM0Cn7wIXb470Sq VNKsXFJOvughbkBLyKcogieeKULD+sxmLrYMB35L99qwAEyJ6V9goWaeTSJUgGdBJU +HBs826mrWw0/vSsVoo/uwjS7JxTJQB+H4mfwCRcE6WWanWpMcA1eFLSFGYzQyhLAh jXYnrTwzl/LvdsGZdO3u7IQ2RJz45RyvoWpIIHR7Foof7wMwZraKDnxn46u9PiFBSU hT7aHPb5g2C4w== Date: Tue, 20 Dec 2022 13:34:43 +0100 From: Frederic Weisbecker To: Joel Fernandes Cc: linux-kernel@vger.kernel.org, Josh Triplett , Lai Jiangshan , Mathieu Desnoyers , "Paul E. McKenney" , rcu@vger.kernel.org, Steven Rostedt Subject: Re: [RFC 0/2] srcu: Remove pre-flip memory barrier Message-ID: <20221220123443.GA21796@lothringen> References: <20221218191310.130904-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Dec 19, 2022 at 11:07:17PM -0500, Joel Fernandes wrote: > On Sun, Dec 18, 2022 at 2:13 PM Joel Fernandes (Google) > wrote: > > > > Hello, I believe the pre-flip memory barrier is not required. The only reason I > > can say to remove it, other than the possibility that it is unnecessary, is to > > not have extra code that does not help. However, since we are issuing a fully > > memory-barrier after the flip, I cannot say that it hurts to do it anyway. > > > > For this reason, please consider these patches as "informational", than a > > "please merge". :-) Though, feel free to consider merging if you agree! > > > > All SRCU scenarios pass with these, with 6 hours of testing. > > > > thanks, > > > > - Joel > > > > Joel Fernandes (Google) (2): > > srcu: Remove comment about prior read lock counts > > srcu: Remove memory barrier "E" as it is not required > > And litmus tests confirm that "E" does not really do what the comments > say, PTAL: > Test 1: > C mbe > (* > * Result: sometimes > * Does previous scan see old reader's lock count, if a new reader saw > the new srcu_idx? > *) > > {} > > P0(int *lockcount, int *srcu_idx) // updater > { > int r0; > r0 = READ_ONCE(*lockcount); > smp_mb(); // E > WRITE_ONCE(*srcu_idx, 1); > } > > P1(int *lockcount, int *srcu_idx) // reader > { > int r0; > WRITE_ONCE(*lockcount, 1); // previous reader > smp_mb(); // B+C > r0 = READ_ONCE(*srcu_idx); // new reader > } > exists (0:r0=0 /\ 1:r0=1) (* Bad outcome. *) > > Test 2: > C mbe2 > > (* > * Result: sometimes > * If updater saw reader's lock count, was that reader using the old idx? > *) > > {} > > P0(int *lockcount, int *srcu_idx) // updater > { > int r0; > r0 = READ_ONCE(*lockcount); > smp_mb(); // E > WRITE_ONCE(*srcu_idx, 1); > } > > P1(int *lockcount, int *srcu_idx) // reader > { > int r0; > int r1; > r1 = READ_ONCE(*srcu_idx); // previous reader > WRITE_ONCE(*lockcount, 1); // previous reader > smp_mb(); // B+C > r0 = READ_ONCE(*srcu_idx); // new reader > } > exists (0:r0=1 /\ 1:r1=1) (* Bad outcome. *) Actually, starring at this some more, there is some form of dependency on the idx in order to build the address where the reader must write the lockcount to. Litmus doesn't support arrays but assuming that &ssp->sda->srcu_lock_count == 0 (note the & in the beginning), it could be modelized that way (I'm eluding the unlock part to simplify): --- C w-depend-r { PLOCK=LOCK0; } // updater P0(int *LOCK0, int *LOCK1, int **PLOCK) { int lock1; lock1 = READ_ONCE(*LOCK1); // READ from inactive idx smp_mb(); WRITE_ONCE(*PLOCK, LOCK1); // Flip idx } // reader P1(int **PLOCK) { int *plock; plock = READ_ONCE(*PLOCK); // Read active idx WRITE_ONCE(*plock, 1); // Write to active idx } exists (0:lock0=1) // never happens --- * Is it an address dependency? But the LKMM refers to that only in terms of LOAD - LOAD ordering. * Is it a control dependency? But the LKMM refers to that only in terms of branch with "if". So I don't know the name of the pattern but it makes litmus happy. Thanks.