diff for duplicates of <20170411140857.GA6821@red-moon> diff --git a/a/1.txt b/N1/1.txt index a6f3334..521dd5a 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,19 +1,15 @@ On Tue, Apr 11, 2017 at 11:38:26PM +1000, Benjamin Herrenschmidt wrote: > On Tue, 2017-04-11 at 13:28 +0100, Lorenzo Pieralisi wrote: > > This patch series[1] is a v3 of a previous version: -> > = - +> > > > v2: https://lkml.org/lkml/2017/3/27/220 -> = - +> > I am not a fan of this at All. -> = - +> > That whole concept of "ioremap_nopost" is simply not applicable to the > majority of architectures and certainly not in a way that can apply to > arbitrary mappings. -> = - +> > It's also very wrong to provide a "default" operation whose semantics > are weaker than what it's supposed to implement. Very wrong actually. > People will use it assuming the non-posted behaviour and things will @@ -58,8 +54,7 @@ PCI configuration (write) transactions." > sauce to provide the illusion of non-posting, then implement this in > the actual root complex code. -> = - +> > BTW. I'm pretty sure we "accidentally" made config writes posted at > least to the PHB on a number of powerpc systems forever and we *never* > had a problem because of it ;) @@ -73,48 +68,42 @@ Lorenzo > > v2 -> v3: > > - Created a default ioremap_nopost() implementation in a > > separate -> > =A0=A0asm-generic header and patched all arches to make use of it +> > asm-generic header and patched all arches to make use of it > > - Removed PCI drivers patches from the series to simplify the -> > =A0=A0review, they will be posted separately once the +> > review, they will be posted separately once the > > ioremap_nopost() -> > =A0=A0interface is settled +> > interface is settled > > - Fixed devm_ioremap_* BUS offset comments and implemented -> > =A0=A0nopost interface on top of it +> > nopost interface on top of it > > - Added collected tags -> > = - +> > > > v1: https://lkml.org/lkml/2017/2/27/228 -> > = - +> > > > v1 -> v2: > > - Changed pci_remap_cfgspace() to more generic ioremap_nopost() -> > =A0=A0interface +> > interface > > - Added pgprot_nonposted > > - Fixed build errors on arches not relying on asm-generic > > headers > > - Added PCI versatile host controller driver patch > > - Added missing config space remapping to hisilicon host > > controller -> > = - +> > > > --------------------- > > Original cover letter > > --------------------- -> > = - +> > > > PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering > > and Posting") strictly require PCI configuration and I/O Address > > space > > write transactions to be non-posted. -> > = - +> > > > Current crop of DT/ACPI PCI host controllers drivers relies on > > the ioremap interface to map ECAM and ECAM-derivative PCI config > > regions and pci_remap_iospace() to create a VMA for mapping > > PCI host bridge I/O Address space transactions to CPU virtual address > > space. -> > = - +> > > > On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI > > configuration non-posted write transactions requirement, because it > > provides a memory mapping that issues "bufferable" or, in PCI terms @@ -126,141 +115,103 @@ Lorenzo > > attributes that on eg ARM64 provides a memory mapping issuing > > posted writes transactions, which is not PCI specifications > > compliant. -> > = - +> > > > This patch series[1] addresses both issues in one go: -> > = - +> > > > - It updates the pci_remap_iospace() function to use a page mapping -> > =A0 that guarantees non-posted write transactions for I/O space +> > that guarantees non-posted write transactions for I/O space > > addresses > > - It adds a kernel API to remap PCI config space resources, so that -> > =A0 architecture can override it with a mapping implementation that -> > =A0 guarantees PCI specifications compliancy wrt non-posted write -> > =A0 configuration transactions +> > architecture can override it with a mapping implementation that +> > guarantees PCI specifications compliancy wrt non-posted write +> > configuration transactions > > - It updates all PCI host controller implementations (and the generic -> > =A0 ECAM layer) to use the newly introduced mapping interface -> > = - +> > ECAM layer) to use the newly introduced mapping interface +> > > > Tested on Juno ECAM based interface (DT/ACPI). -> > = - +> > > > Non-ECAM PCI host controller drivers patches need checking to make > > sure that: -> > = - +> > > > - I patched the correct resource region mapping for config space > > - There are not any other ways to ensure posted-write completion -> > =A0 in the respective pci_ops that make the relevant patch unnecessary -> > = - +> > in the respective pci_ops that make the relevant patch unnecessary +> > > > [1] > > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git > > pci/config-io-mappings-fix-v3 -> > = - +> > > > Lorenzo Pieralisi (32): -> > =A0 PCI: remove __weak tag from pci_remap_iospace() -> > =A0 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute -> > =A0 PCI: fix pci_remap_iospace() remap attribute -> > =A0 asm-generic: add ioremap_nopost() remap interface -> > =A0 alpha: include default ioremap_nopost() implementation -> > =A0 avr32: include default ioremap_nopost() implementation -> > =A0 arc: include default ioremap_nopost() implementation -> > =A0 cris: include default ioremap_nopost() implementation -> > =A0 frv: include default ioremap_nopost() implementation -> > =A0 hexagon: include default ioremap_nopost() implementation -> > =A0 ia64: include default ioremap_nopost() implementation -> > =A0 m32r: include default ioremap_nopost() implementation -> > =A0 m68k: include default ioremap_nopost() implementation -> > =A0 metag: include default ioremap_nopost() implementation -> > =A0 microblaze: include default ioremap_nopost() implementation -> > =A0 mips: include default ioremap_nopost() implementation -> > =A0 mn10300: include default ioremap_nopost() implementation -> > =A0 nios2: include default ioremap_nopost() implementation -> > =A0 openrisc: include default ioremap_nopost() implementation -> > =A0 parisc: include default ioremap_nopost() implementation -> > =A0 powerpc: include default ioremap_nopost() implementation -> > =A0 s390: include default ioremap_nopost() implementation -> > =A0 sh: include default ioremap_nopost() implementation -> > =A0 sparc: include default ioremap_nopost() implementation -> > =A0 tile: include default ioremap_nopost() implementation -> > =A0 unicore32: include default ioremap_nopost() implementation -> > =A0 x86: include default ioremap_nopost() implementation -> > =A0 xtensa: include default ioremap_nopost() implementation -> > =A0 arm64: implement ioremap_nopost() interface -> > =A0 arm: implement ioremap_nopost() interface -> > =A0 lib: fix Devres devm_ioremap_* offset parameter kerneldoc +> > PCI: remove __weak tag from pci_remap_iospace() +> > asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute +> > PCI: fix pci_remap_iospace() remap attribute +> > asm-generic: add ioremap_nopost() remap interface +> > alpha: include default ioremap_nopost() implementation +> > avr32: include default ioremap_nopost() implementation +> > arc: include default ioremap_nopost() implementation +> > cris: include default ioremap_nopost() implementation +> > frv: include default ioremap_nopost() implementation +> > hexagon: include default ioremap_nopost() implementation +> > ia64: include default ioremap_nopost() implementation +> > m32r: include default ioremap_nopost() implementation +> > m68k: include default ioremap_nopost() implementation +> > metag: include default ioremap_nopost() implementation +> > microblaze: include default ioremap_nopost() implementation +> > mips: include default ioremap_nopost() implementation +> > mn10300: include default ioremap_nopost() implementation +> > nios2: include default ioremap_nopost() implementation +> > openrisc: include default ioremap_nopost() implementation +> > parisc: include default ioremap_nopost() implementation +> > powerpc: include default ioremap_nopost() implementation +> > s390: include default ioremap_nopost() implementation +> > sh: include default ioremap_nopost() implementation +> > sparc: include default ioremap_nopost() implementation +> > tile: include default ioremap_nopost() implementation +> > unicore32: include default ioremap_nopost() implementation +> > x86: include default ioremap_nopost() implementation +> > xtensa: include default ioremap_nopost() implementation +> > arm64: implement ioremap_nopost() interface +> > arm: implement ioremap_nopost() interface +> > lib: fix Devres devm_ioremap_* offset parameter kerneldoc > > description -> > =A0 lib: implement Devres ioremap_nopost() interface -> > = - -> > =A0Documentation/driver-model/devres.txt |=A0=A03 ++ -> > =A0arch/alpha/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/arc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/arm/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A09 ++++ -> > =A0arch/arm/mm/ioremap.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0|=A0=A07 +++ -> > =A0arch/arm/mm/nommu.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0|=A0=A09 ++++ -> > =A0arch/arm64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0| 12 +++= -++ -> > =A0arch/avr32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/cris/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/frv/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/hexagon/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 + -> > =A0arch/ia64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/m32r/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/m68k/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/metag/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02= - + -> > =A0arch/microblaze/include/asm/io.h=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/mips/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/mn10300/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/nios2/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/openrisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 + -> > =A0arch/parisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/powerpc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/s390/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/sh/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|= -=A0=A01 + -> > =A0arch/sparc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/tile/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/unicore32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/x86/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/xtensa/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0drivers/pci/pci.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0|=A0=A04 +- -> > =A0include/asm-generic/ioremap-nopost.h=A0=A0|=A0=A09 ++++ -> > =A0include/asm-generic/pgtable.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A04 ++ -> > =A0include/linux/device.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0|=A0=A02 + -> > =A0include/linux/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0|=A0=A02 + -> > =A0lib/devres.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0=A0=A0=A0=A0| 84 +> > lib: implement Devres ioremap_nopost() interface +> > +> > Documentation/driver-model/devres.txt | 3 ++ +> > arch/alpha/include/asm/io.h | 1 + +> > arch/arc/include/asm/io.h | 1 + +> > arch/arm/include/asm/io.h | 9 ++++ +> > arch/arm/mm/ioremap.c | 7 +++ +> > arch/arm/mm/nommu.c | 9 ++++ +> > arch/arm64/include/asm/io.h | 12 +++++ +> > arch/avr32/include/asm/io.h | 1 + +> > arch/cris/include/asm/io.h | 1 + +> > arch/frv/include/asm/io.h | 1 + +> > arch/hexagon/include/asm/io.h | 2 + +> > arch/ia64/include/asm/io.h | 1 + +> > arch/m32r/include/asm/io.h | 1 + +> > arch/m68k/include/asm/io.h | 1 + +> > arch/metag/include/asm/io.h | 2 + +> > arch/microblaze/include/asm/io.h | 1 + +> > arch/mips/include/asm/io.h | 1 + +> > arch/mn10300/include/asm/io.h | 1 + +> > arch/nios2/include/asm/io.h | 1 + +> > arch/openrisc/include/asm/io.h | 2 + +> > arch/parisc/include/asm/io.h | 1 + +> > arch/powerpc/include/asm/io.h | 1 + +> > arch/s390/include/asm/io.h | 1 + +> > arch/sh/include/asm/io.h | 1 + +> > arch/sparc/include/asm/io.h | 1 + +> > arch/tile/include/asm/io.h | 1 + +> > arch/unicore32/include/asm/io.h | 1 + +> > arch/x86/include/asm/io.h | 1 + +> > arch/xtensa/include/asm/io.h | 1 + +> > drivers/pci/pci.c | 4 +- +> > include/asm-generic/ioremap-nopost.h | 9 ++++ +> > include/asm-generic/pgtable.h | 4 ++ +> > include/linux/device.h | 2 + +> > include/linux/io.h | 2 + +> > lib/devres.c | 84 > > +++++++++++++++++++++++++++++++++-- -> > =A035 files changed, 167 insertions(+), 5 deletions(-) -> > =A0create mode 100644 include/asm-generic/ioremap-nopost.h -> > = - - -_______________________________________________ -linux-arm-kernel mailing list -linux-arm-kernel@lists.infradead.org -http://lists.infradead.org/mailman/listinfo/linux-arm-kernel +> > 35 files changed, 167 insertions(+), 5 deletions(-) +> > create mode 100644 include/asm-generic/ioremap-nopost.h +> > diff --git a/a/content_digest b/N1/content_digest index 7c9b93a..4e4a1ea 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -27,48 +27,21 @@ Catalin Marinas <catalin.marinas@arm.com> Matt Turner <mattst88@gmail.com> Haavard Skinnemoen <hskinnemoen@gmail.com> - Fenghua Yu <fenghua.yu@intel.com> - James Hogan <james.hogan@imgtec.com> - Chris Metcalf <cmetcalf@mellanox.com> - Arnd Bergmann <arnd@arndb.de> - Heiko Carstens <heiko.carstens@de.ibm.com> - Stefan Kristiansson <stefan.kristiansson@saunalahti.fi> - Mikael Starvik <starvik@axis.com> - Ivan Kokshaysky <ink@jurassic.park.msu.ru> - Bjorn Helgaas <bhelgaas@google.com> - Stafford Horne <shorne@gmail.com> - linux-arm-kernel@lists.infradead.org - Richard Henderson <rth@twiddle.net> - Chris Zankel <chris@zankel.net> - Michal Simek <monstr@monstr.eu> - Tony Luck <tony.luck@intel.com> - Vineet Gupta <vgupta@synopsys.com> - linux-kernel@vger.kernel.org - Ralf Baechle <ralf@linux-mips.org> - Richard Kuo <rkuo@codeaurora.org> - Niklas Cassel <nks@flawful.org> - Luis R. Rodriguez <mcgrof@kernel.org> - Martin Schwidefsky <schwidefsky@de.ibm.com> - Ley Foon Tan <lftan@altera.com> - " David S. Miller <davem@davemloft.net>\0" + " Fenghua Yu <fenghua.yu@intel.co>\0" "\00:1\0" "b\0" "On Tue, Apr 11, 2017 at 11:38:26PM +1000, Benjamin Herrenschmidt wrote:\n" "> On Tue, 2017-04-11 at 13:28 +0100, Lorenzo Pieralisi wrote:\n" "> > This patch series[1] is a v3 of a previous version:\n" - "> > =\n" - "\n" + "> > \n" "> > v2: https://lkml.org/lkml/2017/3/27/220\n" - "> =\n" - "\n" + "> \n" "> I am not a fan of this at All.\n" - "> =\n" - "\n" + "> \n" "> That whole concept of \"ioremap_nopost\" is simply not applicable to the\n" "> majority of architectures and certainly not in a way that can apply to\n" "> arbitrary mappings.\n" - "> =\n" - "\n" + "> \n" "> It's also very wrong to provide a \"default\" operation whose semantics\n" "> are weaker than what it's supposed to implement. Very wrong actually.\n" "> People will use it assuming the non-posted behaviour and things will\n" @@ -113,8 +86,7 @@ "> sauce to provide the illusion of non-posting, then implement this in\n" "> the actual root complex code.\n" "\n" - "> =\n" - "\n" + "> \n" "> BTW. I'm pretty sure we \"accidentally\" made config writes posted at\n" "> least to the PHB on a number of powerpc systems forever and we *never*\n" "> had a problem because of it ;)\n" @@ -128,48 +100,42 @@ "> > v2 -> v3:\n" "> > \t- Created a default ioremap_nopost() implementation in a\n" "> > separate\n" - "> > \t=A0=A0asm-generic header and patched all arches to make use of it\n" + "> > \t\302\240\302\240asm-generic header and patched all arches to make use of it\n" "> > \t- Removed PCI drivers patches from the series to simplify the\n" - "> > \t=A0=A0review, they will be posted separately once the\n" + "> > \t\302\240\302\240review, they will be posted separately once the\n" "> > ioremap_nopost()\n" - "> > \t=A0=A0interface is settled\n" + "> > \t\302\240\302\240interface is settled\n" "> > \t- Fixed devm_ioremap_* BUS offset comments and implemented\n" - "> > \t=A0=A0nopost interface on top of it\n" + "> > \t\302\240\302\240nopost interface on top of it\n" "> > \t- Added collected tags\n" - "> > =\n" - "\n" + "> > \n" "> > v1: https://lkml.org/lkml/2017/2/27/228\n" - "> > =\n" - "\n" + "> > \n" "> > v1 -> v2:\n" "> > \t- Changed pci_remap_cfgspace() to more generic ioremap_nopost()\n" - "> > \t=A0=A0interface\n" + "> > \t\302\240\302\240interface\n" "> > \t- Added pgprot_nonposted\n" "> > \t- Fixed build errors on arches not relying on asm-generic\n" "> > headers\n" "> > \t- Added PCI versatile host controller driver patch\n" "> > \t- Added missing config space remapping to hisilicon host\n" "> > controller\n" - "> > =\n" - "\n" + "> > \n" "> > ---------------------\n" "> > Original cover letter\n" "> > ---------------------\n" - "> > =\n" - "\n" + "> > \n" "> > PCI local bus specifications (Rev3.0, 3.2.5 \"Transaction Ordering\n" "> > and Posting\") strictly require PCI configuration and I/O Address\n" "> > space\n" "> > write transactions to be non-posted.\n" - "> > =\n" - "\n" + "> > \n" "> > Current crop of DT/ACPI PCI host controllers drivers relies on\n" "> > the ioremap interface to map ECAM and ECAM-derivative PCI config\n" "> > regions and pci_remap_iospace() to create a VMA for mapping\n" "> > PCI host bridge I/O Address space transactions to CPU virtual address\n" "> > space.\n" - "> > =\n" - "\n" + "> > \n" "> > On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI\n" "> > configuration non-posted write transactions requirement, because it\n" "> > provides a memory mapping that issues \"bufferable\" or, in PCI terms\n" @@ -181,143 +147,105 @@ "> > attributes that on eg ARM64 provides a memory mapping issuing\n" "> > posted writes transactions, which is not PCI specifications\n" "> > compliant.\n" - "> > =\n" - "\n" + "> > \n" "> > This patch series[1] addresses both issues in one go:\n" - "> > =\n" - "\n" + "> > \n" "> > - It updates the pci_remap_iospace() function to use a page mapping\n" - "> > =A0 that guarantees non-posted write transactions for I/O space\n" + "> > \302\240 that guarantees non-posted write transactions for I/O space\n" "> > addresses\n" "> > - It adds a kernel API to remap PCI config space resources, so that\n" - "> > =A0 architecture can override it with a mapping implementation that\n" - "> > =A0 guarantees PCI specifications compliancy wrt non-posted write\n" - "> > =A0 configuration transactions\n" + "> > \302\240 architecture can override it with a mapping implementation that\n" + "> > \302\240 guarantees PCI specifications compliancy wrt non-posted write\n" + "> > \302\240 configuration transactions\n" "> > - It updates all PCI host controller implementations (and the generic\n" - "> > =A0 ECAM layer) to use the newly introduced mapping interface\n" - "> > =\n" - "\n" + "> > \302\240 ECAM layer) to use the newly introduced mapping interface\n" + "> > \n" "> > Tested on Juno ECAM based interface (DT/ACPI).\n" - "> > =\n" - "\n" + "> > \n" "> > Non-ECAM PCI host controller drivers patches need checking to make\n" "> > sure that:\n" - "> > =\n" - "\n" + "> > \n" "> > - I patched the correct resource region mapping for config space\n" "> > - There are not any other ways to ensure posted-write completion\n" - "> > =A0 in the respective pci_ops that make the relevant patch unnecessary\n" - "> > =\n" - "\n" + "> > \302\240 in the respective pci_ops that make the relevant patch unnecessary\n" + "> > \n" "> > [1]\n" "> > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git\n" "> > pci/config-io-mappings-fix-v3\n" - "> > =\n" - "\n" + "> > \n" "> > Lorenzo Pieralisi (32):\n" - "> > =A0 PCI: remove __weak tag from pci_remap_iospace()\n" - "> > =A0 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n" - "> > =A0 PCI: fix pci_remap_iospace() remap attribute\n" - "> > =A0 asm-generic: add ioremap_nopost() remap interface\n" - "> > =A0 alpha: include default ioremap_nopost() implementation\n" - "> > =A0 avr32: include default ioremap_nopost() implementation\n" - "> > =A0 arc: include default ioremap_nopost() implementation\n" - "> > =A0 cris: include default ioremap_nopost() implementation\n" - "> > =A0 frv: include default ioremap_nopost() implementation\n" - "> > =A0 hexagon: include default ioremap_nopost() implementation\n" - "> > =A0 ia64: include default ioremap_nopost() implementation\n" - "> > =A0 m32r: include default ioremap_nopost() implementation\n" - "> > =A0 m68k: include default ioremap_nopost() implementation\n" - "> > =A0 metag: include default ioremap_nopost() implementation\n" - "> > =A0 microblaze: include default ioremap_nopost() implementation\n" - "> > =A0 mips: include default ioremap_nopost() implementation\n" - "> > =A0 mn10300: include default ioremap_nopost() implementation\n" - "> > =A0 nios2: include default ioremap_nopost() implementation\n" - "> > =A0 openrisc: include default ioremap_nopost() implementation\n" - "> > =A0 parisc: include default ioremap_nopost() implementation\n" - "> > =A0 powerpc: include default ioremap_nopost() implementation\n" - "> > =A0 s390: include default ioremap_nopost() implementation\n" - "> > =A0 sh: include default ioremap_nopost() implementation\n" - "> > =A0 sparc: include default ioremap_nopost() implementation\n" - "> > =A0 tile: include default ioremap_nopost() implementation\n" - "> > =A0 unicore32: include default ioremap_nopost() implementation\n" - "> > =A0 x86: include default ioremap_nopost() implementation\n" - "> > =A0 xtensa: include default ioremap_nopost() implementation\n" - "> > =A0 arm64: implement ioremap_nopost() interface\n" - "> > =A0 arm: implement ioremap_nopost() interface\n" - "> > =A0 lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n" + "> > \302\240 PCI: remove __weak tag from pci_remap_iospace()\n" + "> > \302\240 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n" + "> > \302\240 PCI: fix pci_remap_iospace() remap attribute\n" + "> > \302\240 asm-generic: add ioremap_nopost() remap interface\n" + "> > \302\240 alpha: include default ioremap_nopost() implementation\n" + "> > \302\240 avr32: include default ioremap_nopost() implementation\n" + "> > \302\240 arc: include default ioremap_nopost() implementation\n" + "> > \302\240 cris: include default ioremap_nopost() implementation\n" + "> > \302\240 frv: include default ioremap_nopost() implementation\n" + "> > \302\240 hexagon: include default ioremap_nopost() implementation\n" + "> > \302\240 ia64: include default ioremap_nopost() implementation\n" + "> > \302\240 m32r: include default ioremap_nopost() implementation\n" + "> > \302\240 m68k: include default ioremap_nopost() implementation\n" + "> > \302\240 metag: include default ioremap_nopost() implementation\n" + "> > \302\240 microblaze: include default ioremap_nopost() implementation\n" + "> > \302\240 mips: include default ioremap_nopost() implementation\n" + "> > \302\240 mn10300: include default ioremap_nopost() implementation\n" + "> > \302\240 nios2: include default ioremap_nopost() implementation\n" + "> > \302\240 openrisc: include default ioremap_nopost() implementation\n" + "> > \302\240 parisc: include default ioremap_nopost() implementation\n" + "> > \302\240 powerpc: include default ioremap_nopost() implementation\n" + "> > \302\240 s390: include default ioremap_nopost() implementation\n" + "> > \302\240 sh: include default ioremap_nopost() implementation\n" + "> > \302\240 sparc: include default ioremap_nopost() implementation\n" + "> > \302\240 tile: include default ioremap_nopost() implementation\n" + "> > \302\240 unicore32: include default ioremap_nopost() implementation\n" + "> > \302\240 x86: include default ioremap_nopost() implementation\n" + "> > \302\240 xtensa: include default ioremap_nopost() implementation\n" + "> > \302\240 arm64: implement ioremap_nopost() interface\n" + "> > \302\240 arm: implement ioremap_nopost() interface\n" + "> > \302\240 lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n" "> > description\n" - "> > =A0 lib: implement Devres ioremap_nopost() interface\n" - "> > =\n" - "\n" - "> > =A0Documentation/driver-model/devres.txt |=A0=A03 ++\n" - "> > =A0arch/alpha/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/arc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/arm/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A09 ++++\n" - "> > =A0arch/arm/mm/ioremap.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0|=A0=A07 +++\n" - "> > =A0arch/arm/mm/nommu.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0|=A0=A09 ++++\n" - "> > =A0arch/arm64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0| 12 +++=\n" - "++\n" - "> > =A0arch/avr32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/cris/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/frv/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/hexagon/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 +\n" - "> > =A0arch/ia64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/m32r/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/m68k/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/metag/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02=\n" - " +\n" - "> > =A0arch/microblaze/include/asm/io.h=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/mips/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/mn10300/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/nios2/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/openrisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 +\n" - "> > =A0arch/parisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/powerpc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/s390/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/sh/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=\n" - "=A0=A01 +\n" - "> > =A0arch/sparc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/tile/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/unicore32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/x86/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/xtensa/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0drivers/pci/pci.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0|=A0=A04 +-\n" - "> > =A0include/asm-generic/ioremap-nopost.h=A0=A0|=A0=A09 ++++\n" - "> > =A0include/asm-generic/pgtable.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A04 ++\n" - "> > =A0include/linux/device.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0|=A0=A02 +\n" - "> > =A0include/linux/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0|=A0=A02 +\n" - "> > =A0lib/devres.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0=A0=A0=A0=A0| 84\n" + "> > \302\240 lib: implement Devres ioremap_nopost() interface\n" + "> > \n" + "> > \302\240Documentation/driver-model/devres.txt |\302\240\302\2403 ++\n" + "> > \302\240arch/alpha/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/arc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/arm/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2409 ++++\n" + "> > \302\240arch/arm/mm/ioremap.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2407 +++\n" + "> > \302\240arch/arm/mm/nommu.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2409 ++++\n" + "> > \302\240arch/arm64/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 12 +++++\n" + "> > \302\240arch/avr32/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/cris/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/frv/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/hexagon/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n" + "> > \302\240arch/ia64/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/m32r/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/m68k/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/metag/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n" + "> > \302\240arch/microblaze/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/mips/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/mn10300/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/nios2/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/openrisc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n" + "> > \302\240arch/parisc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/powerpc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/s390/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/sh/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/sparc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/tile/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/unicore32/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/x86/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240arch/xtensa/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n" + "> > \302\240drivers/pci/pci.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2404 +-\n" + "> > \302\240include/asm-generic/ioremap-nopost.h\302\240\302\240|\302\240\302\2409 ++++\n" + "> > \302\240include/asm-generic/pgtable.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2404 ++\n" + "> > \302\240include/linux/device.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n" + "> > \302\240include/linux/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n" + "> > \302\240lib/devres.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 84\n" "> > +++++++++++++++++++++++++++++++++--\n" - "> > =A035 files changed, 167 insertions(+), 5 deletions(-)\n" - "> > =A0create mode 100644 include/asm-generic/ioremap-nopost.h\n" - "> > =\n" - "\n" - "\n" - "_______________________________________________\n" - "linux-arm-kernel mailing list\n" - "linux-arm-kernel@lists.infradead.org\n" - http://lists.infradead.org/mailman/listinfo/linux-arm-kernel + "> > \302\24035 files changed, 167 insertions(+), 5 deletions(-)\n" + "> > \302\240create mode 100644 include/asm-generic/ioremap-nopost.h\n" + > > -64d5c6e99cf2ca67777cb8a0dda0006a82b4f99e6b38a8edeed1ca1730114a49 +1b367d87c4f35bd7c92992471e5826d5ede4ddfd7bd12a4a9b69e66ae706feec
diff --git a/a/1.txt b/N2/1.txt index a6f3334..8c92313 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -1,19 +1,15 @@ On Tue, Apr 11, 2017 at 11:38:26PM +1000, Benjamin Herrenschmidt wrote: > On Tue, 2017-04-11 at 13:28 +0100, Lorenzo Pieralisi wrote: > > This patch series[1] is a v3 of a previous version: -> > = - +> > > > v2: https://lkml.org/lkml/2017/3/27/220 -> = - +> > I am not a fan of this at All. -> = - +> > That whole concept of "ioremap_nopost" is simply not applicable to the > majority of architectures and certainly not in a way that can apply to > arbitrary mappings. -> = - +> > It's also very wrong to provide a "default" operation whose semantics > are weaker than what it's supposed to implement. Very wrong actually. > People will use it assuming the non-posted behaviour and things will @@ -58,8 +54,7 @@ PCI configuration (write) transactions." > sauce to provide the illusion of non-posting, then implement this in > the actual root complex code. -> = - +> > BTW. I'm pretty sure we "accidentally" made config writes posted at > least to the PHB on a number of powerpc systems forever and we *never* > had a problem because of it ;) @@ -73,48 +68,42 @@ Lorenzo > > v2 -> v3: > > - Created a default ioremap_nopost() implementation in a > > separate -> > =A0=A0asm-generic header and patched all arches to make use of it +> > ??asm-generic header and patched all arches to make use of it > > - Removed PCI drivers patches from the series to simplify the -> > =A0=A0review, they will be posted separately once the +> > ??review, they will be posted separately once the > > ioremap_nopost() -> > =A0=A0interface is settled +> > ??interface is settled > > - Fixed devm_ioremap_* BUS offset comments and implemented -> > =A0=A0nopost interface on top of it +> > ??nopost interface on top of it > > - Added collected tags -> > = - +> > > > v1: https://lkml.org/lkml/2017/2/27/228 -> > = - +> > > > v1 -> v2: > > - Changed pci_remap_cfgspace() to more generic ioremap_nopost() -> > =A0=A0interface +> > ??interface > > - Added pgprot_nonposted > > - Fixed build errors on arches not relying on asm-generic > > headers > > - Added PCI versatile host controller driver patch > > - Added missing config space remapping to hisilicon host > > controller -> > = - +> > > > --------------------- > > Original cover letter > > --------------------- -> > = - +> > > > PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering > > and Posting") strictly require PCI configuration and I/O Address > > space > > write transactions to be non-posted. -> > = - +> > > > Current crop of DT/ACPI PCI host controllers drivers relies on > > the ioremap interface to map ECAM and ECAM-derivative PCI config > > regions and pci_remap_iospace() to create a VMA for mapping > > PCI host bridge I/O Address space transactions to CPU virtual address > > space. -> > = - +> > > > On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI > > configuration non-posted write transactions requirement, because it > > provides a memory mapping that issues "bufferable" or, in PCI terms @@ -126,141 +115,103 @@ Lorenzo > > attributes that on eg ARM64 provides a memory mapping issuing > > posted writes transactions, which is not PCI specifications > > compliant. -> > = - +> > > > This patch series[1] addresses both issues in one go: -> > = - +> > > > - It updates the pci_remap_iospace() function to use a page mapping -> > =A0 that guarantees non-posted write transactions for I/O space +> > ? that guarantees non-posted write transactions for I/O space > > addresses > > - It adds a kernel API to remap PCI config space resources, so that -> > =A0 architecture can override it with a mapping implementation that -> > =A0 guarantees PCI specifications compliancy wrt non-posted write -> > =A0 configuration transactions +> > ? architecture can override it with a mapping implementation that +> > ? guarantees PCI specifications compliancy wrt non-posted write +> > ? configuration transactions > > - It updates all PCI host controller implementations (and the generic -> > =A0 ECAM layer) to use the newly introduced mapping interface -> > = - +> > ? ECAM layer) to use the newly introduced mapping interface +> > > > Tested on Juno ECAM based interface (DT/ACPI). -> > = - +> > > > Non-ECAM PCI host controller drivers patches need checking to make > > sure that: -> > = - +> > > > - I patched the correct resource region mapping for config space > > - There are not any other ways to ensure posted-write completion -> > =A0 in the respective pci_ops that make the relevant patch unnecessary -> > = - +> > ? in the respective pci_ops that make the relevant patch unnecessary +> > > > [1] > > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git > > pci/config-io-mappings-fix-v3 -> > = - +> > > > Lorenzo Pieralisi (32): -> > =A0 PCI: remove __weak tag from pci_remap_iospace() -> > =A0 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute -> > =A0 PCI: fix pci_remap_iospace() remap attribute -> > =A0 asm-generic: add ioremap_nopost() remap interface -> > =A0 alpha: include default ioremap_nopost() implementation -> > =A0 avr32: include default ioremap_nopost() implementation -> > =A0 arc: include default ioremap_nopost() implementation -> > =A0 cris: include default ioremap_nopost() implementation -> > =A0 frv: include default ioremap_nopost() implementation -> > =A0 hexagon: include default ioremap_nopost() implementation -> > =A0 ia64: include default ioremap_nopost() implementation -> > =A0 m32r: include default ioremap_nopost() implementation -> > =A0 m68k: include default ioremap_nopost() implementation -> > =A0 metag: include default ioremap_nopost() implementation -> > =A0 microblaze: include default ioremap_nopost() implementation -> > =A0 mips: include default ioremap_nopost() implementation -> > =A0 mn10300: include default ioremap_nopost() implementation -> > =A0 nios2: include default ioremap_nopost() implementation -> > =A0 openrisc: include default ioremap_nopost() implementation -> > =A0 parisc: include default ioremap_nopost() implementation -> > =A0 powerpc: include default ioremap_nopost() implementation -> > =A0 s390: include default ioremap_nopost() implementation -> > =A0 sh: include default ioremap_nopost() implementation -> > =A0 sparc: include default ioremap_nopost() implementation -> > =A0 tile: include default ioremap_nopost() implementation -> > =A0 unicore32: include default ioremap_nopost() implementation -> > =A0 x86: include default ioremap_nopost() implementation -> > =A0 xtensa: include default ioremap_nopost() implementation -> > =A0 arm64: implement ioremap_nopost() interface -> > =A0 arm: implement ioremap_nopost() interface -> > =A0 lib: fix Devres devm_ioremap_* offset parameter kerneldoc +> > ? PCI: remove __weak tag from pci_remap_iospace() +> > ? asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute +> > ? PCI: fix pci_remap_iospace() remap attribute +> > ? asm-generic: add ioremap_nopost() remap interface +> > ? alpha: include default ioremap_nopost() implementation +> > ? avr32: include default ioremap_nopost() implementation +> > ? arc: include default ioremap_nopost() implementation +> > ? cris: include default ioremap_nopost() implementation +> > ? frv: include default ioremap_nopost() implementation +> > ? hexagon: include default ioremap_nopost() implementation +> > ? ia64: include default ioremap_nopost() implementation +> > ? m32r: include default ioremap_nopost() implementation +> > ? m68k: include default ioremap_nopost() implementation +> > ? metag: include default ioremap_nopost() implementation +> > ? microblaze: include default ioremap_nopost() implementation +> > ? mips: include default ioremap_nopost() implementation +> > ? mn10300: include default ioremap_nopost() implementation +> > ? nios2: include default ioremap_nopost() implementation +> > ? openrisc: include default ioremap_nopost() implementation +> > ? parisc: include default ioremap_nopost() implementation +> > ? powerpc: include default ioremap_nopost() implementation +> > ? s390: include default ioremap_nopost() implementation +> > ? sh: include default ioremap_nopost() implementation +> > ? sparc: include default ioremap_nopost() implementation +> > ? tile: include default ioremap_nopost() implementation +> > ? unicore32: include default ioremap_nopost() implementation +> > ? x86: include default ioremap_nopost() implementation +> > ? xtensa: include default ioremap_nopost() implementation +> > ? arm64: implement ioremap_nopost() interface +> > ? arm: implement ioremap_nopost() interface +> > ? lib: fix Devres devm_ioremap_* offset parameter kerneldoc > > description -> > =A0 lib: implement Devres ioremap_nopost() interface -> > = - -> > =A0Documentation/driver-model/devres.txt |=A0=A03 ++ -> > =A0arch/alpha/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/arc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/arm/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A09 ++++ -> > =A0arch/arm/mm/ioremap.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0|=A0=A07 +++ -> > =A0arch/arm/mm/nommu.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0|=A0=A09 ++++ -> > =A0arch/arm64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0| 12 +++= -++ -> > =A0arch/avr32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/cris/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/frv/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/hexagon/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 + -> > =A0arch/ia64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/m32r/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/m68k/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/metag/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02= - + -> > =A0arch/microblaze/include/asm/io.h=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/mips/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/mn10300/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/nios2/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/openrisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 + -> > =A0arch/parisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/powerpc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/s390/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/sh/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|= -=A0=A01 + -> > =A0arch/sparc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01= - + -> > =A0arch/tile/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/unicore32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0arch/x86/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0= -=A01 + -> > =A0arch/xtensa/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 + -> > =A0drivers/pci/pci.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0|=A0=A04 +- -> > =A0include/asm-generic/ioremap-nopost.h=A0=A0|=A0=A09 ++++ -> > =A0include/asm-generic/pgtable.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A04 ++ -> > =A0include/linux/device.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0|=A0=A02 + -> > =A0include/linux/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0|=A0=A02 + -> > =A0lib/devres.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0=A0=A0=A0=A0| 84 +> > ? lib: implement Devres ioremap_nopost() interface +> > +> > ?Documentation/driver-model/devres.txt |??3 ++ +> > ?arch/alpha/include/asm/io.h???????????|??1 + +> > ?arch/arc/include/asm/io.h?????????????|??1 + +> > ?arch/arm/include/asm/io.h?????????????|??9 ++++ +> > ?arch/arm/mm/ioremap.c?????????????????|??7 +++ +> > ?arch/arm/mm/nommu.c???????????????????|??9 ++++ +> > ?arch/arm64/include/asm/io.h???????????| 12 +++++ +> > ?arch/avr32/include/asm/io.h???????????|??1 + +> > ?arch/cris/include/asm/io.h????????????|??1 + +> > ?arch/frv/include/asm/io.h?????????????|??1 + +> > ?arch/hexagon/include/asm/io.h?????????|??2 + +> > ?arch/ia64/include/asm/io.h????????????|??1 + +> > ?arch/m32r/include/asm/io.h????????????|??1 + +> > ?arch/m68k/include/asm/io.h????????????|??1 + +> > ?arch/metag/include/asm/io.h???????????|??2 + +> > ?arch/microblaze/include/asm/io.h??????|??1 + +> > ?arch/mips/include/asm/io.h????????????|??1 + +> > ?arch/mn10300/include/asm/io.h?????????|??1 + +> > ?arch/nios2/include/asm/io.h???????????|??1 + +> > ?arch/openrisc/include/asm/io.h????????|??2 + +> > ?arch/parisc/include/asm/io.h??????????|??1 + +> > ?arch/powerpc/include/asm/io.h?????????|??1 + +> > ?arch/s390/include/asm/io.h????????????|??1 + +> > ?arch/sh/include/asm/io.h??????????????|??1 + +> > ?arch/sparc/include/asm/io.h???????????|??1 + +> > ?arch/tile/include/asm/io.h????????????|??1 + +> > ?arch/unicore32/include/asm/io.h???????|??1 + +> > ?arch/x86/include/asm/io.h?????????????|??1 + +> > ?arch/xtensa/include/asm/io.h??????????|??1 + +> > ?drivers/pci/pci.c?????????????????????|??4 +- +> > ?include/asm-generic/ioremap-nopost.h??|??9 ++++ +> > ?include/asm-generic/pgtable.h?????????|??4 ++ +> > ?include/linux/device.h????????????????|??2 + +> > ?include/linux/io.h????????????????????|??2 + +> > ?lib/devres.c??????????????????????????| 84 > > +++++++++++++++++++++++++++++++++-- -> > =A035 files changed, 167 insertions(+), 5 deletions(-) -> > =A0create mode 100644 include/asm-generic/ioremap-nopost.h -> > = - - -_______________________________________________ -linux-arm-kernel mailing list -linux-arm-kernel@lists.infradead.org -http://lists.infradead.org/mailman/listinfo/linux-arm-kernel +> > ?35 files changed, 167 insertions(+), 5 deletions(-) +> > ?create mode 100644 include/asm-generic/ioremap-nopost.h +> > diff --git a/a/content_digest b/N2/content_digest index 7c9b93a..69e31bb 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -1,74 +1,23 @@ "ref\020170411122923.6285-1-lorenzo.pieralisi@arm.com\0" "ref\01491917906.7236.7.camel@kernel.crashing.org\0" - "From\0Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>\0" - "Subject\0Re: [PATCH v3 00/32] PCI: fix config and I/O Address space memory mappings\0" + "From\0lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)\0" + "Subject\0[PATCH v3 00/32] PCI: fix config and I/O Address space memory mappings\0" "Date\0Tue, 11 Apr 2017 15:08:57 +0100\0" - "To\0Benjamin Herrenschmidt <benh@kernel.crashing.org>\0" - "Cc\0Jonas Bonn <jonas@southpole.se>" - Rich Felker <dalias@libc.org> - linux-pci@vger.kernel.org - Will Deacon <will.deacon@arm.com> - James E.J. Bottomley <jejb@parisc-linux.org> - David Howells <dhowells@redhat.com> - Max Filippov <jcmvbkbc@gmail.com> - Paul Mackerras <paulus@samba.org> - Huacai Chen <chenhc@lemote.com> - Guan Xuetao <gxt@mprc.pku.edu.cn> - Thomas Gleixner <tglx@linutronix.de> - Hans-Christian Egtvedt <egtvedt@samfundet.no> - linux-arch@vger.kernel.org - Jesper Nilsson <jesper.nilsson@axis.com> - Yoshinori Sato <ysato@users.sourceforge.jp> - Michael Ellerman <mpe@ellerman.id.au> - Helge Deller <deller@gmx.de> - Russell King <linux@armlinux.org.uk> - Ingo Molnar <mingo@redhat.com> - Geert Uytterhoeven <geert@linux-m68k.org> - Catalin Marinas <catalin.marinas@arm.com> - Matt Turner <mattst88@gmail.com> - Haavard Skinnemoen <hskinnemoen@gmail.com> - Fenghua Yu <fenghua.yu@intel.com> - James Hogan <james.hogan@imgtec.com> - Chris Metcalf <cmetcalf@mellanox.com> - Arnd Bergmann <arnd@arndb.de> - Heiko Carstens <heiko.carstens@de.ibm.com> - Stefan Kristiansson <stefan.kristiansson@saunalahti.fi> - Mikael Starvik <starvik@axis.com> - Ivan Kokshaysky <ink@jurassic.park.msu.ru> - Bjorn Helgaas <bhelgaas@google.com> - Stafford Horne <shorne@gmail.com> - linux-arm-kernel@lists.infradead.org - Richard Henderson <rth@twiddle.net> - Chris Zankel <chris@zankel.net> - Michal Simek <monstr@monstr.eu> - Tony Luck <tony.luck@intel.com> - Vineet Gupta <vgupta@synopsys.com> - linux-kernel@vger.kernel.org - Ralf Baechle <ralf@linux-mips.org> - Richard Kuo <rkuo@codeaurora.org> - Niklas Cassel <nks@flawful.org> - Luis R. Rodriguez <mcgrof@kernel.org> - Martin Schwidefsky <schwidefsky@de.ibm.com> - Ley Foon Tan <lftan@altera.com> - " David S. Miller <davem@davemloft.net>\0" + "To\0linux-arm-kernel@lists.infradead.org\0" "\00:1\0" "b\0" "On Tue, Apr 11, 2017 at 11:38:26PM +1000, Benjamin Herrenschmidt wrote:\n" "> On Tue, 2017-04-11 at 13:28 +0100, Lorenzo Pieralisi wrote:\n" "> > This patch series[1] is a v3 of a previous version:\n" - "> > =\n" - "\n" + "> > \n" "> > v2: https://lkml.org/lkml/2017/3/27/220\n" - "> =\n" - "\n" + "> \n" "> I am not a fan of this at All.\n" - "> =\n" - "\n" + "> \n" "> That whole concept of \"ioremap_nopost\" is simply not applicable to the\n" "> majority of architectures and certainly not in a way that can apply to\n" "> arbitrary mappings.\n" - "> =\n" - "\n" + "> \n" "> It's also very wrong to provide a \"default\" operation whose semantics\n" "> are weaker than what it's supposed to implement. Very wrong actually.\n" "> People will use it assuming the non-posted behaviour and things will\n" @@ -113,8 +62,7 @@ "> sauce to provide the illusion of non-posting, then implement this in\n" "> the actual root complex code.\n" "\n" - "> =\n" - "\n" + "> \n" "> BTW. I'm pretty sure we \"accidentally\" made config writes posted at\n" "> least to the PHB on a number of powerpc systems forever and we *never*\n" "> had a problem because of it ;)\n" @@ -128,48 +76,42 @@ "> > v2 -> v3:\n" "> > \t- Created a default ioremap_nopost() implementation in a\n" "> > separate\n" - "> > \t=A0=A0asm-generic header and patched all arches to make use of it\n" + "> > \t??asm-generic header and patched all arches to make use of it\n" "> > \t- Removed PCI drivers patches from the series to simplify the\n" - "> > \t=A0=A0review, they will be posted separately once the\n" + "> > \t??review, they will be posted separately once the\n" "> > ioremap_nopost()\n" - "> > \t=A0=A0interface is settled\n" + "> > \t??interface is settled\n" "> > \t- Fixed devm_ioremap_* BUS offset comments and implemented\n" - "> > \t=A0=A0nopost interface on top of it\n" + "> > \t??nopost interface on top of it\n" "> > \t- Added collected tags\n" - "> > =\n" - "\n" + "> > \n" "> > v1: https://lkml.org/lkml/2017/2/27/228\n" - "> > =\n" - "\n" + "> > \n" "> > v1 -> v2:\n" "> > \t- Changed pci_remap_cfgspace() to more generic ioremap_nopost()\n" - "> > \t=A0=A0interface\n" + "> > \t??interface\n" "> > \t- Added pgprot_nonposted\n" "> > \t- Fixed build errors on arches not relying on asm-generic\n" "> > headers\n" "> > \t- Added PCI versatile host controller driver patch\n" "> > \t- Added missing config space remapping to hisilicon host\n" "> > controller\n" - "> > =\n" - "\n" + "> > \n" "> > ---------------------\n" "> > Original cover letter\n" "> > ---------------------\n" - "> > =\n" - "\n" + "> > \n" "> > PCI local bus specifications (Rev3.0, 3.2.5 \"Transaction Ordering\n" "> > and Posting\") strictly require PCI configuration and I/O Address\n" "> > space\n" "> > write transactions to be non-posted.\n" - "> > =\n" - "\n" + "> > \n" "> > Current crop of DT/ACPI PCI host controllers drivers relies on\n" "> > the ioremap interface to map ECAM and ECAM-derivative PCI config\n" "> > regions and pci_remap_iospace() to create a VMA for mapping\n" "> > PCI host bridge I/O Address space transactions to CPU virtual address\n" "> > space.\n" - "> > =\n" - "\n" + "> > \n" "> > On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI\n" "> > configuration non-posted write transactions requirement, because it\n" "> > provides a memory mapping that issues \"bufferable\" or, in PCI terms\n" @@ -181,143 +123,105 @@ "> > attributes that on eg ARM64 provides a memory mapping issuing\n" "> > posted writes transactions, which is not PCI specifications\n" "> > compliant.\n" - "> > =\n" - "\n" + "> > \n" "> > This patch series[1] addresses both issues in one go:\n" - "> > =\n" - "\n" + "> > \n" "> > - It updates the pci_remap_iospace() function to use a page mapping\n" - "> > =A0 that guarantees non-posted write transactions for I/O space\n" + "> > ? that guarantees non-posted write transactions for I/O space\n" "> > addresses\n" "> > - It adds a kernel API to remap PCI config space resources, so that\n" - "> > =A0 architecture can override it with a mapping implementation that\n" - "> > =A0 guarantees PCI specifications compliancy wrt non-posted write\n" - "> > =A0 configuration transactions\n" + "> > ? architecture can override it with a mapping implementation that\n" + "> > ? guarantees PCI specifications compliancy wrt non-posted write\n" + "> > ? configuration transactions\n" "> > - It updates all PCI host controller implementations (and the generic\n" - "> > =A0 ECAM layer) to use the newly introduced mapping interface\n" - "> > =\n" - "\n" + "> > ? ECAM layer) to use the newly introduced mapping interface\n" + "> > \n" "> > Tested on Juno ECAM based interface (DT/ACPI).\n" - "> > =\n" - "\n" + "> > \n" "> > Non-ECAM PCI host controller drivers patches need checking to make\n" "> > sure that:\n" - "> > =\n" - "\n" + "> > \n" "> > - I patched the correct resource region mapping for config space\n" "> > - There are not any other ways to ensure posted-write completion\n" - "> > =A0 in the respective pci_ops that make the relevant patch unnecessary\n" - "> > =\n" - "\n" + "> > ? in the respective pci_ops that make the relevant patch unnecessary\n" + "> > \n" "> > [1]\n" "> > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git\n" "> > pci/config-io-mappings-fix-v3\n" - "> > =\n" - "\n" + "> > \n" "> > Lorenzo Pieralisi (32):\n" - "> > =A0 PCI: remove __weak tag from pci_remap_iospace()\n" - "> > =A0 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n" - "> > =A0 PCI: fix pci_remap_iospace() remap attribute\n" - "> > =A0 asm-generic: add ioremap_nopost() remap interface\n" - "> > =A0 alpha: include default ioremap_nopost() implementation\n" - "> > =A0 avr32: include default ioremap_nopost() implementation\n" - "> > =A0 arc: include default ioremap_nopost() implementation\n" - "> > =A0 cris: include default ioremap_nopost() implementation\n" - "> > =A0 frv: include default ioremap_nopost() implementation\n" - "> > =A0 hexagon: include default ioremap_nopost() implementation\n" - "> > =A0 ia64: include default ioremap_nopost() implementation\n" - "> > =A0 m32r: include default ioremap_nopost() implementation\n" - "> > =A0 m68k: include default ioremap_nopost() implementation\n" - "> > =A0 metag: include default ioremap_nopost() implementation\n" - "> > =A0 microblaze: include default ioremap_nopost() implementation\n" - "> > =A0 mips: include default ioremap_nopost() implementation\n" - "> > =A0 mn10300: include default ioremap_nopost() implementation\n" - "> > =A0 nios2: include default ioremap_nopost() implementation\n" - "> > =A0 openrisc: include default ioremap_nopost() implementation\n" - "> > =A0 parisc: include default ioremap_nopost() implementation\n" - "> > =A0 powerpc: include default ioremap_nopost() implementation\n" - "> > =A0 s390: include default ioremap_nopost() implementation\n" - "> > =A0 sh: include default ioremap_nopost() implementation\n" - "> > =A0 sparc: include default ioremap_nopost() implementation\n" - "> > =A0 tile: include default ioremap_nopost() implementation\n" - "> > =A0 unicore32: include default ioremap_nopost() implementation\n" - "> > =A0 x86: include default ioremap_nopost() implementation\n" - "> > =A0 xtensa: include default ioremap_nopost() implementation\n" - "> > =A0 arm64: implement ioremap_nopost() interface\n" - "> > =A0 arm: implement ioremap_nopost() interface\n" - "> > =A0 lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n" + "> > ? PCI: remove __weak tag from pci_remap_iospace()\n" + "> > ? asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n" + "> > ? PCI: fix pci_remap_iospace() remap attribute\n" + "> > ? asm-generic: add ioremap_nopost() remap interface\n" + "> > ? alpha: include default ioremap_nopost() implementation\n" + "> > ? avr32: include default ioremap_nopost() implementation\n" + "> > ? arc: include default ioremap_nopost() implementation\n" + "> > ? cris: include default ioremap_nopost() implementation\n" + "> > ? frv: include default ioremap_nopost() implementation\n" + "> > ? hexagon: include default ioremap_nopost() implementation\n" + "> > ? ia64: include default ioremap_nopost() implementation\n" + "> > ? m32r: include default ioremap_nopost() implementation\n" + "> > ? m68k: include default ioremap_nopost() implementation\n" + "> > ? metag: include default ioremap_nopost() implementation\n" + "> > ? microblaze: include default ioremap_nopost() implementation\n" + "> > ? mips: include default ioremap_nopost() implementation\n" + "> > ? mn10300: include default ioremap_nopost() implementation\n" + "> > ? nios2: include default ioremap_nopost() implementation\n" + "> > ? openrisc: include default ioremap_nopost() implementation\n" + "> > ? parisc: include default ioremap_nopost() implementation\n" + "> > ? powerpc: include default ioremap_nopost() implementation\n" + "> > ? s390: include default ioremap_nopost() implementation\n" + "> > ? sh: include default ioremap_nopost() implementation\n" + "> > ? sparc: include default ioremap_nopost() implementation\n" + "> > ? tile: include default ioremap_nopost() implementation\n" + "> > ? unicore32: include default ioremap_nopost() implementation\n" + "> > ? x86: include default ioremap_nopost() implementation\n" + "> > ? xtensa: include default ioremap_nopost() implementation\n" + "> > ? arm64: implement ioremap_nopost() interface\n" + "> > ? arm: implement ioremap_nopost() interface\n" + "> > ? lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n" "> > description\n" - "> > =A0 lib: implement Devres ioremap_nopost() interface\n" - "> > =\n" - "\n" - "> > =A0Documentation/driver-model/devres.txt |=A0=A03 ++\n" - "> > =A0arch/alpha/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/arc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/arm/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A09 ++++\n" - "> > =A0arch/arm/mm/ioremap.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0|=A0=A07 +++\n" - "> > =A0arch/arm/mm/nommu.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0|=A0=A09 ++++\n" - "> > =A0arch/arm64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0| 12 +++=\n" - "++\n" - "> > =A0arch/avr32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/cris/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/frv/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/hexagon/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 +\n" - "> > =A0arch/ia64/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/m32r/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/m68k/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/metag/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02=\n" - " +\n" - "> > =A0arch/microblaze/include/asm/io.h=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/mips/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/mn10300/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/nios2/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/openrisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A02 +\n" - "> > =A0arch/parisc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/powerpc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/s390/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/sh/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=\n" - "=A0=A01 +\n" - "> > =A0arch/sparc/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01=\n" - " +\n" - "> > =A0arch/tile/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/unicore32/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0arch/x86/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=\n" - "=A01 +\n" - "> > =A0arch/xtensa/include/asm/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A01 +\n" - "> > =A0drivers/pci/pci.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0|=A0=A04 +-\n" - "> > =A0include/asm-generic/ioremap-nopost.h=A0=A0|=A0=A09 ++++\n" - "> > =A0include/asm-generic/pgtable.h=A0=A0=A0=A0=A0=A0=A0=A0=A0|=A0=A04 ++\n" - "> > =A0include/linux/device.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0|=A0=A02 +\n" - "> > =A0include/linux/io.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0|=A0=A02 +\n" - "> > =A0lib/devres.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0=A0=A0=A0=A0| 84\n" + "> > ? lib: implement Devres ioremap_nopost() interface\n" + "> > \n" + "> > ?Documentation/driver-model/devres.txt |??3 ++\n" + "> > ?arch/alpha/include/asm/io.h???????????|??1 +\n" + "> > ?arch/arc/include/asm/io.h?????????????|??1 +\n" + "> > ?arch/arm/include/asm/io.h?????????????|??9 ++++\n" + "> > ?arch/arm/mm/ioremap.c?????????????????|??7 +++\n" + "> > ?arch/arm/mm/nommu.c???????????????????|??9 ++++\n" + "> > ?arch/arm64/include/asm/io.h???????????| 12 +++++\n" + "> > ?arch/avr32/include/asm/io.h???????????|??1 +\n" + "> > ?arch/cris/include/asm/io.h????????????|??1 +\n" + "> > ?arch/frv/include/asm/io.h?????????????|??1 +\n" + "> > ?arch/hexagon/include/asm/io.h?????????|??2 +\n" + "> > ?arch/ia64/include/asm/io.h????????????|??1 +\n" + "> > ?arch/m32r/include/asm/io.h????????????|??1 +\n" + "> > ?arch/m68k/include/asm/io.h????????????|??1 +\n" + "> > ?arch/metag/include/asm/io.h???????????|??2 +\n" + "> > ?arch/microblaze/include/asm/io.h??????|??1 +\n" + "> > ?arch/mips/include/asm/io.h????????????|??1 +\n" + "> > ?arch/mn10300/include/asm/io.h?????????|??1 +\n" + "> > ?arch/nios2/include/asm/io.h???????????|??1 +\n" + "> > ?arch/openrisc/include/asm/io.h????????|??2 +\n" + "> > ?arch/parisc/include/asm/io.h??????????|??1 +\n" + "> > ?arch/powerpc/include/asm/io.h?????????|??1 +\n" + "> > ?arch/s390/include/asm/io.h????????????|??1 +\n" + "> > ?arch/sh/include/asm/io.h??????????????|??1 +\n" + "> > ?arch/sparc/include/asm/io.h???????????|??1 +\n" + "> > ?arch/tile/include/asm/io.h????????????|??1 +\n" + "> > ?arch/unicore32/include/asm/io.h???????|??1 +\n" + "> > ?arch/x86/include/asm/io.h?????????????|??1 +\n" + "> > ?arch/xtensa/include/asm/io.h??????????|??1 +\n" + "> > ?drivers/pci/pci.c?????????????????????|??4 +-\n" + "> > ?include/asm-generic/ioremap-nopost.h??|??9 ++++\n" + "> > ?include/asm-generic/pgtable.h?????????|??4 ++\n" + "> > ?include/linux/device.h????????????????|??2 +\n" + "> > ?include/linux/io.h????????????????????|??2 +\n" + "> > ?lib/devres.c??????????????????????????| 84\n" "> > +++++++++++++++++++++++++++++++++--\n" - "> > =A035 files changed, 167 insertions(+), 5 deletions(-)\n" - "> > =A0create mode 100644 include/asm-generic/ioremap-nopost.h\n" - "> > =\n" - "\n" - "\n" - "_______________________________________________\n" - "linux-arm-kernel mailing list\n" - "linux-arm-kernel@lists.infradead.org\n" - http://lists.infradead.org/mailman/listinfo/linux-arm-kernel + "> > ?35 files changed, 167 insertions(+), 5 deletions(-)\n" + "> > ?create mode 100644 include/asm-generic/ioremap-nopost.h\n" + > > -64d5c6e99cf2ca67777cb8a0dda0006a82b4f99e6b38a8edeed1ca1730114a49 +4ce4581fb4af6f32114e259feb863d06f87c2c63ac4549148138aa775d654c79
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.