From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.codeaurora.org ([198.145.29.96]:38854 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726581AbeHVXcd (ORCPT ); Wed, 22 Aug 2018 19:32:33 -0400 Subject: Re: Alpha Avanti broken by 9ce8654323d69273b4977f76f11c9e2d345ab130 References: <21c0bd37-0ae7-db8f-76b8-6552c30faa4f@codeaurora.org> <09c561cf-541c-219a-f19b-4ecfaf9a0f02@codeaurora.org> From: Sinan Kaya Message-ID: <89256c73-d8e5-3e8f-e796-9b2f1d2f9522@codeaurora.org> Date: Wed, 22 Aug 2018 16:06:09 -0400 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-arch-owner@vger.kernel.org List-ID: To: Mikulas Patocka Cc: Arnd Bergmann , "Maciej W. Rozycki" , Matt Turner , linux-alpha@vger.kernel.org, okaya@kernel.org, Will Deacon , linux-arch , Peter Zijlstra , Thomas Gleixner On 8/22/2018 3:56 PM, Mikulas Patocka wrote: > > > On Wed, 22 Aug 2018, Sinan Kaya wrote: > >> On 8/22/2018 1:47 PM, Mikulas Patocka wrote: >>> If ARM guarantees that the accesses to a given device are not reordered - >>> then the barriers in readl and writel are superfluous. >> >> It is not. ARM only guarantees ordering of read/write transactions targeting >> a device not memory. >> >> example: >> >> write memory >> raw write to device >> >> or >> >> raw read from device >> read memory >> >> these can bypass each other on ARM unless a barrier is placed in the right >> place either via readl()/writel() or explicitly. > > Yes - but - why does Linux insert the barriers into readl() and writel() > instead of inserting them between accesses to registers and memory? > > A lot of drivers have long sequences of accesses to memory-mapped > registers with no interleaving accesses to coherent memory and these > implicit barriers slow them down with no gain at all. It is an abstraction issue. Majority of drivers are developed against x86 and the developers have no idea about the weakly ordered architecture implications. Now, Will Deacon added new primitives to address your concern. There are new APIs as readl_relaxed() and writel_relaxed() as opposed to readl() and writel(). Relaxed version still guarantee of register accesses with respect to each other but no guaranteed with respect to memory. Relaxed versions could be used in performance critical path. > > Mikulas >