All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bhelgaas@google.com>
To: Yijing Wang <wangyijing@huawei.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>,
	linux-pci@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>,
	linux-kernel@vger.kernel.org, Marc Zyngier <marc.zyngier@arm.com>,
	linux-arm-kernel@lists.infradead.org,
	Russell King <linux@arm.linux.org.uk>,
	x86@kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Tony Luck <tony.luck@intel.com>,
	linux-ia64@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>,
	Guan Xuetao <gxt@mprc.pku.edu.cn>,
	linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	Liviu Dudau <liviu@dudau.co.uk>, Arnd Bergmann <arnd@arndb.de>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>,
	sparclinux@vger.kernel.org
Subject: Re: [PATCH v4 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus()
Date: Mon, 2 Mar 2015 17:41:47 -0600	[thread overview]
Message-ID: <20150302234147.GA11978@google.com> (raw)
In-Reply-To: <1424938344-4017-2-git-send-email-wangyijing@huawei.com>

On Thu, Feb 26, 2015 at 04:11:55PM +0800, Yijing Wang wrote:
> Pci_bus_add_devices() should not be placed in pci_scan_bus().
> Now pci device will be added to driver core once its
> creation. All things left in pci_bus_add_devices() are
> driver attachment and other trivial sysfs things.
> Pci_scan_bus() should be the function responsible for
> scanning PCI devices, not including driver attachment.
> Other, some callers(m68k,unicore32,alpha) of pci_scan_bus()
> will call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus().
> 
> E.g.
> In m68k
> mcf_pci_init()
> 	pci_scan_bus()
> 		...
> 		pci_bus_add_devices() --- try to attach driver
> 	pci_fixup_irqs()
> 	pci_bus_size_bridges()
> 	pci_bus_assign_resources()
> 
> Above code flow make pci scan logic obscure, resources should
> be assigned correctly before attaching driver. Because
> pci_scan_bus() mostly be called in system boot path, when
> before drivers are loaded(in module_init), so no pci scan
> issues will occur. Most pci_scan_bus() callers additionally
> call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus(), we could rip out pci_bus_add_devices()
> for better code readability. After applied this patch,
> pci_scan_bus() should be used like:
> 
> pci_scan_bus() (mandatory)
> pci_fixup_irqs() (optional)
> pci_bus_size_bridges() (optional)
> pci_pci_bus_assign_resources() (optional)
> pci_bus_add_devices() (mandatory)
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> CC: "David S. Miller" <davem@davemloft.net>
> CC: Geert Uytterhoeven <geert@linux-m68k.org>
> CC: Guan Xuetao <gxt@mprc.pku.edu.cn>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> CC: Matt Turner <mattst88@gmail.com>
> CC: linux-alpha@vger.kernel.org
> CC: linux-m68k@lists.linux-m68k.org
> CC: sparclinux@vger.kernel.org
> ---
>  arch/alpha/kernel/sys_nautilus.c  |    1 +
>  arch/m68k/coldfire/pci.c          |    1 +
>  arch/sparc/kernel/pcic.c          |    2 ++
>  arch/unicore32/kernel/pci.c       |   11 +++--------
>  drivers/pci/hotplug/ibmphp_core.c |    6 ++++--
>  drivers/pci/probe.c               |    1 -
>  6 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c
> index 837c0fa..4ae4a40 100644
> --- a/arch/alpha/kernel/sys_nautilus.c
> +++ b/arch/alpha/kernel/sys_nautilus.c
> @@ -253,6 +253,7 @@ nautilus_init_pci(void)
>  	   for the root bus, so just clear it. */
>  	bus->self = NULL;
>  	pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
> +	pci_bus_add_devices(bus);
>  }
>  
>  /*
> diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
> index df96792..d45f087 100644
> --- a/arch/m68k/coldfire/pci.c
> +++ b/arch/m68k/coldfire/pci.c
> @@ -319,6 +319,7 @@ static int __init mcf_pci_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, mcf_pci_map_irq);
>  	pci_bus_size_bridges(rootbus);
>  	pci_bus_assign_resources(rootbus);
> +	pci_bus_add_devices(rootbus);
>  	return 0;
>  }
>  
> diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
> index 6cc78c2..7a82fe2 100644
> --- a/arch/sparc/kernel/pcic.c
> +++ b/arch/sparc/kernel/pcic.c
> @@ -391,6 +391,8 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
>  	struct linux_pbm_info *pbm = &pcic->pbm;
>  
>  	pbm->pci_bus = pci_scan_bus(pbm->pci_first_busno, &pcic_ops, pbm);
> +	if (pbm->pci_bus)
> +		pci_bus_add_devices(pbm->pci_bus);
>  #if 0 /* deadwood transplanted from sparc64 */
>  	pci_fill_in_pbm_cookies(pbm->pci_bus, pbm, pbm->prom_node);
>  	pci_record_assignments(pbm, pbm->pci_bus);

This is correct, but it should look like this instead:

    if (!pbm->pci_bus)
      return;
  #if 0 /* deadwood ... */
  ...
  #endif
    pci_bus_add_devices(pbm->pci_bus);
  }

That way the mainline code is the normal path, and pci_bus_add_devices() is
in the correct place even if the "deadwood" code is resurrected.


> diff --git a/arch/unicore32/kernel/pci.c b/arch/unicore32/kernel/pci.c
> index 374a055..3d82024 100644
> --- a/arch/unicore32/kernel/pci.c
> +++ b/arch/unicore32/kernel/pci.c
> @@ -266,17 +266,12 @@ static int __init pci_common_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, pci_puv3_map_irq);
>  
>  	if (!pci_has_flag(PCI_PROBE_ONLY)) {
> -		/*
> -		 * Size the bridge windows.
> -		 */
> +		/* Size the bridge windows. */
>  		pci_bus_size_bridges(puv3_bus);
> -
> -		/*
> -		 * Assign resources.
> -		 */
> +		/* Assign resources. */
>  		pci_bus_assign_resources(puv3_bus);
>  	}
> -
> +	pci_bus_add_devices(puv3_bus);
>  	return 0;
>  }
>  subsys_initcall(pci_common_init);
> diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
> index 96c5c72..86e3bfd 100644
> --- a/drivers/pci/hotplug/ibmphp_core.c
> +++ b/drivers/pci/hotplug/ibmphp_core.c
> @@ -738,7 +738,7 @@ static void ibm_unconfigure_device(struct pci_func *func)
>   */
>  static u8 bus_structure_fixup(u8 busno)
>  {
> -	struct pci_bus *bus;
> +	struct pci_bus *bus, *b;
>  	struct pci_dev *dev;
>  	u16 l;
>  
> @@ -765,7 +765,9 @@ static u8 bus_structure_fixup(u8 busno)
>  					(l != 0x0000) && (l != 0xffff)) {
>  			debug("%s - Inside bus_structure_fixup()\n",
>  							__func__);
> -			pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			b = pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			if (b)
> +				pci_bus_add_devices(b);

Use this:

    if (!b)
      continue;
    pci_bus_add_devices(b);

for the same reason as above.

>  			break;
>  		}
>  	}
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 8d2f400..88604f2 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2123,7 +2123,6 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
>  	b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
>  	if (b) {
>  		pci_scan_child_bus(b);
> -		pci_bus_add_devices(b);
>  	} else {
>  		pci_free_resource_list(&resources);
>  	}
> -- 
> 1.7.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <bhelgaas@google.com>
To: Yijing Wang <wangyijing@huawei.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>,
	linux-pci@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>,
	linux-kernel@vger.kernel.org, Marc Zyngier <marc.zyngier@arm.com>,
	linux-arm-kernel@lists.infradead.org,
	Russell King <linux@arm.linux.org.uk>,
	x86@kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Tony Luck <tony.luck@intel.com>,
	linux-ia64@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>,
	Guan Xuetao <gxt@mprc.pku.edu.cn>,
	linux-alpha@vger.kernel.org, linux-m68k@vger.kernel.org,
	Liviu Dudau <liviu@dudau.co.uk>, Arnd Bergmann <arnd@arndb.de>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>,
	sparclinux@vger.kernel.org
Subject: Re: [PATCH v4 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus()
Date: Mon, 02 Mar 2015 23:41:47 +0000	[thread overview]
Message-ID: <20150302234147.GA11978@google.com> (raw)
In-Reply-To: <1424938344-4017-2-git-send-email-wangyijing@huawei.com>

On Thu, Feb 26, 2015 at 04:11:55PM +0800, Yijing Wang wrote:
> Pci_bus_add_devices() should not be placed in pci_scan_bus().
> Now pci device will be added to driver core once its
> creation. All things left in pci_bus_add_devices() are
> driver attachment and other trivial sysfs things.
> Pci_scan_bus() should be the function responsible for
> scanning PCI devices, not including driver attachment.
> Other, some callers(m68k,unicore32,alpha) of pci_scan_bus()
> will call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus().
> 
> E.g.
> In m68k
> mcf_pci_init()
> 	pci_scan_bus()
> 		...
> 		pci_bus_add_devices() --- try to attach driver
> 	pci_fixup_irqs()
> 	pci_bus_size_bridges()
> 	pci_bus_assign_resources()
> 
> Above code flow make pci scan logic obscure, resources should
> be assigned correctly before attaching driver. Because
> pci_scan_bus() mostly be called in system boot path, when
> before drivers are loaded(in module_init), so no pci scan
> issues will occur. Most pci_scan_bus() callers additionally
> call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus(), we could rip out pci_bus_add_devices()
> for better code readability. After applied this patch,
> pci_scan_bus() should be used like:
> 
> pci_scan_bus() (mandatory)
> pci_fixup_irqs() (optional)
> pci_bus_size_bridges() (optional)
> pci_pci_bus_assign_resources() (optional)
> pci_bus_add_devices() (mandatory)
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> CC: "David S. Miller" <davem@davemloft.net>
> CC: Geert Uytterhoeven <geert@linux-m68k.org>
> CC: Guan Xuetao <gxt@mprc.pku.edu.cn>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> CC: Matt Turner <mattst88@gmail.com>
> CC: linux-alpha@vger.kernel.org
> CC: linux-m68k@lists.linux-m68k.org
> CC: sparclinux@vger.kernel.org
> ---
>  arch/alpha/kernel/sys_nautilus.c  |    1 +
>  arch/m68k/coldfire/pci.c          |    1 +
>  arch/sparc/kernel/pcic.c          |    2 ++
>  arch/unicore32/kernel/pci.c       |   11 +++--------
>  drivers/pci/hotplug/ibmphp_core.c |    6 ++++--
>  drivers/pci/probe.c               |    1 -
>  6 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c
> index 837c0fa..4ae4a40 100644
> --- a/arch/alpha/kernel/sys_nautilus.c
> +++ b/arch/alpha/kernel/sys_nautilus.c
> @@ -253,6 +253,7 @@ nautilus_init_pci(void)
>  	   for the root bus, so just clear it. */
>  	bus->self = NULL;
>  	pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
> +	pci_bus_add_devices(bus);
>  }
>  
>  /*
> diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
> index df96792..d45f087 100644
> --- a/arch/m68k/coldfire/pci.c
> +++ b/arch/m68k/coldfire/pci.c
> @@ -319,6 +319,7 @@ static int __init mcf_pci_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, mcf_pci_map_irq);
>  	pci_bus_size_bridges(rootbus);
>  	pci_bus_assign_resources(rootbus);
> +	pci_bus_add_devices(rootbus);
>  	return 0;
>  }
>  
> diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
> index 6cc78c2..7a82fe2 100644
> --- a/arch/sparc/kernel/pcic.c
> +++ b/arch/sparc/kernel/pcic.c
> @@ -391,6 +391,8 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
>  	struct linux_pbm_info *pbm = &pcic->pbm;
>  
>  	pbm->pci_bus = pci_scan_bus(pbm->pci_first_busno, &pcic_ops, pbm);
> +	if (pbm->pci_bus)
> +		pci_bus_add_devices(pbm->pci_bus);
>  #if 0 /* deadwood transplanted from sparc64 */
>  	pci_fill_in_pbm_cookies(pbm->pci_bus, pbm, pbm->prom_node);
>  	pci_record_assignments(pbm, pbm->pci_bus);

This is correct, but it should look like this instead:

    if (!pbm->pci_bus)
      return;
  #if 0 /* deadwood ... */
  ...
  #endif
    pci_bus_add_devices(pbm->pci_bus);
  }

That way the mainline code is the normal path, and pci_bus_add_devices() is
in the correct place even if the "deadwood" code is resurrected.


> diff --git a/arch/unicore32/kernel/pci.c b/arch/unicore32/kernel/pci.c
> index 374a055..3d82024 100644
> --- a/arch/unicore32/kernel/pci.c
> +++ b/arch/unicore32/kernel/pci.c
> @@ -266,17 +266,12 @@ static int __init pci_common_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, pci_puv3_map_irq);
>  
>  	if (!pci_has_flag(PCI_PROBE_ONLY)) {
> -		/*
> -		 * Size the bridge windows.
> -		 */
> +		/* Size the bridge windows. */
>  		pci_bus_size_bridges(puv3_bus);
> -
> -		/*
> -		 * Assign resources.
> -		 */
> +		/* Assign resources. */
>  		pci_bus_assign_resources(puv3_bus);
>  	}
> -
> +	pci_bus_add_devices(puv3_bus);
>  	return 0;
>  }
>  subsys_initcall(pci_common_init);
> diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
> index 96c5c72..86e3bfd 100644
> --- a/drivers/pci/hotplug/ibmphp_core.c
> +++ b/drivers/pci/hotplug/ibmphp_core.c
> @@ -738,7 +738,7 @@ static void ibm_unconfigure_device(struct pci_func *func)
>   */
>  static u8 bus_structure_fixup(u8 busno)
>  {
> -	struct pci_bus *bus;
> +	struct pci_bus *bus, *b;
>  	struct pci_dev *dev;
>  	u16 l;
>  
> @@ -765,7 +765,9 @@ static u8 bus_structure_fixup(u8 busno)
>  					(l != 0x0000) && (l != 0xffff)) {
>  			debug("%s - Inside bus_structure_fixup()\n",
>  							__func__);
> -			pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			b = pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			if (b)
> +				pci_bus_add_devices(b);

Use this:

    if (!b)
      continue;
    pci_bus_add_devices(b);

for the same reason as above.

>  			break;
>  		}
>  	}
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 8d2f400..88604f2 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2123,7 +2123,6 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
>  	b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
>  	if (b) {
>  		pci_scan_child_bus(b);
> -		pci_bus_add_devices(b);
>  	} else {
>  		pci_free_resource_list(&resources);
>  	}
> -- 
> 1.7.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <bhelgaas@google.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus()
Date: Mon, 02 Mar 2015 23:41:47 +0000	[thread overview]
Message-ID: <20150302234147.GA11978@google.com> (raw)
In-Reply-To: <1424938344-4017-2-git-send-email-wangyijing@huawei.com>

On Thu, Feb 26, 2015 at 04:11:55PM +0800, Yijing Wang wrote:
> Pci_bus_add_devices() should not be placed in pci_scan_bus().
> Now pci device will be added to driver core once its
> creation. All things left in pci_bus_add_devices() are
> driver attachment and other trivial sysfs things.
> Pci_scan_bus() should be the function responsible for
> scanning PCI devices, not including driver attachment.
> Other, some callers(m68k,unicore32,alpha) of pci_scan_bus()
> will call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus().
> 
> E.g.
> In m68k
> mcf_pci_init()
> 	pci_scan_bus()
> 		...
> 		pci_bus_add_devices() --- try to attach driver
> 	pci_fixup_irqs()
> 	pci_bus_size_bridges()
> 	pci_bus_assign_resources()
> 
> Above code flow make pci scan logic obscure, resources should
> be assigned correctly before attaching driver. Because
> pci_scan_bus() mostly be called in system boot path, when
> before drivers are loaded(in module_init), so no pci scan
> issues will occur. Most pci_scan_bus() callers additionally
> call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus(), we could rip out pci_bus_add_devices()
> for better code readability. After applied this patch,
> pci_scan_bus() should be used like:
> 
> pci_scan_bus() (mandatory)
> pci_fixup_irqs() (optional)
> pci_bus_size_bridges() (optional)
> pci_pci_bus_assign_resources() (optional)
> pci_bus_add_devices() (mandatory)
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> CC: "David S. Miller" <davem@davemloft.net>
> CC: Geert Uytterhoeven <geert@linux-m68k.org>
> CC: Guan Xuetao <gxt@mprc.pku.edu.cn>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> CC: Matt Turner <mattst88@gmail.com>
> CC: linux-alpha@vger.kernel.org
> CC: linux-m68k@lists.linux-m68k.org
> CC: sparclinux@vger.kernel.org
> ---
>  arch/alpha/kernel/sys_nautilus.c  |    1 +
>  arch/m68k/coldfire/pci.c          |    1 +
>  arch/sparc/kernel/pcic.c          |    2 ++
>  arch/unicore32/kernel/pci.c       |   11 +++--------
>  drivers/pci/hotplug/ibmphp_core.c |    6 ++++--
>  drivers/pci/probe.c               |    1 -
>  6 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c
> index 837c0fa..4ae4a40 100644
> --- a/arch/alpha/kernel/sys_nautilus.c
> +++ b/arch/alpha/kernel/sys_nautilus.c
> @@ -253,6 +253,7 @@ nautilus_init_pci(void)
>  	   for the root bus, so just clear it. */
>  	bus->self = NULL;
>  	pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
> +	pci_bus_add_devices(bus);
>  }
>  
>  /*
> diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
> index df96792..d45f087 100644
> --- a/arch/m68k/coldfire/pci.c
> +++ b/arch/m68k/coldfire/pci.c
> @@ -319,6 +319,7 @@ static int __init mcf_pci_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, mcf_pci_map_irq);
>  	pci_bus_size_bridges(rootbus);
>  	pci_bus_assign_resources(rootbus);
> +	pci_bus_add_devices(rootbus);
>  	return 0;
>  }
>  
> diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
> index 6cc78c2..7a82fe2 100644
> --- a/arch/sparc/kernel/pcic.c
> +++ b/arch/sparc/kernel/pcic.c
> @@ -391,6 +391,8 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
>  	struct linux_pbm_info *pbm = &pcic->pbm;
>  
>  	pbm->pci_bus = pci_scan_bus(pbm->pci_first_busno, &pcic_ops, pbm);
> +	if (pbm->pci_bus)
> +		pci_bus_add_devices(pbm->pci_bus);
>  #if 0 /* deadwood transplanted from sparc64 */
>  	pci_fill_in_pbm_cookies(pbm->pci_bus, pbm, pbm->prom_node);
>  	pci_record_assignments(pbm, pbm->pci_bus);

This is correct, but it should look like this instead:

    if (!pbm->pci_bus)
      return;
  #if 0 /* deadwood ... */
  ...
  #endif
    pci_bus_add_devices(pbm->pci_bus);
  }

That way the mainline code is the normal path, and pci_bus_add_devices() is
in the correct place even if the "deadwood" code is resurrected.


> diff --git a/arch/unicore32/kernel/pci.c b/arch/unicore32/kernel/pci.c
> index 374a055..3d82024 100644
> --- a/arch/unicore32/kernel/pci.c
> +++ b/arch/unicore32/kernel/pci.c
> @@ -266,17 +266,12 @@ static int __init pci_common_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, pci_puv3_map_irq);
>  
>  	if (!pci_has_flag(PCI_PROBE_ONLY)) {
> -		/*
> -		 * Size the bridge windows.
> -		 */
> +		/* Size the bridge windows. */
>  		pci_bus_size_bridges(puv3_bus);
> -
> -		/*
> -		 * Assign resources.
> -		 */
> +		/* Assign resources. */
>  		pci_bus_assign_resources(puv3_bus);
>  	}
> -
> +	pci_bus_add_devices(puv3_bus);
>  	return 0;
>  }
>  subsys_initcall(pci_common_init);
> diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
> index 96c5c72..86e3bfd 100644
> --- a/drivers/pci/hotplug/ibmphp_core.c
> +++ b/drivers/pci/hotplug/ibmphp_core.c
> @@ -738,7 +738,7 @@ static void ibm_unconfigure_device(struct pci_func *func)
>   */
>  static u8 bus_structure_fixup(u8 busno)
>  {
> -	struct pci_bus *bus;
> +	struct pci_bus *bus, *b;
>  	struct pci_dev *dev;
>  	u16 l;
>  
> @@ -765,7 +765,9 @@ static u8 bus_structure_fixup(u8 busno)
>  					(l != 0x0000) && (l != 0xffff)) {
>  			debug("%s - Inside bus_structure_fixup()\n",
>  							__func__);
> -			pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			b = pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			if (b)
> +				pci_bus_add_devices(b);

Use this:

    if (!b)
      continue;
    pci_bus_add_devices(b);

for the same reason as above.

>  			break;
>  		}
>  	}
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 8d2f400..88604f2 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2123,7 +2123,6 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
>  	b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
>  	if (b) {
>  		pci_scan_child_bus(b);
> -		pci_bus_add_devices(b);
>  	} else {
>  		pci_free_resource_list(&resources);
>  	}
> -- 
> 1.7.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: bhelgaas@google.com (Bjorn Helgaas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus()
Date: Mon, 2 Mar 2015 17:41:47 -0600	[thread overview]
Message-ID: <20150302234147.GA11978@google.com> (raw)
In-Reply-To: <1424938344-4017-2-git-send-email-wangyijing@huawei.com>

On Thu, Feb 26, 2015 at 04:11:55PM +0800, Yijing Wang wrote:
> Pci_bus_add_devices() should not be placed in pci_scan_bus().
> Now pci device will be added to driver core once its
> creation. All things left in pci_bus_add_devices() are
> driver attachment and other trivial sysfs things.
> Pci_scan_bus() should be the function responsible for
> scanning PCI devices, not including driver attachment.
> Other, some callers(m68k,unicore32,alpha) of pci_scan_bus()
> will call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus().
> 
> E.g.
> In m68k
> mcf_pci_init()
> 	pci_scan_bus()
> 		...
> 		pci_bus_add_devices() --- try to attach driver
> 	pci_fixup_irqs()
> 	pci_bus_size_bridges()
> 	pci_bus_assign_resources()
> 
> Above code flow make pci scan logic obscure, resources should
> be assigned correctly before attaching driver. Because
> pci_scan_bus() mostly be called in system boot path, when
> before drivers are loaded(in module_init), so no pci scan
> issues will occur. Most pci_scan_bus() callers additionally
> call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus(), we could rip out pci_bus_add_devices()
> for better code readability. After applied this patch,
> pci_scan_bus() should be used like:
> 
> pci_scan_bus() (mandatory)
> pci_fixup_irqs() (optional)
> pci_bus_size_bridges() (optional)
> pci_pci_bus_assign_resources() (optional)
> pci_bus_add_devices() (mandatory)
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> CC: "David S. Miller" <davem@davemloft.net>
> CC: Geert Uytterhoeven <geert@linux-m68k.org>
> CC: Guan Xuetao <gxt@mprc.pku.edu.cn>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> CC: Matt Turner <mattst88@gmail.com>
> CC: linux-alpha at vger.kernel.org
> CC: linux-m68k at lists.linux-m68k.org
> CC: sparclinux at vger.kernel.org
> ---
>  arch/alpha/kernel/sys_nautilus.c  |    1 +
>  arch/m68k/coldfire/pci.c          |    1 +
>  arch/sparc/kernel/pcic.c          |    2 ++
>  arch/unicore32/kernel/pci.c       |   11 +++--------
>  drivers/pci/hotplug/ibmphp_core.c |    6 ++++--
>  drivers/pci/probe.c               |    1 -
>  6 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c
> index 837c0fa..4ae4a40 100644
> --- a/arch/alpha/kernel/sys_nautilus.c
> +++ b/arch/alpha/kernel/sys_nautilus.c
> @@ -253,6 +253,7 @@ nautilus_init_pci(void)
>  	   for the root bus, so just clear it. */
>  	bus->self = NULL;
>  	pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
> +	pci_bus_add_devices(bus);
>  }
>  
>  /*
> diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
> index df96792..d45f087 100644
> --- a/arch/m68k/coldfire/pci.c
> +++ b/arch/m68k/coldfire/pci.c
> @@ -319,6 +319,7 @@ static int __init mcf_pci_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, mcf_pci_map_irq);
>  	pci_bus_size_bridges(rootbus);
>  	pci_bus_assign_resources(rootbus);
> +	pci_bus_add_devices(rootbus);
>  	return 0;
>  }
>  
> diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
> index 6cc78c2..7a82fe2 100644
> --- a/arch/sparc/kernel/pcic.c
> +++ b/arch/sparc/kernel/pcic.c
> @@ -391,6 +391,8 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
>  	struct linux_pbm_info *pbm = &pcic->pbm;
>  
>  	pbm->pci_bus = pci_scan_bus(pbm->pci_first_busno, &pcic_ops, pbm);
> +	if (pbm->pci_bus)
> +		pci_bus_add_devices(pbm->pci_bus);
>  #if 0 /* deadwood transplanted from sparc64 */
>  	pci_fill_in_pbm_cookies(pbm->pci_bus, pbm, pbm->prom_node);
>  	pci_record_assignments(pbm, pbm->pci_bus);

This is correct, but it should look like this instead:

    if (!pbm->pci_bus)
      return;
  #if 0 /* deadwood ... */
  ...
  #endif
    pci_bus_add_devices(pbm->pci_bus);
  }

That way the mainline code is the normal path, and pci_bus_add_devices() is
in the correct place even if the "deadwood" code is resurrected.


> diff --git a/arch/unicore32/kernel/pci.c b/arch/unicore32/kernel/pci.c
> index 374a055..3d82024 100644
> --- a/arch/unicore32/kernel/pci.c
> +++ b/arch/unicore32/kernel/pci.c
> @@ -266,17 +266,12 @@ static int __init pci_common_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, pci_puv3_map_irq);
>  
>  	if (!pci_has_flag(PCI_PROBE_ONLY)) {
> -		/*
> -		 * Size the bridge windows.
> -		 */
> +		/* Size the bridge windows. */
>  		pci_bus_size_bridges(puv3_bus);
> -
> -		/*
> -		 * Assign resources.
> -		 */
> +		/* Assign resources. */
>  		pci_bus_assign_resources(puv3_bus);
>  	}
> -
> +	pci_bus_add_devices(puv3_bus);
>  	return 0;
>  }
>  subsys_initcall(pci_common_init);
> diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
> index 96c5c72..86e3bfd 100644
> --- a/drivers/pci/hotplug/ibmphp_core.c
> +++ b/drivers/pci/hotplug/ibmphp_core.c
> @@ -738,7 +738,7 @@ static void ibm_unconfigure_device(struct pci_func *func)
>   */
>  static u8 bus_structure_fixup(u8 busno)
>  {
> -	struct pci_bus *bus;
> +	struct pci_bus *bus, *b;
>  	struct pci_dev *dev;
>  	u16 l;
>  
> @@ -765,7 +765,9 @@ static u8 bus_structure_fixup(u8 busno)
>  					(l != 0x0000) && (l != 0xffff)) {
>  			debug("%s - Inside bus_structure_fixup()\n",
>  							__func__);
> -			pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			b = pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			if (b)
> +				pci_bus_add_devices(b);

Use this:

    if (!b)
      continue;
    pci_bus_add_devices(b);

for the same reason as above.

>  			break;
>  		}
>  	}
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 8d2f400..88604f2 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2123,7 +2123,6 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
>  	b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
>  	if (b) {
>  		pci_scan_child_bus(b);
> -		pci_bus_add_devices(b);
>  	} else {
>  		pci_free_resource_list(&resources);
>  	}
> -- 
> 1.7.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <bhelgaas@google.com>
To: Yijing Wang <wangyijing@huawei.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>,
	linux-pci@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>,
	linux-kernel@vger.kernel.org, Marc Zyngier <marc.zyngier@arm.com>,
	linux-arm-kernel@lists.infradead.org,
	Russell King <linux@arm.linux.org.uk>,
	x86@kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Tony Luck <tony.luck@intel.com>,
	linux-ia64@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>,
	Guan Xuetao <gxt@mprc.pku.edu.cn>,
	linux-alpha@vger.kernel.org, linux-m68k@vger.kernel.org,
	Liviu Dudau <liviu@dudau.co.uk>, Arnd Bergmann <arnd@arndb.de>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>,
	sparclinux@vger.kernel.org
Subject: Re: [PATCH v4 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus()
Date: Mon, 2 Mar 2015 17:41:47 -0600	[thread overview]
Message-ID: <20150302234147.GA11978@google.com> (raw)
In-Reply-To: <1424938344-4017-2-git-send-email-wangyijing@huawei.com>

On Thu, Feb 26, 2015 at 04:11:55PM +0800, Yijing Wang wrote:
> Pci_bus_add_devices() should not be placed in pci_scan_bus().
> Now pci device will be added to driver core once its
> creation. All things left in pci_bus_add_devices() are
> driver attachment and other trivial sysfs things.
> Pci_scan_bus() should be the function responsible for
> scanning PCI devices, not including driver attachment.
> Other, some callers(m68k,unicore32,alpha) of pci_scan_bus()
> will call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus().
> 
> E.g.
> In m68k
> mcf_pci_init()
> 	pci_scan_bus()
> 		...
> 		pci_bus_add_devices() --- try to attach driver
> 	pci_fixup_irqs()
> 	pci_bus_size_bridges()
> 	pci_bus_assign_resources()
> 
> Above code flow make pci scan logic obscure, resources should
> be assigned correctly before attaching driver. Because
> pci_scan_bus() mostly be called in system boot path, when
> before drivers are loaded(in module_init), so no pci scan
> issues will occur. Most pci_scan_bus() callers additionally
> call pci_bus_size_bridges() and pci_bus_assign_resources()
> after pci_scan_bus(), we could rip out pci_bus_add_devices()
> for better code readability. After applied this patch,
> pci_scan_bus() should be used like:
> 
> pci_scan_bus() (mandatory)
> pci_fixup_irqs() (optional)
> pci_bus_size_bridges() (optional)
> pci_pci_bus_assign_resources() (optional)
> pci_bus_add_devices() (mandatory)
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> CC: "David S. Miller" <davem@davemloft.net>
> CC: Geert Uytterhoeven <geert@linux-m68k.org>
> CC: Guan Xuetao <gxt@mprc.pku.edu.cn>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> CC: Matt Turner <mattst88@gmail.com>
> CC: linux-alpha@vger.kernel.org
> CC: linux-m68k@lists.linux-m68k.org
> CC: sparclinux@vger.kernel.org
> ---
>  arch/alpha/kernel/sys_nautilus.c  |    1 +
>  arch/m68k/coldfire/pci.c          |    1 +
>  arch/sparc/kernel/pcic.c          |    2 ++
>  arch/unicore32/kernel/pci.c       |   11 +++--------
>  drivers/pci/hotplug/ibmphp_core.c |    6 ++++--
>  drivers/pci/probe.c               |    1 -
>  6 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c
> index 837c0fa..4ae4a40 100644
> --- a/arch/alpha/kernel/sys_nautilus.c
> +++ b/arch/alpha/kernel/sys_nautilus.c
> @@ -253,6 +253,7 @@ nautilus_init_pci(void)
>  	   for the root bus, so just clear it. */
>  	bus->self = NULL;
>  	pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
> +	pci_bus_add_devices(bus);
>  }
>  
>  /*
> diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
> index df96792..d45f087 100644
> --- a/arch/m68k/coldfire/pci.c
> +++ b/arch/m68k/coldfire/pci.c
> @@ -319,6 +319,7 @@ static int __init mcf_pci_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, mcf_pci_map_irq);
>  	pci_bus_size_bridges(rootbus);
>  	pci_bus_assign_resources(rootbus);
> +	pci_bus_add_devices(rootbus);
>  	return 0;
>  }
>  
> diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
> index 6cc78c2..7a82fe2 100644
> --- a/arch/sparc/kernel/pcic.c
> +++ b/arch/sparc/kernel/pcic.c
> @@ -391,6 +391,8 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
>  	struct linux_pbm_info *pbm = &pcic->pbm;
>  
>  	pbm->pci_bus = pci_scan_bus(pbm->pci_first_busno, &pcic_ops, pbm);
> +	if (pbm->pci_bus)
> +		pci_bus_add_devices(pbm->pci_bus);
>  #if 0 /* deadwood transplanted from sparc64 */
>  	pci_fill_in_pbm_cookies(pbm->pci_bus, pbm, pbm->prom_node);
>  	pci_record_assignments(pbm, pbm->pci_bus);

This is correct, but it should look like this instead:

    if (!pbm->pci_bus)
      return;
  #if 0 /* deadwood ... */
  ...
  #endif
    pci_bus_add_devices(pbm->pci_bus);
  }

That way the mainline code is the normal path, and pci_bus_add_devices() is
in the correct place even if the "deadwood" code is resurrected.


> diff --git a/arch/unicore32/kernel/pci.c b/arch/unicore32/kernel/pci.c
> index 374a055..3d82024 100644
> --- a/arch/unicore32/kernel/pci.c
> +++ b/arch/unicore32/kernel/pci.c
> @@ -266,17 +266,12 @@ static int __init pci_common_init(void)
>  	pci_fixup_irqs(pci_common_swizzle, pci_puv3_map_irq);
>  
>  	if (!pci_has_flag(PCI_PROBE_ONLY)) {
> -		/*
> -		 * Size the bridge windows.
> -		 */
> +		/* Size the bridge windows. */
>  		pci_bus_size_bridges(puv3_bus);
> -
> -		/*
> -		 * Assign resources.
> -		 */
> +		/* Assign resources. */
>  		pci_bus_assign_resources(puv3_bus);
>  	}
> -
> +	pci_bus_add_devices(puv3_bus);
>  	return 0;
>  }
>  subsys_initcall(pci_common_init);
> diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
> index 96c5c72..86e3bfd 100644
> --- a/drivers/pci/hotplug/ibmphp_core.c
> +++ b/drivers/pci/hotplug/ibmphp_core.c
> @@ -738,7 +738,7 @@ static void ibm_unconfigure_device(struct pci_func *func)
>   */
>  static u8 bus_structure_fixup(u8 busno)
>  {
> -	struct pci_bus *bus;
> +	struct pci_bus *bus, *b;
>  	struct pci_dev *dev;
>  	u16 l;
>  
> @@ -765,7 +765,9 @@ static u8 bus_structure_fixup(u8 busno)
>  					(l != 0x0000) && (l != 0xffff)) {
>  			debug("%s - Inside bus_structure_fixup()\n",
>  							__func__);
> -			pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			b = pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL);
> +			if (b)
> +				pci_bus_add_devices(b);

Use this:

    if (!b)
      continue;
    pci_bus_add_devices(b);

for the same reason as above.

>  			break;
>  		}
>  	}
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 8d2f400..88604f2 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2123,7 +2123,6 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
>  	b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
>  	if (b) {
>  		pci_scan_child_bus(b);
> -		pci_bus_add_devices(b);
>  	} else {
>  		pci_free_resource_list(&resources);
>  	}
> -- 
> 1.7.1
> 

  reply	other threads:[~2015-03-02 23:41 UTC|newest]

Thread overview: 343+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-26  8:11 [PATCH v4 00/30] Refine PCI scan interfaces and make generic pci host bridge Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11 ` [PATCH v4 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus() Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-03-02 23:41   ` Bjorn Helgaas [this message]
2015-03-02 23:41     ` Bjorn Helgaas
2015-03-02 23:41     ` Bjorn Helgaas
2015-03-02 23:41     ` Bjorn Helgaas
2015-03-02 23:41     ` Bjorn Helgaas
2015-03-03  1:12     ` Yijing Wang
2015-03-03  1:12       ` Yijing Wang
2015-03-03  1:12       ` Yijing Wang
2015-03-03  1:12       ` Yijing Wang
2015-03-03  1:12       ` Yijing Wang
2015-03-03  1:12       ` Yijing Wang
2015-03-03  1:12     ` Yijing Wang
2015-02-26  8:11 ` [PATCH v4 02/30] PCI: Rip out pci_bus_add_devices() from pci_scan_root_bus() Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-03-03  1:57   ` Bjorn Helgaas
2015-03-03  1:57     ` Bjorn Helgaas
2015-03-03  1:57     ` Bjorn Helgaas
2015-03-03  1:57     ` Bjorn Helgaas
2015-03-03  1:57     ` Bjorn Helgaas
2015-03-03  3:09     ` Yijing Wang
2015-03-03  3:09       ` Yijing Wang
2015-03-03  3:09       ` Yijing Wang
2015-03-03  3:09       ` Yijing Wang
2015-03-03  3:09       ` Yijing Wang
2015-03-03  3:09       ` Yijing Wang
2015-03-03  3:09     ` Yijing Wang
2015-03-03  1:57   ` Bjorn Helgaas
2015-02-26  8:11 ` [PATCH v4 03/30] xen/PCI: Don't use deprecated function pci_scan_bus_parented() Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-03-03  2:02   ` Bjorn Helgaas
2015-03-03  2:02     ` Bjorn Helgaas
2015-03-03  2:02     ` Bjorn Helgaas
2015-03-03  2:02     ` Bjorn Helgaas
2015-03-03  3:33     ` Yijing Wang
2015-03-03  3:33     ` Yijing Wang
2015-03-03  3:33       ` Yijing Wang
2015-03-03  3:33       ` Yijing Wang
2015-03-03  3:33       ` Yijing Wang
2015-03-03  3:33       ` Yijing Wang
2015-03-03  3:33     ` Yijing Wang
2015-03-03  2:02   ` Bjorn Helgaas
2015-03-03  2:02   ` Bjorn Helgaas
2015-02-26  8:11 ` [PATCH v4 04/30] PCI: Remove deprecated pci_scan_bus_parented() Yijing Wang
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11 ` [PATCH v4 05/30] PCI: Rename pci_scan_bus() to pci_scan_bus_legacy() Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-02-26  8:11   ` Yijing Wang
2015-03-03  2:06   ` Bjorn Helgaas
2015-03-03  2:06     ` Bjorn Helgaas
2015-03-03  2:06     ` Bjorn Helgaas
2015-03-03  2:06     ` Bjorn Helgaas
2015-03-03  3:41     ` Yijing Wang
2015-03-03  3:41       ` Yijing Wang
2015-03-03  3:41       ` Yijing Wang
2015-03-03  3:41       ` Yijing Wang
2015-03-03  3:41       ` Yijing Wang
2015-03-03  2:06   ` Bjorn Helgaas
2015-02-26  8:11 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 06/30] PCI: Combine PCI domain and bus number in u32 arg Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 07/30] PCI: Pass PCI domain number combined with root bus number Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 08/30] PCI: Introduce pci_host_assign_domain_nr() to assign domain Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 09/30] PCI: Separate pci_host_bridge creation out of pci_create_root_bus() Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  2:37   ` Bjorn Helgaas
2015-03-03  2:37     ` Bjorn Helgaas
2015-03-03  2:37     ` Bjorn Helgaas
2015-03-03  2:37     ` Bjorn Helgaas
2015-03-03  3:46     ` Yijing Wang
2015-03-03  3:46     ` Yijing Wang
2015-03-03  3:46       ` Yijing Wang
2015-03-03  3:46       ` Yijing Wang
2015-03-03  3:46       ` Yijing Wang
2015-03-03  3:46       ` Yijing Wang
2015-03-03  2:37   ` Bjorn Helgaas
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 10/30] PCI: Introduce pci_host_bridge_list to manage host bridges Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 11/30] PCI: Save sysdata in pci_host_bridge drvdata Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 12/30] PCI: Introduce pci_host_bridge_ops to support host specific operations Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  2:50   ` Bjorn Helgaas
2015-03-03  2:50   ` Bjorn Helgaas
2015-03-03  2:50     ` Bjorn Helgaas
2015-03-03  2:50     ` Bjorn Helgaas
2015-03-03  2:50     ` Bjorn Helgaas
2015-03-03  8:08     ` Yijing Wang
2015-03-03  8:08       ` Yijing Wang
2015-03-03  8:08       ` Yijing Wang
2015-03-03  8:08       ` Yijing Wang
2015-03-03  8:08       ` Yijing Wang
2015-03-03  8:08     ` Yijing Wang
2015-03-03  3:03   ` Bjorn Helgaas
2015-03-03  3:03   ` Bjorn Helgaas
2015-03-03  3:03     ` Bjorn Helgaas
2015-03-03  3:03     ` Bjorn Helgaas
2015-03-03  3:03     ` Bjorn Helgaas
2015-03-03  8:41     ` Yijing Wang
2015-03-03  8:41     ` Yijing Wang
2015-03-03  8:41       ` Yijing Wang
2015-03-03  8:41       ` Yijing Wang
2015-03-03  8:41       ` Yijing Wang
2015-03-03  8:41       ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 13/30] PCI: Introduce new scan function pci_scan_root_bridge() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  2:52   ` Bjorn Helgaas
2015-03-03  2:52     ` Bjorn Helgaas
2015-03-03  2:52     ` Bjorn Helgaas
2015-03-03  2:52     ` Bjorn Helgaas
2015-03-03  8:12     ` Yijing Wang
2015-03-03  8:12     ` Yijing Wang
2015-03-03  8:12       ` Yijing Wang
2015-03-03  8:12       ` Yijing Wang
2015-03-03  8:12       ` Yijing Wang
2015-03-03  8:12       ` Yijing Wang
2015-03-03  2:52   ` Bjorn Helgaas
2015-02-26  8:12 ` [PATCH v4 14/30] PCI/x86: Refine pci_acpi_scan_root() with generic pci_host_bridge Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 15/30] PCI/IA64: " Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 16/30] PCI/IA64: Fix the build warning about pci_domain_nr() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  2:56   ` Bjorn Helgaas
2015-03-03  2:56     ` Bjorn Helgaas
2015-03-03  2:56     ` Bjorn Helgaas
2015-03-03  2:56     ` Bjorn Helgaas
2015-03-03  8:35     ` Yijing Wang
2015-03-03  8:35     ` Yijing Wang
2015-03-03  8:35       ` Yijing Wang
2015-03-03  8:35       ` Yijing Wang
2015-03-03  8:35       ` Yijing Wang
2015-03-03  8:35       ` Yijing Wang
2015-03-03  2:56   ` Bjorn Helgaas
2015-02-26  8:12 ` [PATCH v4 17/30] PCI/powerpc: Rename pcibios_root_bridge_prepare() Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 18/30] PCI/powerpc: Use pci_scan_root_bridge() for simplicity Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 19/30] PCI: Remove weak pcibios_root_bridge_prepare() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 20/30] PCI/sparc: Use pci_scan_root_bridge() for simplicity Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  3:10   ` Bjorn Helgaas
2015-03-03  3:10     ` Bjorn Helgaas
2015-03-03  3:10     ` Bjorn Helgaas
2015-03-03  3:10     ` Bjorn Helgaas
2015-03-03  3:10     ` Bjorn Helgaas
2015-03-03  8:49     ` Yijing Wang
2015-03-03  8:49       ` Yijing Wang
2015-03-03  8:49       ` Yijing Wang
2015-03-03  8:49       ` Yijing Wang
2015-03-03  8:49       ` Yijing Wang
2015-03-03  8:49       ` Yijing Wang
2015-03-03  3:10   ` Bjorn Helgaas
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 21/30] PCI: Introduce pci_bus_child_max_busnr() Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 22/30] PCI/Parisc: Use pci_scan_root_bus() for simplicity Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  3:24   ` Bjorn Helgaas
2015-03-03  3:24   ` Bjorn Helgaas
2015-03-03  3:24     ` Bjorn Helgaas
2015-03-03  3:24     ` Bjorn Helgaas
2015-03-03  3:24     ` Bjorn Helgaas
2015-03-03  9:31     ` Yijing Wang
2015-03-03  9:31       ` Yijing Wang
2015-03-03  9:31       ` Yijing Wang
2015-03-03  9:31       ` Yijing Wang
2015-03-03  9:31       ` Yijing Wang
2015-03-03  9:31     ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 23/30] PCI/mvebu: Use pci_common_init_dev() to simplify code Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  3:30   ` Bjorn Helgaas
2015-03-03  3:30   ` Bjorn Helgaas
2015-03-03  3:30     ` Bjorn Helgaas
2015-03-03  3:30     ` Bjorn Helgaas
2015-03-03  3:30     ` Bjorn Helgaas
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 24/30] PCI/tegra: Remove redundant tegra_pcie_scan_bus() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 25/30] PCI/designware: Use pci_scan_root_bus() for simplicity Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 26/30] PCI/xgene: Use pci_scan_root_bus() instead of pci_create_root_bus() Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 27/30] PCI: Rename __pci_create_root_bus() to pci_create_root_bus() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 28/30] PCI: Export find_pci_host_bridge() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-03-03  3:40   ` Bjorn Helgaas
2015-03-03  3:40   ` Bjorn Helgaas
2015-03-03  3:40     ` Bjorn Helgaas
2015-03-03  3:40     ` Bjorn Helgaas
2015-03-03  3:40     ` Bjorn Helgaas
2015-03-03  9:35     ` Yijing Wang
2015-03-03  9:35     ` Yijing Wang
2015-03-03  9:35       ` Yijing Wang
2015-03-03  9:35       ` Yijing Wang
2015-03-03  9:35       ` Yijing Wang
2015-03-03  9:35       ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 29/30] PCI: Remove platform specific pci_domain_nr() Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12 ` [PATCH v4 30/30] PCI: Remove pci_bus_assign_domain_nr() Yijing Wang
2015-02-26  8:12 ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26  8:12   ` Yijing Wang
2015-02-26 23:57 ` [PATCH v4 00/30] Refine PCI scan interfaces and make generic pci host bridge Bjorn Helgaas
2015-02-26 23:57   ` Bjorn Helgaas
2015-02-26 23:57   ` Bjorn Helgaas
2015-02-26 23:57   ` Bjorn Helgaas
2015-02-27  0:56   ` Yijing Wang
2015-02-27  0:56     ` Yijing Wang
2015-02-27  0:56     ` Yijing Wang
2015-02-27  0:56     ` Yijing Wang
2015-02-27  0:56     ` Yijing Wang
2015-02-27  0:56   ` Yijing Wang

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=20150302234147.GA11978@google.com \
    --to=bhelgaas@google.com \
    --cc=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=davem@davemloft.net \
    --cc=geert@linux-m68k.org \
    --cc=gxt@mprc.pku.edu.cn \
    --cc=ink@jurassic.park.msu.ru \
    --cc=jiang.liu@linux.intel.com \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=liviu@dudau.co.uk \
    --cc=marc.zyngier@arm.com \
    --cc=mattst88@gmail.com \
    --cc=rth@twiddle.net \
    --cc=rusty@rustcorp.com.au \
    --cc=sparclinux@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=wangyijing@huawei.com \
    --cc=x86@kernel.org \
    --cc=yinghai@kernel.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 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.