Received: by 10.213.65.68 with SMTP id h4csp3499815imn; Tue, 3 Apr 2018 06:08:03 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+yc4KyJ/MZJj2GCvXaSxv4nUliQ/+IkxUVO56w0k+azsW7eeHcyQ9XIttcpzdlsATDro/J X-Received: by 10.99.0.200 with SMTP id 191mr9084285pga.33.1522760883223; Tue, 03 Apr 2018 06:08:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522760883; cv=none; d=google.com; s=arc-20160816; b=BYZjC6e9nYpKyhzJ1kPXhCccr4WTRemPi2jG1UpswH6rk7xvXuwZ5jFdna572qdSx5 ZbsBt9x/OVpASW3Bf2lt2ULOzQKHaZkR13IFkOQUWTX43cuu5biRhQvWtSH9Xait406w YT27XpqBWDmzsUwGlO6uCEthKeAqY6PJ+yeJuT2/9IR3N0iVFjdxZvbV6wduXu2E13ti z/yyDBVdFfJph970SuUZ0r7PPEMEAbyR4DddI6KONhMxRbH1jNXR1fICYndunz3HAaoG h6yTOHcQBcPyRRjXJ+7jVA1KLpvK9DXBZgDlHB+YGJTKsTwsXZ028uFx4G37sIBogcAl QuDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dmarc-filter :dkim-signature:dkim-signature:arc-authentication-results; bh=qSaMOmE8V945KKETYYJaXkgtFL3+DLMZ4eNaMVr9hYY=; b=Y/9BXCYG/M9rab+pRjM9J6px12aEcaVir0Km8Zk2l2JzN7ccmMOkCY2k7Bf3Y6sX6B u5S9RXXlMD2LcrpLVrN2zTRgM/0bc1eXG4dA4whN9dq8433AXQDeiK9wYiULVTBBwpqQ sqVbLQSpwsM4CB3dMG20sbzafRd6fRzClak/nWC0d6evJPiC62GlRV4E/f7mZ1cWCvRi a4g+RA+TQwJn4R8QKBmSiNHE5j8DypcXONaeiicmY64RJu2yVdPmCCDblR+L5jH0gAeB abVE7yh0DRzBgcDmM1z5UIfrvp8BlEDxLoVbamvsqL1Cr8WiI9OopbbXSomJ75kc///Z 6Yfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=klLtlw8P; dkim=pass header.i=@codeaurora.org header.s=default header.b=dYTfVTXN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f21si358275pfa.377.2018.04.03.06.07.48; Tue, 03 Apr 2018 06:08:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=klLtlw8P; dkim=pass header.i=@codeaurora.org header.s=default header.b=dYTfVTXN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932227AbeDCNG2 (ORCPT + 99 others); Tue, 3 Apr 2018 09:06:28 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:47282 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932168AbeDCNG0 (ORCPT ); Tue, 3 Apr 2018 09:06:26 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 01D546081C; Tue, 3 Apr 2018 13:06:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1522760786; bh=6GS607pgkruvw+M9BSRAexqJr/zoKDh/6NNIT0xVsTA=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=klLtlw8PIt/9j6zYcuLiw5PiwE/hpeX1CJm32OsdC3v9JMJzbMZI+d2u7P+bKsAAj SreASIQQhGPtoE35dJ8JQvu4HC5iy9+sd+DCrqem9GZ2MsKgmyGVCc0lRvWeNvI/GM hwFq5putXu1WosueBEquFS9gf2d8nd3oDkBmyHcw= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from [192.168.0.105] (cpe-174-109-247-98.nc.res.rr.com [174.109.247.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: okaya@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 34EE960767; Tue, 3 Apr 2018 13:06:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1522760785; bh=6GS607pgkruvw+M9BSRAexqJr/zoKDh/6NNIT0xVsTA=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=dYTfVTXNbI74J+f97dSP/dw1RdFw56sZjcXhgrX6M/4+PT3yya3ncetSqAf6AoqTA +fS80IuHEtJP4qPT+KFnErH2ePn/xW+t0Ezb1u2DlA/Snh57MuUqScPmXjVzSrOKBA RqocBeTTBp+IJ5cuTuYd3y3OXRYAT0mcbEc/VyyI= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 34EE960767 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=okaya@codeaurora.org Subject: Re: [PATCH v2 2/2] io: prevent compiler reordering on the default readX() implementation To: Arnd Bergmann Cc: Mark Rutland , Timur Tabi , sulrich@codeaurora.org, linux-arm-msm@vger.kernel.org, Linux ARM , linux-arch , Linux Kernel Mailing List References: <1522425494-2916-1-git-send-email-okaya@codeaurora.org> <1522425494-2916-2-git-send-email-okaya@codeaurora.org> <20180403104925.fuyajja6tyanlna4@lakrids.cambridge.arm.com> From: Sinan Kaya Message-ID: <587b59bb-2794-ffc2-3cd3-b77de85d3e7d@codeaurora.org> Date: Tue, 3 Apr 2018 09:06:23 -0400 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 4/3/2018 8:56 AM, Arnd Bergmann wrote: > On Tue, Apr 3, 2018 at 2:44 PM, Sinan Kaya wrote: >> On 4/3/2018 7:13 AM, Arnd Bergmann wrote: >>> On Tue, Apr 3, 2018 at 12:49 PM, Mark Rutland wrote: >>>> Hi, >>>> >>>> On Fri, Mar 30, 2018 at 11:58:13AM -0400, Sinan Kaya wrote: >>>>> The default implementation of mapping readX() to __raw_readX() is wrong. >>>>> readX() has stronger ordering semantics. Compiler is allowed to reorder >>>>> __raw_readX(). >>>> >>>> Could you please specify what the compiler is potentially reordering >>>> __raw_readX() against, and why this would be wrong? >>>> >>>> e.g. do we care about prior normal memory accesses, subsequent normal >>>> memory accesses, and/or other IO accesses? >>>> >>>> I assume that the asm-generic __raw_{read,write}X() implementations are >>>> all ordered w.r.t. each other (at least for a specific device). >>> >>> I think that is correct: the compiler won't reorder those because of the >>> 'volatile' pointer dereference, but it can reorder access to a normal >>> pointer against a __raw_readl()/__raw_writel(), which breaks the scenario >>> of using writel to trigger a DMA, or using a readl to see if a DMA has >>> completed. >> >> Yes, we are worried about memory update vs. IO update ordering here. >> That was the reason why barrier() was introduced in this patch. I'll try to >> clarify that better in the commit text. >> >>> >>> The question is whether we should use a stronger barrier such >>> as rmb() amd wmb() here rather than a simple compiler barrier. >>> >>> I would assume that on complex architectures with write buffers and >>> out-of-order prefetching, those are required, while on architectures >>> without those features, the barriers are cheap. >> >> That's my reasoning too. I'm trying to follow the x86 example here where there >> is a compiler barrier in writeX() and readX() family of functions. > > I think x86 is the special case here because it implicitly guarantees > the strict ordering in the hardware, as long as the compiler gets it > right. For the asm-generic version, it may be better to play safe and > do the safest version, requiring architectures to override that barrier > if they want to be faster. > > We could use the same macros that riscv has, using __io_br(), > __io_ar(), __io_bw() and __io_aw() for before/after read/write. Sure, let me take a stab at it. > > Arnd > -- Sinan Kaya Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.