Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3447273pxj; Mon, 7 Jun 2021 10:48:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzCGpZifdmGoKhsvXd3kwB7pX7G6lJpr9edr17bng06vhHgbLjiN9xM+wKwf55qpu8Kxw4b X-Received: by 2002:a17:907:9721:: with SMTP id jg33mr9336780ejc.64.1623088120575; Mon, 07 Jun 2021 10:48:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623088120; cv=none; d=google.com; s=arc-20160816; b=UOF+CAcLZO+i5Aw7P96q3LkJQaiQoZ7iqYcscezW172oNgViYoZFec/mMpdmIjArMe ewydZ5eWS1ABisipbcV9rcPPMwf92vp72uyu6Lu/awRcsLxf1MrZ74TQEYYwMfzQJClZ QdmzJwKnyE27smqPA9OQQ24R4YjKcGar6RZ+umc06uA5upXqaXjL34t2MornRmnVEP9M 04EcG2irkWZeb/SvPUKHUiSC3/QMyoqdPjb/9D1twdav6KEBYDSnxNOHpTiVsdjAdTYJ MbQ8CFawecc8RPlAydeN05MkN3mnefKbCkBtaE9TWRK4WjnZem+c+l6GJo0hAAoJn93M 4nTQ== 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=EXzFalcHnWZUd2Vpra18OsJJf7pAgqiLyVQexPRb8Sk=; b=lEwWSlXaPWSTFawsojSJhPHP8eC+x3nvWPZ6n3cSHtOs8B9icN3sPkgvQbUwkVSg7H WI712BqCfFNxLtCfatz+wLOtPPCGl/+yf6eq1FH/x0Dd3c8zM3ZBSOm2sYKYQf/MH4M5 xgcyV4cwVgoqN4/gs9ij91ZGPlBysJ1ol7IE61+D1GAKsk5UpgYKC/XIFHALqfukVM8q awKredQCjT0qnkxPyqIGPNrmT2bbbORM/2NySnpFG23Ad6wQKV+HS9bYMTyKIi36alOI mstduTvsR/forVMD15fHh2wALLYAJAKHqMEFi95MUFRlWELtWBg0THbq0/DghFfUe1qJ g/pw== 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 x17si11368156ejd.416.2021.06.07.10.48.16; Mon, 07 Jun 2021 10:48:40 -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 S230331AbhFGRsY (ORCPT + 99 others); Mon, 7 Jun 2021 13:48:24 -0400 Received: from gate.crashing.org ([63.228.1.57]:58774 "EHLO gate.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230197AbhFGRsX (ORCPT ); Mon, 7 Jun 2021 13:48:23 -0400 Received: from gate.crashing.org (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id 157Hg905015041; Mon, 7 Jun 2021 12:42:09 -0500 Received: (from segher@localhost) by gate.crashing.org (8.14.1/8.14.1/Submit) id 157Hg6Fm015039; Mon, 7 Jun 2021 12:42:06 -0500 X-Authentication-Warning: gate.crashing.org: segher set sender to segher@kernel.crashing.org using -f Date: Mon, 7 Jun 2021 12:42:06 -0500 From: Segher Boessenkool To: Linus Torvalds Cc: Alexander Monakov , Jakub Jelinek , Alan Stern , "Paul E. McKenney" , 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: <20210607174206.GF18427@gate.crashing.org> References: <20210604214010.GD4397@paulmck-ThinkPad-P17-Gen-1> <20210605145739.GB1712909@rowland.harvard.edu> <20210606001418.GH4397@paulmck-ThinkPad-P17-Gen-1> <20210606012903.GA1723421@rowland.harvard.edu> <20210606185922.GF7746@tucnak> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.3i Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Jun 06, 2021 at 03:38:06PM -0700, Linus Torvalds wrote: > In the case of "volatile_if()", we actually would like to have not a > memory clobber, but a "memory read". IOW, it would be a barrier for > any writes taking place, but reads can move around it. > > I don't know of any way to express that to the compiler. We've used > hacks for it before (in gcc, BLKmode reads turn into that kind of > barrier in practice, so you can do something like make the memory > input to the asm be a big array). But that turned out to be fairly > unreliable, so now we use memory clobbers even if we just mean "reads > random memory". > > Example: variable_test_bit(), which generates a "bt" instruction, does > > : "m" (*(unsigned long *)addr), "Ir" (nr) : "memory"); > > and the memory clobber is obviously wrong: 'bt' only *reads* memory, > but since the whole reason we use it is that it's not just that word > at address 'addr', in order to make sure that any previous writes are > actually stable in memory, we use that "memory" clobber. You can split the "I" version from the "r" version, it does not need the memory clobber. If you know the actual maximum bit offset used you don't need the clobber for "r" either. Or you could even write "m"(((unsigned long *)addr)[nr/32]) That should work for all cases. > Anybody have ideas or suggestions for something like that? Is it useful in general for the kernel to have separate "read" and "write" clobbers in asm expressions? And for other applications? Segher