From: John Garry <john.garry@huawei.com> To: "Luis R. Rodriguez" <mcgrof@kernel.org>, Bjorn Helgaas <helgaas@kernel.org> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>, Andy Lutomirski <luto@amacapital.net>, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>, Will Deacon <will.deacon@arm.com>, Bjorn Helgaas <bhelgaas@google.com>, Russell King <linux@armlinux.org.uk>, Catalin Marinas <catalin.marinas@arm.com>, Pratyush Anand <pratyush.anand@gmail.com>, Jingoo Han <jingoohan1@gmail.com>, Mingkai Hu <mingkai.hu@freescale.com>, Tanmay Inamdar <tinamdar@apm.com>, Murali Karicheri <m-karicheri2@ti.com>, Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>, Ray Jui <rjui@broadcom.com>, Wenrui Li <wenrui.li@> Subject: Re: [PATCH 03/20] asm-generic/io.h: add PCI config space remap interface Date: Mon, 20 Mar 2017 10:22:59 +0000 [thread overview] Message-ID: <f7a4083d-373d-c93b-1aa4-89a967aa97fe@huawei.com> (raw) In-Reply-To: <20170317000803.GA28800@wotan.suse.de> On 17/03/2017 00:08, Luis R. Rodriguez wrote: > On Thu, Mar 16, 2017 at 04:12:43PM -0500, Bjorn Helgaas wrote: >> [+cc Luis] >> >> On Mon, Feb 27, 2017 at 03:14:14PM +0000, Lorenzo Pieralisi wrote: >>> The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and >>> Posting") mandate non-posted configuration transactions. As further >>> highlighted in the PCIe specifications (4.0 - Rev0.3, "Ordering >>> Considerations for the Enhanced Configuration Access Mechanism"), >>> through ECAM and ECAM-derivative configuration mechanism, the memory >>> mapped transactions from the host CPU into Configuration Requests on the >>> PCI express fabric may create ordering problems for software because >>> writes to memory address are typically posted transactions (unless the >>> architecture can enforce through virtual address mapping non-posted >>> write transactions behaviour) but writes to Configuration Space are not >>> posted on the PCI express fabric. >>> >>> Current DT and ACPI host bridge controllers map PCI configuration space >>> (ECAM and ECAM-derivative) into the virtual address space through >>> ioremap() calls, that are non-cacheable device accesses on most >>> architectures, but may provide "bufferable" or "posted" write semantics >>> in architecture like eg ARM/ARM64 that allow ioremap'ed regions writes >>> to be buffered in the bus connecting the host CPU to the PCI fabric; >>> this behaviour, as underlined in the PCIe specifications, may trigger >>> transactions ordering rules and must be prevented. >>> >>> Introduce a new generic and explicit API to create a memory >>> mapping for ECAM and ECAM-derivative config space area that >>> defaults to ioremap_nocache() (which should provide a sane default >>> behaviour) but still allowing architectures on which ioremap_nocache() >>> results in posted write transactions to override the function >>> call with an arch specific implementation that complies with >>> the PCI specifications for configuration transactions. > > So... I take it this is actually fixing a series of odd issues also, > do we at least have some reports or actual issues ? > We (Huawei) originally raised the concern [1], but have not actually experienced any related issue. Thanks, John [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2017-January/477353.html >>> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> >>> Cc: Arnd Bergmann <arnd@arndb.de> >>> Cc: Will Deacon <will.deacon@arm.com> >>> Cc: Bjorn Helgaas <bhelgaas@google.com> >>> Cc: Russell King <linux@armlinux.org.uk> >>> Cc: Catalin Marinas <catalin.marinas@arm.com> >>> --- >>> include/asm-generic/io.h | 9 +++++++++ >>> 1 file changed, 9 insertions(+) >>> >>> diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h >>> index 7ef015e..52dda81 100644 >>> --- a/include/asm-generic/io.h >>> +++ b/include/asm-generic/io.h >>> @@ -915,6 +915,15 @@ extern void ioport_unmap(void __iomem *p); >>> #endif /* CONFIG_GENERIC_IOMAP */ >>> #endif /* CONFIG_HAS_IOPORT_MAP */ >>> >>> +#ifndef pci_remap_cfgspace >>> +#define pci_remap_cfgspace pci_remap_cfgspace >>> +static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset, >>> + size_t size) >>> +{ >>> + return ioremap_nocache(offset, size); >>> +} >> >> I'm fine with this conceptually, but I think it would make more sense >> if the name weren't specific to PCI or config space, e.g., >> ioremap_nopost() or something. > > Seems reasonable to me -- but are there other buses that could use this already > as well ? Wouldn't these other buses also run into similar issues ? Can someone > also bounce me a copy of the patches that use this ? > > While at it, please add some documentation too, the above commit log is huge, > and yet for the person eyeballing the code they won't have any clue why this > was added exactly. Since this is about helping with picking the right > ioremap due to certain semantics / requirements on the PCI config space, > we should clarify then what exactly are the expectations here. The clearer > you are the less in trouble we can get later. > > Luis > > . >
WARNING: multiple messages have this Message-ID (diff)
From: John Garry <john.garry@huawei.com> To: "Luis R. Rodriguez" <mcgrof@kernel.org>, Bjorn Helgaas <helgaas@kernel.org> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>, Andy Lutomirski <luto@amacapital.net>, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>, Will Deacon <will.deacon@arm.com>, Bjorn Helgaas <bhelgaas@google.com>, Russell King <linux@armlinux.org.uk>, Catalin Marinas <catalin.marinas@arm.com>, Pratyush Anand <pratyush.anand@gmail.com>, Jingoo Han <jingoohan1@gmail.com>, Mingkai Hu <mingkai.hu@freescale.com>, Tanmay Inamdar <tinamdar@apm.com>, Murali Karicheri <m-karicheri2@ti.com>, Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>, Ray Jui <rjui@broadcom.com>, Wenrui Li <wenrui.li@rock-chips.com>, Shawn Lin <shawn.lin@rock-chips.com>, Minghuan Lian <minghuan.Lian@freescale.com>, Jon Mason <jonmason@broadcom.com>, Gabriele Paoloni <gabriele.paoloni@huawei.com>, Thomas Petazzoni <thomas.petazzoni@free-electrons.com>, Joao Pinto <Joao.Pinto@synopsys.com>, Thierry Reding <thierry.reding@gmail.com>, Michal Simek <michal.simek@xilinx.com>, Stanimir Varbanov <svarbanov@mm-sol.com>, Zhou Wang <wangzhou1@hisilicon.com>, Roy Zang <tie-fei.zang@freescale.com>, Linuxarm <linuxarm@huawei.com> Subject: Re: [PATCH 03/20] asm-generic/io.h: add PCI config space remap interface Date: Mon, 20 Mar 2017 10:22:59 +0000 [thread overview] Message-ID: <f7a4083d-373d-c93b-1aa4-89a967aa97fe@huawei.com> (raw) Message-ID: <20170320102259.aIPdWlXSou2hW-wdiwgJCOQURDnXpXSKNL6mnMBk-wQ@z> (raw) In-Reply-To: <20170317000803.GA28800@wotan.suse.de> On 17/03/2017 00:08, Luis R. Rodriguez wrote: > On Thu, Mar 16, 2017 at 04:12:43PM -0500, Bjorn Helgaas wrote: >> [+cc Luis] >> >> On Mon, Feb 27, 2017 at 03:14:14PM +0000, Lorenzo Pieralisi wrote: >>> The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and >>> Posting") mandate non-posted configuration transactions. As further >>> highlighted in the PCIe specifications (4.0 - Rev0.3, "Ordering >>> Considerations for the Enhanced Configuration Access Mechanism"), >>> through ECAM and ECAM-derivative configuration mechanism, the memory >>> mapped transactions from the host CPU into Configuration Requests on the >>> PCI express fabric may create ordering problems for software because >>> writes to memory address are typically posted transactions (unless the >>> architecture can enforce through virtual address mapping non-posted >>> write transactions behaviour) but writes to Configuration Space are not >>> posted on the PCI express fabric. >>> >>> Current DT and ACPI host bridge controllers map PCI configuration space >>> (ECAM and ECAM-derivative) into the virtual address space through >>> ioremap() calls, that are non-cacheable device accesses on most >>> architectures, but may provide "bufferable" or "posted" write semantics >>> in architecture like eg ARM/ARM64 that allow ioremap'ed regions writes >>> to be buffered in the bus connecting the host CPU to the PCI fabric; >>> this behaviour, as underlined in the PCIe specifications, may trigger >>> transactions ordering rules and must be prevented. >>> >>> Introduce a new generic and explicit API to create a memory >>> mapping for ECAM and ECAM-derivative config space area that >>> defaults to ioremap_nocache() (which should provide a sane default >>> behaviour) but still allowing architectures on which ioremap_nocache() >>> results in posted write transactions to override the function >>> call with an arch specific implementation that complies with >>> the PCI specifications for configuration transactions. > > So... I take it this is actually fixing a series of odd issues also, > do we at least have some reports or actual issues ? > We (Huawei) originally raised the concern [1], but have not actually experienced any related issue. Thanks, John [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2017-January/477353.html >>> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> >>> Cc: Arnd Bergmann <arnd@arndb.de> >>> Cc: Will Deacon <will.deacon@arm.com> >>> Cc: Bjorn Helgaas <bhelgaas@google.com> >>> Cc: Russell King <linux@armlinux.org.uk> >>> Cc: Catalin Marinas <catalin.marinas@arm.com> >>> --- >>> include/asm-generic/io.h | 9 +++++++++ >>> 1 file changed, 9 insertions(+) >>> >>> diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h >>> index 7ef015e..52dda81 100644 >>> --- a/include/asm-generic/io.h >>> +++ b/include/asm-generic/io.h >>> @@ -915,6 +915,15 @@ extern void ioport_unmap(void __iomem *p); >>> #endif /* CONFIG_GENERIC_IOMAP */ >>> #endif /* CONFIG_HAS_IOPORT_MAP */ >>> >>> +#ifndef pci_remap_cfgspace >>> +#define pci_remap_cfgspace pci_remap_cfgspace >>> +static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset, >>> + size_t size) >>> +{ >>> + return ioremap_nocache(offset, size); >>> +} >> >> I'm fine with this conceptually, but I think it would make more sense >> if the name weren't specific to PCI or config space, e.g., >> ioremap_nopost() or something. > > Seems reasonable to me -- but are there other buses that could use this already > as well ? Wouldn't these other buses also run into similar issues ? Can someone > also bounce me a copy of the patches that use this ? > > While at it, please add some documentation too, the above commit log is huge, > and yet for the person eyeballing the code they won't have any clue why this > was added exactly. Since this is about helping with picking the right > ioremap due to certain semantics / requirements on the PCI config space, > we should clarify then what exactly are the expectations here. The clearer > you are the less in trouble we can get later. > > Luis > > . >
next prev parent reply other threads:[~2017-03-20 10:22 UTC|newest] Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-02-27 15:14 [PATCH 00/20] PCI: fix config and I/O Address space memory mappings Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 01/20] PCI: remove __weak tag from pci_remap_iospace() Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-03-01 16:15 ` Arnd Bergmann 2017-03-01 16:15 ` Arnd Bergmann 2017-02-27 15:14 ` [PATCH 02/20] PCI: fix pci_remap_iospace() remap attribute Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-03-16 21:48 ` Bjorn Helgaas 2017-03-16 21:48 ` Bjorn Helgaas 2017-03-17 0:33 ` Luis R. Rodriguez 2017-03-17 0:33 ` Luis R. Rodriguez 2017-03-17 10:43 ` Liviu Dudau 2017-03-17 10:43 ` Liviu Dudau 2017-03-17 16:26 ` Luis R. Rodriguez 2017-03-17 16:26 ` Luis R. Rodriguez 2017-03-20 16:19 ` Lorenzo Pieralisi 2017-03-20 16:19 ` Lorenzo Pieralisi 2017-03-20 16:06 ` Bjorn Helgaas 2017-03-20 16:06 ` Bjorn Helgaas 2017-03-20 16:26 ` Lorenzo Pieralisi 2017-03-20 16:26 ` Lorenzo Pieralisi 2017-03-20 16:38 ` Bjorn Helgaas 2017-03-20 16:38 ` Bjorn Helgaas 2017-02-27 15:14 ` [PATCH 03/20] asm-generic/io.h: add PCI config space remap interface Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-03-16 21:12 ` Bjorn Helgaas 2017-03-16 21:12 ` Bjorn Helgaas 2017-03-17 0:08 ` Luis R. Rodriguez 2017-03-17 0:08 ` Luis R. Rodriguez 2017-03-20 10:22 ` John Garry [this message] 2017-03-20 10:22 ` John Garry 2017-03-20 16:27 ` Bjorn Helgaas 2017-03-20 16:27 ` Bjorn Helgaas 2017-03-20 18:45 ` Lorenzo Pieralisi 2017-03-20 18:45 ` Lorenzo Pieralisi 2017-03-22 15:04 ` Lorenzo Pieralisi 2017-03-22 15:04 ` Lorenzo Pieralisi 2017-03-22 15:15 ` Arnd Bergmann 2017-03-22 15:15 ` Arnd Bergmann 2017-03-22 16:29 ` Bjorn Helgaas 2017-03-22 16:29 ` Bjorn Helgaas 2017-02-27 15:14 ` [PATCH 04/20] ARM64: implement pci_remap_cfgspace() interface Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 05/20] ARM: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-03-20 16:43 ` Russell King - ARM Linux 2017-03-20 16:43 ` Russell King - ARM Linux 2017-03-21 15:26 ` Lorenzo Pieralisi 2017-03-21 15:26 ` Lorenzo Pieralisi 2017-03-21 16:53 ` Russell King - ARM Linux 2017-03-21 16:53 ` Russell King - ARM Linux 2017-02-27 15:14 ` [PATCH 06/20] PCI: ECAM: use pci_remap_cfgspace() to map config region Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 07/20] PCI: implement Devres interface to map PCI config space Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-28 10:43 ` Lorenzo Pieralisi 2017-02-28 10:43 ` Lorenzo Pieralisi 2017-03-01 23:54 ` Andy Shevchenko 2017-03-01 23:54 ` Andy Shevchenko 2017-03-02 12:05 ` Lorenzo Pieralisi 2017-03-02 12:05 ` Lorenzo Pieralisi 2017-03-02 12:50 ` Andy Shevchenko 2017-03-02 12:50 ` Andy Shevchenko 2017-03-02 19:24 ` Tejun Heo 2017-03-02 19:24 ` Tejun Heo 2017-03-02 20:08 ` Thierry Reding 2017-03-02 20:08 ` Thierry Reding 2017-02-27 15:14 ` [PATCH 08/20] PCI: xilinx: update PCI config space remap function Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 09/20] PCI: xilinx-nwl: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 10/20] PCI: spear13xx: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 11/20] PCI: rockchip: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 12/20] PCI: qcom: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 13/20] PCI: iproc-platform: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 21:21 ` Ray Jui 2017-02-27 21:21 ` Ray Jui 2017-02-28 10:54 ` Lorenzo Pieralisi 2017-02-28 10:54 ` Lorenzo Pieralisi 2017-02-28 17:42 ` Ray Jui 2017-02-28 17:42 ` Ray Jui 2017-02-27 15:14 ` [PATCH 14/20] PCI: hisi: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-03-02 10:56 ` Gabriele Paoloni 2017-03-02 10:56 ` Gabriele Paoloni 2017-03-02 11:49 ` Lorenzo Pieralisi 2017-03-02 11:49 ` Lorenzo Pieralisi 2017-03-02 11:53 ` Gabriele Paoloni 2017-03-02 11:53 ` Gabriele Paoloni 2017-02-27 15:14 ` [PATCH 15/20] PCI: designware: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 16/20] PCI: armada8k: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 17/20] PCI: xgene: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 18/20] PCI: tegra: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 19/20] PCI: layerscape: " Lorenzo Pieralisi 2017-02-27 15:14 ` [PATCH 20/20] PCI: keystone-dw: " Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 2017-03-01 16:18 ` [PATCH 00/20] PCI: fix config and I/O Address space memory mappings Arnd Bergmann 2017-03-01 16:18 ` Arnd Bergmann 2017-03-02 18:00 ` Lorenzo Pieralisi 2017-03-02 18:00 ` Lorenzo Pieralisi
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=f7a4083d-373d-c93b-1aa4-89a967aa97fe@huawei.com \ --to=john.garry@huawei.com \ --cc=arnd@arndb.de \ --cc=bharat.kumar.gogada@xilinx.com \ --cc=bhelgaas@google.com \ --cc=catalin.marinas@arm.com \ --cc=helgaas@kernel.org \ --cc=jingoohan1@gmail.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pci@vger.kernel.org \ --cc=linux@armlinux.org.uk \ --cc=lorenzo.pieralisi@arm.com \ --cc=luto@amacapital.net \ --cc=m-karicheri2@ti.com \ --cc=mcgrof@kernel.org \ --cc=mingkai.hu@freescale.com \ --cc=paulmck@linux.vnet.ibm.com \ --cc=pratyush.anand@gmail.com \ --cc=rjui@broadcom.com \ --cc=tinamdar@apm.com \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).