All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bhelgaas@google.com>
To: matt@masarand.com
Cc: linux-pci@vger.kernel.org
Subject: Re: [PATCH 04/18] Delayed powerpc setup of PCI IRQs to bus scan time
Date: Tue, 14 Oct 2014 12:20:48 -0600	[thread overview]
Message-ID: <20141014182048.GD10125@google.com> (raw)
In-Reply-To: <1412222866-21068-5-git-send-email-matt@masarand.com>

On Thu, Oct 02, 2014 at 05:07:32AM +0100, matt@masarand.com wrote:
> From: Matthew Minter <matt@masarand.com>
> 
> The powerpc PCI init code is currently initialising PCI device IRQ during
> the boot time pcibios phase. This results in devices which are connected
> after boot time not being asigned IRQs which can cause various problems.
> 
> This patch as part of its set fixes this be moving the IRQ initialisation
> into the PCI device enable code path so that it is run for boot time and
> hot-plugged devices alike.
> 
> Signed-off-by: Matthew Minter <matt@masarand.com>
> 
> ---
>  arch/powerpc/kernel/pci-common.c | 26 +++++++++++++-------------
>  1 file changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
> index b2814e2..a8be5a5 100644
> --- a/arch/powerpc/kernel/pci-common.c
> +++ b/arch/powerpc/kernel/pci-common.c
> @@ -217,7 +217,7 @@ struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node)
>   * If the interrupt is used, then gets the interrupt line from the
>   * openfirmware and sets it in the pci_dev and pci_config line.
>   */
> -static int pci_read_irq_line(struct pci_dev *pci_dev)
> +static int pci_read_irq_line(struct pci_dev *pci_dev, u8 pin)
>  {
>  	struct of_phandle_args oirq;
>  	unsigned int virq;
> @@ -229,7 +229,7 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)
>  #endif
>  	/* Try to get a mapping from the device-tree */
>  	if (of_irq_parse_pci(pci_dev, &oirq)) {
> -		u8 line, pin;
> +		u8 line;
>  
>  		/* If that fails, lets fallback to what is in the config
>  		 * space and map that through the default controller. We
> @@ -238,10 +238,6 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)
>  		 * either provide a proper interrupt tree or don't use this
>  		 * function.
>  		 */
> -		if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_PIN, &pin))
> -			return -1;
> -		if (pin == 0)
> -			return -1;
>  		if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &line) ||
>  		    line == 0xff || line == 0) {
>  			return -1;
> @@ -266,9 +262,16 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)
>  
>  	pr_debug(" Mapped to linux irq %d\n", virq);
>  
> -	pci_dev->irq = virq;
> +	return virq;
> +}
>  
> -	return 0;
> +int pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)

Should be static.

> +{
> +	/* Read default IRQs and fixup if necessary */
> +	int irq = pci_read_irq_line(dev, pin);
> +	if (ppc_md.pci_irq_fixup)
> +		ppc_md.pci_irq_fixup(dev);
> +	return irq;

The .pci_irq_fixup() can change dev->irq, so wouldn't you want to return
dev->irq, not irq, here?  Otherwise, pdev_assign_irq() (the caller of
pci_map_irq()) will overwrite the dev->irq value set by the fixup.

>  }
>  
>  /*
> @@ -766,6 +769,8 @@ int pci_proc_domain(struct pci_bus *bus)
>  
>  int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
>  {
> +	bridge->swizzle_irq = NULL;
> +	bridge->map_irq = pci_map_irq;
>  	if (ppc_md.pcibios_root_bridge_prepare)
>  		return ppc_md.pcibios_root_bridge_prepare(bridge);
>  
> @@ -968,11 +973,6 @@ static void pcibios_setup_device(struct pci_dev *dev)
>  	/* Additional platform DMA/iommu setup */
>  	if (ppc_md.pci_dma_dev_setup)
>  		ppc_md.pci_dma_dev_setup(dev);
> -
> -	/* Read default IRQs and fixup if necessary */
> -	pci_read_irq_line(dev);
> -	if (ppc_md.pci_irq_fixup)
> -		ppc_md.pci_irq_fixup(dev);
>  }
>  
>  int pcibios_add_device(struct pci_dev *dev)
> -- 
> 2.1.0
> 

  reply	other threads:[~2014-10-14 18:20 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-02  4:07 [PATCH V3] Delay allocation of PCI device IRQs from boot time until bus scan time to fix PCI hotplugging matt
2014-10-02  4:07 ` [PATCH 01/18] Added way to register deferred PCI IRQ assignment handlers matt
2014-10-02 10:33   ` Liviu Dudau
2014-10-14 23:25     ` Bjorn Helgaas
2014-10-14 17:15   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 02/18] Delayed x86 setup of PCI IRQs to bus scan time matt
2014-10-02 10:51   ` Liviu Dudau
2014-10-14 18:11   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 03/18] Delayed arm " matt
2014-10-14 18:14   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 04/18] Delayed powerpc " matt
2014-10-14 18:20   ` Bjorn Helgaas [this message]
2014-10-02  4:07 ` [PATCH 05/18] Delayed sh " matt
2014-10-14 18:25   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 06/18] Delayed alpha " matt
2014-10-14 18:27   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 07/18] Delayed cris " matt
2014-10-14 18:34   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 08/18] Delayed frv " matt
2014-10-14 18:37   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 09/18] Delayed m68k " matt
2014-10-14 18:38   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 10/18] Delayed microblaze " matt
2014-10-02  4:07 ` [PATCH 11/18] Delayed mips " matt
2014-10-02  4:07 ` [PATCH 12/18] Delayed mn10300 " matt
2014-10-14 18:46   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 13/18] Delayed sparc " matt
2014-10-14 18:51   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 14/18] Delayed tile " matt
2014-10-02  4:07 ` [PATCH 15/18] Delayed unicore32 " matt
2014-10-02  4:07 ` [PATCH 16/18] Disabled bus scan time PCI IRQ assignment on ia64 matt
2014-10-14 18:53   ` Bjorn Helgaas
2014-10-02  4:07 ` [PATCH 17/18] Disabled bus scan time PCI IRQ assignment on parisc matt
2014-10-02  4:07 ` [PATCH 18/18] Disabled bus scan time PCI IRQ assignment on s390 matt
2015-01-31 14:56 ` [PATCH V3] Delay allocation of PCI device IRQs from boot time until bus scan time to fix PCI hotplugging Bjorn Helgaas
  -- strict thread matches above, loose matches on Subject: below --
2014-10-02  3:50 matt
2014-10-02  3:50 ` [PATCH 04/18] Delayed powerpc setup of PCI IRQs to bus scan time matt

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=20141014182048.GD10125@google.com \
    --to=bhelgaas@google.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=matt@masarand.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.