Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3521538pxj; Mon, 7 Jun 2021 12:53:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzi/+0UNP2Xj6Qjp6xzqNt97kyyJuQfdSb14xLmryuAz1J5ML60t2wItgFOjr8ylsXks143 X-Received: by 2002:a17:907:abc:: with SMTP id bz28mr4665941ejc.446.1623095592436; Mon, 07 Jun 2021 12:53:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623095592; cv=none; d=google.com; s=arc-20160816; b=u/SUEXbPMsttZ0BuLdK6LArcfkE8g/J/p4za0Qd3d9Te1kaRdQOR7L1LrPMyOghmcy um4qbAfh0w1HxPr9BrPcXpITzmPeIUdYV1VMr/Vx4PsiSQFAAlvGRw51WqfLZkH8aeyt sIwlYik5sajzoyMUrz53X2MPnyNjVKDdFR8vIVp8gWT/Na4PxeAnRFbizmf66tnBoeRN CRxaUnzSOMIVWA57F4yFb06w6DqJybZXdHduou61sBdcPPmuzhqTQPxGw1KCfp7VYaPg zLOs5umoW0UJpyEXC3G9wAsexLHhbpKC6ZR5AXI/NeZNXP9I/cSiyLNth0fVR2nmbK92 gMlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=/cxDD4kXd4zXbJsUGeztJXnw+p2k+acdjRECJg2s50s=; b=XuZpPTqfnCFPsXBCq+QH5xQSl7cvTmst7DjJnC6XVCrC+q5JFmAfBHV5gRSWmVGBU2 cO7wxixDqlabu7TgzbumRbm0GhrJJRSgImpwyNE/AutZsl1HW9SxoDp/km76nOrKmNDk rGc2702SSxRUS2F53etYPJxpmYYWS+tiaRujq+t+2U2E0TrVkmJ+DikdI/f95hgnCc+S Y3z9T/MGX5cBtw/JXkIpuA7qqDbm+d4cbuytYbGYT+ygyVc0RbOuyCLvdu6PdbkuE0fl gKY0OWvrm+vpgyDa2dvJKKeCGZZ6FTCjACTRVe3DjejejNEhoBifPBulQBlzckI5fmSF zsaA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k16si12145584ejd.368.2021.06.07.12.52.47; Mon, 07 Jun 2021 12:53:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231258AbhFGTxh (ORCPT + 99 others); Mon, 7 Jun 2021 15:53:37 -0400 Received: from netrider.rowland.org ([192.131.102.5]:60645 "HELO netrider.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S230425AbhFGTxh (ORCPT ); Mon, 7 Jun 2021 15:53:37 -0400 Received: (qmail 1780760 invoked by uid 1000); 7 Jun 2021 15:51:44 -0400 Date: Mon, 7 Jun 2021 15:51:44 -0400 From: Alan Stern To: Segher Boessenkool Cc: "Paul E. McKenney" , Linus Torvalds , Peter Zijlstra , Will Deacon , Andrea Parri , Boqun Feng , Nick Piggin , David Howells , Jade Alglave , Luc Maranget , Akira Yokosawa , Linux Kernel Mailing List , linux-toolchains@vger.kernel.org, linux-arch Subject: Re: [RFC] LKMM: Add volatile_if() Message-ID: <20210607195144.GC1779688@rowland.harvard.edu> References: <20210606184021.GY18427@gate.crashing.org> <20210606195242.GA18427@gate.crashing.org> <20210606202616.GC18427@gate.crashing.org> <20210606233729.GN4397@paulmck-ThinkPad-P17-Gen-1> <20210607141242.GD18427@gate.crashing.org> <20210607152712.GR4397@paulmck-ThinkPad-P17-Gen-1> <20210607182335.GI18427@gate.crashing.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210607182335.GI18427@gate.crashing.org> User-Agent: Mutt/1.10.1 (2018-07-13) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 07, 2021 at 01:23:35PM -0500, Segher Boessenkool wrote: > On Mon, Jun 07, 2021 at 08:27:12AM -0700, Paul E. McKenney wrote: > > > > > > The barrier() thing can work - all we need to do is to simply make it > > > > > > impossible for gcc to validly create anything but a conditional > > > > > > branch. > > > > > What would you suggest as a way of instructing the compiler to emit the > > > > conditional branch that we are looking for? > > > > > > You write it in the assembler code. > > > > > > Yes, it sucks. But it is the only way to get a branch if you really > > > want one. Now, you do not really need one here anyway, so there may be > > > some other way to satisfy the actual requirements. > > > > Hmmm... What do you see Peter asking for that is different than what > > I am asking for? ;-) > > I don't know what you are referring to, sorry? > > I know what you asked for: literally some way to tell the compiler to > emit a conditional branch. If that is what you want, the only way to > make sure that is what you get is by writing exactly that in assembler. That's not necessarily it. People would be happy to have an easy way of telling the compiler that all writes in the "if" branch of an if statement must be ordered after any reads that the condition depends on. Or maybe all writes in either the "if" branch or the "else" branch. And maybe not all reads that the condition depends on, but just the reads appearing syntactically in the condition. Or maybe even just the volatile reads appearing in the condition. Nobody has said exactly. The exact method used for doing this doesn't matter. It could be accomplished by treating those reads as load-acquires. Or it could be done by ensuring that the object code contains a dependency (control or data) from the reads to the writes. Or it could be done by treating the writes as store-releases. But we do want the execution-time penalty to be small. In short, we want to guarantee somehow that the conditional writes are not re-ordered before the reads in the condition. (But note that "conditional writes" includes identical writes occurring in both branches.) Alan