linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFT PATCH v2 00/42] PCI: ARM/ARM64: remove pci_fixup_irqs() usage
Date: Tue, 20 Jun 2017 15:44:40 +0100	[thread overview]
Message-ID: <20170620144440.GB11351@red-moon> (raw)
In-Reply-To: <20170619231217.GE554@bhelgaas-glaptop.roam.corp.google.com>

On Mon, Jun 19, 2017 at 06:12:17PM -0500, Bjorn Helgaas wrote:
> On Thu, Jun 08, 2017 at 03:13:00PM +0100, Lorenzo Pieralisi wrote:
> > v1 -> v2
> > 
> > - Split pci_fixup_irqs() removal in several patches
> > - Embedded pci_register_host_bridge() in pci_scan_root_bus_bridge()
> > - Refactored iproc, faraday and xilinx-nwl host bridges in preparation
> >   for irq fixup removal
> > - Converted all DT PCI host bridge drivers to pci_scan_root_bus_bridge()
> > - Dropped RFC tag
> > - Added devm_pci_alloc_host_bridge() interface
> > - Rebased against v4.12-rc3
> > 
> > v1: http://marc.info/?l=linux-pci&m=149320545522205&w=2
> > 
> > Current pci_fixup_irqs() usage on ARM/ARM64 host controller drivers is
> > flawed in that pci_fixup_irqs() allocates IRQs for all PCI devices present
> > in a system; those PCI devices possibly belong to different PCI bus trees
> > (and possibly rooted at different host bridges) and may well be enabled
> > (ie probed and bound to a driver) by the time pci_fixup_irqs() is called
> > when probing a given host bridge driver.
> > 
> > Furthermore, current kernel code relying on pci_fixup_irqs() to
> > assign legacy PCI IRQs to devices does not work at all for
> > hotplugged devices in that the code carrying out the IRQ fixup
> > is called at host bridge driver probe time, which just cannot take
> > into account devices hotplugged after system has booted.
> > 
> > By leveraging Matthew Minter's patch series (and its purpose):
> > 
> > http://lkml.kernel.org/r/1445576642-29624-2-git-send-email-matt at masarand.com
> > 
> > this series[1] adds IRQs mapping and swizzling primitives to
> > the struct pci_host_bridge which allows IRQs to be allocated for
> > for a device at probe time with host bridge specific functions,
> > fixing the aforementioned limitations.
> > 
> > Current series remove pci_fixup_irqs() usage on ARM/ARM64; removal
> > can be extended to other architectures provided the IRQs map/swizzle
> > functions are set-up properly in the respective host bridges
> > set-up/probe paths.
> > 
> > Tested on kvmtool with PCI host generic.
> > 
> > [1] git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git pci/pci-fixup-irqs-removal-v2
> > 
> > Lorenzo Pieralisi (37):
> >   PCI: xilinx-nwl: Remove nwl_pcie_enable_msi() unused bus parameter
> >   drivers: pci: host: iproc: Convert link check to raw PCI config
> >     accessors
> >   drivers: pci: host: ftpci100: convert IRQ masking to raw PCI config
> >     accessors
> >   PCI: Initialize bridge release function at bridge allocation
> >   PCI: Add pci_free_host_bridge interface
> >   PCI: Add devm_pci_alloc_host_bridge() interface
> >   drivers: pci: host: ftpci100: Fix host bridge memory leakage
> >   drivers: pci: host: tegra: Fix host bridge memory leakage
> >   PCI: Introduce pci_scan_root_bus_bridge()
> >   PCI: Make pci_register_host_bridge() PCI core internal
> >   ARM: PCI: bios32: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: designware: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: aardvark: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: rcar: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: iproc: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: versatile: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: altera: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: xilinx: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: xgene: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: host-common: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: rockchip: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: xilinx-nwl: Convert PCI scan API to pci_scan_root_bus_bridge()
> >   PCI: Remove pci_scan_root_bus_msi()
> >   ARM: PCI: Remove pci_fixup_irqs() call for bios32 host controllers
> >   PCI: tegra: Drop pci_fixup_irqs()
> >   PCI: xilinx: Drop pci_fixup_irqs()
> >   PCI: rcar: Drop pci_fixup_irqs()
> >   PCI: iproc: Drop pci_fixup_irqs()
> >   PCI: designware-host: Drop pci_fixup_irqs()
> >   PCI: ftpci100: Drop pci_fixup_irqs()
> >   PCI: host-common: Drop pci_fixup_irqs()
> >   PCI: versatile: Drop pci_fixup_irqs()
> >   PCI: altera: Drop pci_fixup_irqs()
> >   PCI: xgene: Move to struct pci_host_bridge IRQ mapping functions
> >   PCI: rockchip: Move to struct pci_host_bridge IRQ mapping functions
> >   PCI: xilinx-nwl: Move to struct pci_host_bridge IRQ mapping functions
> >   ARM64: PCI: Drop DT IRQ allocation from pcibios_alloc_irq()
> > 
> > Matthew Minter (5):
> >   PCI: Build setup-irq.o on all arches
> >   PCI: Add IRQ mapping function pointers to pci_host_bridge struct
> >   PCI: Add pci_assign_irq() function and have pci_fixup_irqs() use it
> >   OF/PCI: Update of_irq_parse_and_map_pci() comment
> >   PCI: Add a call to pci_assign_irq() in pci_device_probe()
> > 
> >  Documentation/driver-model/devres.txt  |   1 +
> >  arch/arm/include/asm/mach/pci.h        |   3 +-
> >  arch/arm/kernel/bios32.c               |  43 +++++++----
> >  arch/arm/mach-dove/pcie.c              |  33 +++++---
> >  arch/arm/mach-iop13xx/pci.c            |  31 +++++---
> >  arch/arm/mach-iop13xx/pci.h            |   3 +-
> >  arch/arm/mach-mv78xx0/pcie.c           |   8 +-
> >  arch/arm/mach-orion5x/common.h         |   3 +-
> >  arch/arm/mach-orion5x/pci.c            |  39 ++++++----
> >  arch/arm64/kernel/pci.c                |  10 +--
> >  drivers/of/of_pci_irq.c                |   3 +-
> >  drivers/pci/Makefile                   |  17 +----
> >  drivers/pci/dwc/pcie-designware-host.c |  43 ++++++-----
> >  drivers/pci/host/pci-aardvark.c        |  21 +++--
> >  drivers/pci/host/pci-ftpci100.c        |  50 +++++++-----
> >  drivers/pci/host/pci-host-common.c     |  27 +++++--
> >  drivers/pci/host/pci-tegra.c           |   9 +--
> >  drivers/pci/host/pci-versatile.c       |  22 +++++-
> >  drivers/pci/host/pci-xgene.c           |  23 ++++--
> >  drivers/pci/host/pcie-altera.c         |  24 ++++--
> >  drivers/pci/host/pcie-iproc-bcma.c     |   7 +-
> >  drivers/pci/host/pcie-iproc-platform.c |   7 +-
> >  drivers/pci/host/pcie-iproc.c          | 135 +++++++++++++++++++++++----------
> >  drivers/pci/host/pcie-rcar.c           |  40 ++++++----
> >  drivers/pci/host/pcie-rockchip.c       |  24 ++++--
> >  drivers/pci/host/pcie-xilinx-nwl.c     |  34 ++++++---
> >  drivers/pci/host/pcie-xilinx.c         |  34 +++++----
> >  drivers/pci/pci-driver.c               |   2 +
> >  drivers/pci/probe.c                    | 105 ++++++++++++++++++-------
> >  drivers/pci/setup-irq.c                |  45 ++++++++---
> >  include/linux/pci.h                    |  12 +--
> >  31 files changed, 565 insertions(+), 293 deletions(-)
> 
> This is awesome!  I put these on pci/enumeration with the acks received so
> far.  I hope we can merge these for v4.13, so please take a look at your
> drivers and test if possible.

Thank you very much Bjorn. Yes it would help me a lot if CC'ed people
can help me test it (and also Matt's patch [PATCH 26] reworked
pci_fixup_irqs() on top of struct pci_host_bridge hooks so even if they
should not be affected all arches other than ARM/ARM64 should be tested
too - I have not extended the CC list since it is huge already).

Thanks !
Lorenzo

  reply	other threads:[~2017-06-20 14:44 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-08 14:13 [RFT PATCH v2 00/42] PCI: ARM/ARM64: remove pci_fixup_irqs() usage Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 01/42] PCI: xilinx-nwl: Remove nwl_pcie_enable_msi() unused bus parameter Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 02/42] drivers: pci: host: iproc: Convert link check to raw PCI config accessors Lorenzo Pieralisi
2017-06-08 15:56   ` Ray Jui
2017-06-08 16:36     ` Lorenzo Pieralisi
2017-06-11  4:12       ` Oza Oza
2017-06-12 16:13         ` Lorenzo Pieralisi
2017-06-12 17:40           ` Oza Oza
2017-06-12 18:52             ` Ray Jui
2017-06-13  8:22               ` Oza Oza
2017-06-13 17:18                 ` Ray Jui
2017-06-14 13:39                   ` Lorenzo Pieralisi
2017-06-21 14:39                     ` Oza Oza
2017-07-19 12:13                       ` Oza Oza
2017-07-19 17:48                         ` Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 03/42] drivers: pci: host: ftpci100: convert IRQ masking " Lorenzo Pieralisi
2017-06-16  9:05   ` Linus Walleij
2017-06-08 14:13 ` [RFT PATCH v2 04/42] PCI: Initialize bridge release function at bridge allocation Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 05/42] PCI: Add pci_free_host_bridge interface Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 06/42] PCI: Add devm_pci_alloc_host_bridge() interface Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 07/42] drivers: pci: host: ftpci100: Fix host bridge memory leakage Lorenzo Pieralisi
2017-06-16  9:02   ` Linus Walleij
2017-06-08 14:13 ` [RFT PATCH v2 08/42] drivers: pci: host: tegra: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 09/42] PCI: Introduce pci_scan_root_bus_bridge() Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 10/42] PCI: Make pci_register_host_bridge() PCI core internal Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 11/42] ARM: PCI: bios32: Convert PCI scan API to pci_scan_root_bus_bridge() Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 12/42] PCI: designware: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 13/42] PCI: aardvark: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 14/42] PCI: rcar: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 15/42] PCI: iproc: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 16/42] PCI: versatile: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 17/42] PCI: altera: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 18/42] PCI: xilinx: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 19/42] PCI: xgene: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 20/42] PCI: host-common: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 21/42] PCI: rockchip: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 22/42] PCI: xilinx-nwl: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 23/42] PCI: Remove pci_scan_root_bus_msi() Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 24/42] PCI: Build setup-irq.o on all arches Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 25/42] PCI: Add IRQ mapping function pointers to pci_host_bridge struct Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 26/42] PCI: Add pci_assign_irq() function and have pci_fixup_irqs() use it Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 27/42] OF/PCI: Update of_irq_parse_and_map_pci() comment Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 28/42] PCI: Add a call to pci_assign_irq() in pci_device_probe() Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 29/42] ARM: PCI: Remove pci_fixup_irqs() call for bios32 host controllers Lorenzo Pieralisi
2017-07-01 14:06   ` Lorenzo Pieralisi
2017-07-02 21:19     ` Bjorn Helgaas
2017-07-03 10:26       ` Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 30/42] PCI: tegra: Drop pci_fixup_irqs() Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 31/42] PCI: xilinx: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 32/42] PCI: rcar: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 33/42] PCI: iproc: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 34/42] PCI: designware-host: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 35/42] PCI: ftpci100: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 36/42] PCI: host-common: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 37/42] PCI: versatile: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 38/42] PCI: altera: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 39/42] PCI: xgene: Move to struct pci_host_bridge IRQ mapping functions Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 40/42] PCI: rockchip: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 41/42] PCI: xilinx-nwl: " Lorenzo Pieralisi
2017-06-08 14:13 ` [RFT PATCH v2 42/42] ARM64: PCI: Drop DT IRQ allocation from pcibios_alloc_irq() Lorenzo Pieralisi
2017-06-12 15:45 ` [RFT PATCH v2 00/42] PCI: ARM/ARM64: remove pci_fixup_irqs() usage Will Deacon
2017-06-12 16:20   ` Lorenzo Pieralisi
2017-06-12 23:58 ` Khuong Dinh
2017-06-19 23:12 ` Bjorn Helgaas
2017-06-20 14:44   ` Lorenzo Pieralisi [this message]
2017-06-21  8:39 ` Linus Walleij
2017-06-21  9:50   ` Lorenzo Pieralisi
2017-06-21 10:30   ` Lorenzo Pieralisi
2017-06-21 10:45     ` Lorenzo Pieralisi
2017-06-21 14:51       ` Linus Walleij
2017-06-21 15:14       ` Linus Walleij
2017-06-21 15:41         ` Lorenzo Pieralisi
2017-06-21 16:28           ` Linus Walleij

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=20170620144440.GB11351@red-moon \
    --to=lorenzo.pieralisi@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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: link
Be 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).