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>,
	dja@axtens.net, 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>
Subject: Re: [PATCH v9 07/30] PCI: Add default bus resource in pci_host_bridge
Date: Tue, 7 Apr 2015 17:25:41 -0500	[thread overview]
Message-ID: <20150407222541.GK10892@google.com> (raw)
In-Reply-To: <1428053164-28277-9-git-send-email-wangyijing@huawei.com>

On Fri, Apr 03, 2015 at 05:25:41PM +0800, Yijing Wang wrote:
> If there is no busn resource provided for pci_scan_root_bus(),
> we would insert a default bus resource (root_bus_number, 255)
> in root bus, and update the max bus number we found after
> pci_scan_child_bus(). We also need to hold the default bus
> resource in pci_host_bridge, then we could identify whether
> the new pci host bridge conflict with existing one.
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> ---
>  drivers/pci/host-bridge.c |   20 ++++++++++++++++++++
>  drivers/pci/probe.c       |   26 ++++++++++----------------
>  include/linux/pci.h       |    2 ++
>  3 files changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
> index 7d52a0a..ecc1a7c 100644
> --- a/drivers/pci/host-bridge.c
> +++ b/drivers/pci/host-bridge.c
> @@ -19,6 +19,25 @@ static void pci_release_host_bridge_dev(struct device *dev)
>  	kfree(bridge);
>  }
>  
> +static void pci_host_update_busn_res(
> +		struct pci_host_bridge *host, int bus,
> +		struct list_head *resources)
> +{
> +	struct resource_entry *window;
> +
> +	resource_list_for_each_entry(window, resources)
> +		if (window->res->flags & IORESOURCE_BUS)
> +			return;
> +
> +	pr_info(
> +	 "No busn resource found for pci%04x:%02x, will use [bus %02x-ff]\n",
> +		host->domain, bus, bus);
> +	host->busn_res.flags = IORESOURCE_BUS;
> +	host->busn_res.start = bus;
> +	host->busn_res.end = 255;
> +	pci_add_resource(resources, &host->busn_res);
> +}
> +
>  struct pci_host_bridge *pci_create_host_bridge(
>  		struct device *parent, int domain, int bus,
>  		struct list_head *resources)
> @@ -33,6 +52,7 @@ struct pci_host_bridge *pci_create_host_bridge(
>  
>  	host->dev.parent = parent;
>  	INIT_LIST_HEAD(&host->windows);
> +	pci_host_update_busn_res(host, bus, resources);
>  	resource_list_for_each_entry_safe(window, n, resources)
>  		list_move_tail(&window->node, &host->windows);
>  	/*
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 9bc4784..d5a12d9 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2022,6 +2022,12 @@ int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
>  	return ret;
>  }
>  
> +static void pci_host_update_busn_res_end(
> +		struct pci_host_bridge *host, int max)
> +{
> +	host->busn_res.end = max;
> +}
> +
>  void pci_bus_release_busn_res(struct pci_bus *b)
>  {
>  	struct resource *res = &b->busn_res;
> @@ -2040,32 +2046,20 @@ static struct pci_bus *__pci_scan_root_bus(int bus,
>  		struct pci_host_bridge *host, struct pci_ops *ops,
>  		void *sysdata)
>  {
> -	struct resource_entry *window;
> -	bool found = false;
>  	struct pci_bus *b;
>  	int max;
>  
> -	resource_list_for_each_entry(window, &host->windows)
> -		if (window->res->flags & IORESOURCE_BUS) {
> -			found = true;
> -			break;
> -		}
> -
>  	b = __pci_create_root_bus(bus, host, ops, sysdata);
>  	if (!b)
>  		return NULL;
>  
> -	if (!found) {
> -		dev_info(&b->dev,
> -		 "No busn resource found for root bus, will use [bus %02x-ff]\n",
> -			bus);
> -		pci_bus_insert_busn_res(b, bus, 255);
> -	}
> -
>  	max = pci_scan_child_bus(b);
>  
> -	if (!found)
> +	/* If default busn resource used, update the max bus number */
> +	if (host->busn_res.flags & IORESOURCE_BUS) {
> +		pci_host_update_busn_res_end(host, max);
>  		pci_bus_update_busn_res_end(b, max);
> +	}
>  
>  	return b;
>  }
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 1542df8..f189dfb 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -404,6 +404,8 @@ struct pci_host_bridge {
>  	int domain;
>  	struct device dev;
>  	struct pci_bus *bus;		/* root bus */
> +	/* we use default bus resource if no bus resource provided */
> +	struct resource busn_res;

I don't understand the need for another busn_res here.  The host bridge bus
range should be identical to the root bus range.  Having two copies will
confuse things.

And apparently this host->busn_res is only filled in if the arch doesn't
provide a busn resource?

To check for conflicts between host bridges, can you iterate through the
existing ones and check the range of their root buses?

>  	struct list_head windows;	/* resource_entry */
>  	void (*release_fn)(struct pci_host_bridge *);
>  	void *release_data;
> -- 
> 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>,
	dja@axtens.net, 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>
Subject: Re: [PATCH v9 07/30] PCI: Add default bus resource in pci_host_bridge
Date: Tue, 7 Apr 2015 17:25:41 -0500	[thread overview]
Message-ID: <20150407222541.GK10892@google.com> (raw)
In-Reply-To: <1428053164-28277-9-git-send-email-wangyijing@huawei.com>

On Fri, Apr 03, 2015 at 05:25:41PM +0800, Yijing Wang wrote:
> If there is no busn resource provided for pci_scan_root_bus(),
> we would insert a default bus resource (root_bus_number, 255)
> in root bus, and update the max bus number we found after
> pci_scan_child_bus(). We also need to hold the default bus
> resource in pci_host_bridge, then we could identify whether
> the new pci host bridge conflict with existing one.
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> ---
>  drivers/pci/host-bridge.c |   20 ++++++++++++++++++++
>  drivers/pci/probe.c       |   26 ++++++++++----------------
>  include/linux/pci.h       |    2 ++
>  3 files changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
> index 7d52a0a..ecc1a7c 100644
> --- a/drivers/pci/host-bridge.c
> +++ b/drivers/pci/host-bridge.c
> @@ -19,6 +19,25 @@ static void pci_release_host_bridge_dev(struct device *dev)
>  	kfree(bridge);
>  }
>  
> +static void pci_host_update_busn_res(
> +		struct pci_host_bridge *host, int bus,
> +		struct list_head *resources)
> +{
> +	struct resource_entry *window;
> +
> +	resource_list_for_each_entry(window, resources)
> +		if (window->res->flags & IORESOURCE_BUS)
> +			return;
> +
> +	pr_info(
> +	 "No busn resource found for pci%04x:%02x, will use [bus %02x-ff]\n",
> +		host->domain, bus, bus);
> +	host->busn_res.flags = IORESOURCE_BUS;
> +	host->busn_res.start = bus;
> +	host->busn_res.end = 255;
> +	pci_add_resource(resources, &host->busn_res);
> +}
> +
>  struct pci_host_bridge *pci_create_host_bridge(
>  		struct device *parent, int domain, int bus,
>  		struct list_head *resources)
> @@ -33,6 +52,7 @@ struct pci_host_bridge *pci_create_host_bridge(
>  
>  	host->dev.parent = parent;
>  	INIT_LIST_HEAD(&host->windows);
> +	pci_host_update_busn_res(host, bus, resources);
>  	resource_list_for_each_entry_safe(window, n, resources)
>  		list_move_tail(&window->node, &host->windows);
>  	/*
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 9bc4784..d5a12d9 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2022,6 +2022,12 @@ int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
>  	return ret;
>  }
>  
> +static void pci_host_update_busn_res_end(
> +		struct pci_host_bridge *host, int max)
> +{
> +	host->busn_res.end = max;
> +}
> +
>  void pci_bus_release_busn_res(struct pci_bus *b)
>  {
>  	struct resource *res = &b->busn_res;
> @@ -2040,32 +2046,20 @@ static struct pci_bus *__pci_scan_root_bus(int bus,
>  		struct pci_host_bridge *host, struct pci_ops *ops,
>  		void *sysdata)
>  {
> -	struct resource_entry *window;
> -	bool found = false;
>  	struct pci_bus *b;
>  	int max;
>  
> -	resource_list_for_each_entry(window, &host->windows)
> -		if (window->res->flags & IORESOURCE_BUS) {
> -			found = true;
> -			break;
> -		}
> -
>  	b = __pci_create_root_bus(bus, host, ops, sysdata);
>  	if (!b)
>  		return NULL;
>  
> -	if (!found) {
> -		dev_info(&b->dev,
> -		 "No busn resource found for root bus, will use [bus %02x-ff]\n",
> -			bus);
> -		pci_bus_insert_busn_res(b, bus, 255);
> -	}
> -
>  	max = pci_scan_child_bus(b);
>  
> -	if (!found)
> +	/* If default busn resource used, update the max bus number */
> +	if (host->busn_res.flags & IORESOURCE_BUS) {
> +		pci_host_update_busn_res_end(host, max);
>  		pci_bus_update_busn_res_end(b, max);
> +	}
>  
>  	return b;
>  }
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 1542df8..f189dfb 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -404,6 +404,8 @@ struct pci_host_bridge {
>  	int domain;
>  	struct device dev;
>  	struct pci_bus *bus;		/* root bus */
> +	/* we use default bus resource if no bus resource provided */
> +	struct resource busn_res;

I don't understand the need for another busn_res here.  The host bridge bus
range should be identical to the root bus range.  Having two copies will
confuse things.

And apparently this host->busn_res is only filled in if the arch doesn't
provide a busn resource?

To check for conflicts between host bridges, can you iterate through the
existing ones and check the range of their root buses?

>  	struct list_head windows;	/* resource_entry */
>  	void (*release_fn)(struct pci_host_bridge *);
>  	void *release_data;
> -- 
> 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 v9 07/30] PCI: Add default bus resource in pci_host_bridge
Date: Tue, 7 Apr 2015 17:25:41 -0500	[thread overview]
Message-ID: <20150407222541.GK10892@google.com> (raw)
In-Reply-To: <1428053164-28277-9-git-send-email-wangyijing@huawei.com>

On Fri, Apr 03, 2015 at 05:25:41PM +0800, Yijing Wang wrote:
> If there is no busn resource provided for pci_scan_root_bus(),
> we would insert a default bus resource (root_bus_number, 255)
> in root bus, and update the max bus number we found after
> pci_scan_child_bus(). We also need to hold the default bus
> resource in pci_host_bridge, then we could identify whether
> the new pci host bridge conflict with existing one.
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> ---
>  drivers/pci/host-bridge.c |   20 ++++++++++++++++++++
>  drivers/pci/probe.c       |   26 ++++++++++----------------
>  include/linux/pci.h       |    2 ++
>  3 files changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
> index 7d52a0a..ecc1a7c 100644
> --- a/drivers/pci/host-bridge.c
> +++ b/drivers/pci/host-bridge.c
> @@ -19,6 +19,25 @@ static void pci_release_host_bridge_dev(struct device *dev)
>  	kfree(bridge);
>  }
>  
> +static void pci_host_update_busn_res(
> +		struct pci_host_bridge *host, int bus,
> +		struct list_head *resources)
> +{
> +	struct resource_entry *window;
> +
> +	resource_list_for_each_entry(window, resources)
> +		if (window->res->flags & IORESOURCE_BUS)
> +			return;
> +
> +	pr_info(
> +	 "No busn resource found for pci%04x:%02x, will use [bus %02x-ff]\n",
> +		host->domain, bus, bus);
> +	host->busn_res.flags = IORESOURCE_BUS;
> +	host->busn_res.start = bus;
> +	host->busn_res.end = 255;
> +	pci_add_resource(resources, &host->busn_res);
> +}
> +
>  struct pci_host_bridge *pci_create_host_bridge(
>  		struct device *parent, int domain, int bus,
>  		struct list_head *resources)
> @@ -33,6 +52,7 @@ struct pci_host_bridge *pci_create_host_bridge(
>  
>  	host->dev.parent = parent;
>  	INIT_LIST_HEAD(&host->windows);
> +	pci_host_update_busn_res(host, bus, resources);
>  	resource_list_for_each_entry_safe(window, n, resources)
>  		list_move_tail(&window->node, &host->windows);
>  	/*
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 9bc4784..d5a12d9 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2022,6 +2022,12 @@ int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
>  	return ret;
>  }
>  
> +static void pci_host_update_busn_res_end(
> +		struct pci_host_bridge *host, int max)
> +{
> +	host->busn_res.end = max;
> +}
> +
>  void pci_bus_release_busn_res(struct pci_bus *b)
>  {
>  	struct resource *res = &b->busn_res;
> @@ -2040,32 +2046,20 @@ static struct pci_bus *__pci_scan_root_bus(int bus,
>  		struct pci_host_bridge *host, struct pci_ops *ops,
>  		void *sysdata)
>  {
> -	struct resource_entry *window;
> -	bool found = false;
>  	struct pci_bus *b;
>  	int max;
>  
> -	resource_list_for_each_entry(window, &host->windows)
> -		if (window->res->flags & IORESOURCE_BUS) {
> -			found = true;
> -			break;
> -		}
> -
>  	b = __pci_create_root_bus(bus, host, ops, sysdata);
>  	if (!b)
>  		return NULL;
>  
> -	if (!found) {
> -		dev_info(&b->dev,
> -		 "No busn resource found for root bus, will use [bus %02x-ff]\n",
> -			bus);
> -		pci_bus_insert_busn_res(b, bus, 255);
> -	}
> -
>  	max = pci_scan_child_bus(b);
>  
> -	if (!found)
> +	/* If default busn resource used, update the max bus number */
> +	if (host->busn_res.flags & IORESOURCE_BUS) {
> +		pci_host_update_busn_res_end(host, max);
>  		pci_bus_update_busn_res_end(b, max);
> +	}
>  
>  	return b;
>  }
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 1542df8..f189dfb 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -404,6 +404,8 @@ struct pci_host_bridge {
>  	int domain;
>  	struct device dev;
>  	struct pci_bus *bus;		/* root bus */
> +	/* we use default bus resource if no bus resource provided */
> +	struct resource busn_res;

I don't understand the need for another busn_res here.  The host bridge bus
range should be identical to the root bus range.  Having two copies will
confuse things.

And apparently this host->busn_res is only filled in if the arch doesn't
provide a busn resource?

To check for conflicts between host bridges, can you iterate through the
existing ones and check the range of their root buses?

>  	struct list_head windows;	/* resource_entry */
>  	void (*release_fn)(struct pci_host_bridge *);
>  	void *release_data;
> -- 
> 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>,
	dja@axtens.net, 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>
Subject: Re: [PATCH v9 07/30] PCI: Add default bus resource in pci_host_bridge
Date: Tue, 07 Apr 2015 22:25:41 +0000	[thread overview]
Message-ID: <20150407222541.GK10892@google.com> (raw)
In-Reply-To: <1428053164-28277-9-git-send-email-wangyijing@huawei.com>

On Fri, Apr 03, 2015 at 05:25:41PM +0800, Yijing Wang wrote:
> If there is no busn resource provided for pci_scan_root_bus(),
> we would insert a default bus resource (root_bus_number, 255)
> in root bus, and update the max bus number we found after
> pci_scan_child_bus(). We also need to hold the default bus
> resource in pci_host_bridge, then we could identify whether
> the new pci host bridge conflict with existing one.
> 
> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
> ---
>  drivers/pci/host-bridge.c |   20 ++++++++++++++++++++
>  drivers/pci/probe.c       |   26 ++++++++++----------------
>  include/linux/pci.h       |    2 ++
>  3 files changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
> index 7d52a0a..ecc1a7c 100644
> --- a/drivers/pci/host-bridge.c
> +++ b/drivers/pci/host-bridge.c
> @@ -19,6 +19,25 @@ static void pci_release_host_bridge_dev(struct device *dev)
>  	kfree(bridge);
>  }
>  
> +static void pci_host_update_busn_res(
> +		struct pci_host_bridge *host, int bus,
> +		struct list_head *resources)
> +{
> +	struct resource_entry *window;
> +
> +	resource_list_for_each_entry(window, resources)
> +		if (window->res->flags & IORESOURCE_BUS)
> +			return;
> +
> +	pr_info(
> +	 "No busn resource found for pci%04x:%02x, will use [bus %02x-ff]\n",
> +		host->domain, bus, bus);
> +	host->busn_res.flags = IORESOURCE_BUS;
> +	host->busn_res.start = bus;
> +	host->busn_res.end = 255;
> +	pci_add_resource(resources, &host->busn_res);
> +}
> +
>  struct pci_host_bridge *pci_create_host_bridge(
>  		struct device *parent, int domain, int bus,
>  		struct list_head *resources)
> @@ -33,6 +52,7 @@ struct pci_host_bridge *pci_create_host_bridge(
>  
>  	host->dev.parent = parent;
>  	INIT_LIST_HEAD(&host->windows);
> +	pci_host_update_busn_res(host, bus, resources);
>  	resource_list_for_each_entry_safe(window, n, resources)
>  		list_move_tail(&window->node, &host->windows);
>  	/*
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 9bc4784..d5a12d9 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2022,6 +2022,12 @@ int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
>  	return ret;
>  }
>  
> +static void pci_host_update_busn_res_end(
> +		struct pci_host_bridge *host, int max)
> +{
> +	host->busn_res.end = max;
> +}
> +
>  void pci_bus_release_busn_res(struct pci_bus *b)
>  {
>  	struct resource *res = &b->busn_res;
> @@ -2040,32 +2046,20 @@ static struct pci_bus *__pci_scan_root_bus(int bus,
>  		struct pci_host_bridge *host, struct pci_ops *ops,
>  		void *sysdata)
>  {
> -	struct resource_entry *window;
> -	bool found = false;
>  	struct pci_bus *b;
>  	int max;
>  
> -	resource_list_for_each_entry(window, &host->windows)
> -		if (window->res->flags & IORESOURCE_BUS) {
> -			found = true;
> -			break;
> -		}
> -
>  	b = __pci_create_root_bus(bus, host, ops, sysdata);
>  	if (!b)
>  		return NULL;
>  
> -	if (!found) {
> -		dev_info(&b->dev,
> -		 "No busn resource found for root bus, will use [bus %02x-ff]\n",
> -			bus);
> -		pci_bus_insert_busn_res(b, bus, 255);
> -	}
> -
>  	max = pci_scan_child_bus(b);
>  
> -	if (!found)
> +	/* If default busn resource used, update the max bus number */
> +	if (host->busn_res.flags & IORESOURCE_BUS) {
> +		pci_host_update_busn_res_end(host, max);
>  		pci_bus_update_busn_res_end(b, max);
> +	}
>  
>  	return b;
>  }
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 1542df8..f189dfb 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -404,6 +404,8 @@ struct pci_host_bridge {
>  	int domain;
>  	struct device dev;
>  	struct pci_bus *bus;		/* root bus */
> +	/* we use default bus resource if no bus resource provided */
> +	struct resource busn_res;

I don't understand the need for another busn_res here.  The host bridge bus
range should be identical to the root bus range.  Having two copies will
confuse things.

And apparently this host->busn_res is only filled in if the arch doesn't
provide a busn resource?

To check for conflicts between host bridges, can you iterate through the
existing ones and check the range of their root buses?

>  	struct list_head windows;	/* resource_entry */
>  	void (*release_fn)(struct pci_host_bridge *);
>  	void *release_data;
> -- 
> 1.7.1
> 

  parent reply	other threads:[~2015-04-07 22:25 UTC|newest]

Thread overview: 266+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-03  9:25 [PATCH v9 00/30] Refine PCI scan interfaces and make generic pci host bridge Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH] PCI: Save sysdata in pci_host_bridge drvdata Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:32   ` Yijing Wang
2015-04-03  9:32   ` Yijing Wang
2015-04-03  9:32     ` Yijing Wang
2015-04-03  9:32     ` Yijing Wang
2015-04-03  9:32     ` Yijing Wang
2015-04-03  9:32     ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 01/30] xen/PCI: Don't use deprecated function pci_scan_bus_parented() Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 02/30] PCI: Remove deprecated pci_scan_bus_parented() Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 03/30] PCI: Save domain in pci_host_bridge Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-08  8:09   ` Gregory CLEMENT
2015-04-08  8:09     ` Gregory CLEMENT
2015-04-08  8:09     ` Gregory CLEMENT
2015-04-08  8:09     ` Gregory CLEMENT
2015-04-08  8:32     ` Yijing Wang
2015-04-08  8:32     ` Yijing Wang
2015-04-08  8:32       ` Yijing Wang
2015-04-08  8:32       ` Yijing Wang
2015-04-08  8:32       ` Yijing Wang
2015-04-08  8:32       ` Yijing Wang
2015-04-08  8:09   ` Gregory CLEMENT
2015-04-03  9:25 ` [PATCH v9 04/30] PCI: Move pci_bus_assign_domain_nr() declaration into drivers/pci/pci.h Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 05/30] PCI: Introduce pci_host_assign_domain_nr() to assign domain Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 06/30] PCI: Separate pci_host_bridge creation out of pci_create_root_bus() Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-07 21:38   ` Bjorn Helgaas
2015-04-07 21:38     ` Bjorn Helgaas
2015-04-07 21:38     ` Bjorn Helgaas
2015-04-07 21:38     ` Bjorn Helgaas
2015-04-08  1:18     ` Yijing Wang
2015-04-08  1:18       ` Yijing Wang
2015-04-08  1:18       ` Yijing Wang
2015-04-08  1:18       ` Yijing Wang
2015-04-08  1:18       ` Yijing Wang
2015-04-08  1:18     ` Yijing Wang
2015-04-07 21:38   ` Bjorn Helgaas
2015-04-03  9:25 ` [PATCH v9 07/30] PCI: Add default bus resource in pci_host_bridge Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-07 22:25   ` Bjorn Helgaas
2015-04-07 22:25   ` Bjorn Helgaas [this message]
2015-04-07 22:25     ` Bjorn Helgaas
2015-04-07 22:25     ` Bjorn Helgaas
2015-04-07 22:25     ` Bjorn Helgaas
2015-04-08  8:14     ` Yijing Wang
2015-04-08  8:14     ` Yijing Wang
2015-04-08  8:14       ` Yijing Wang
2015-04-08  8:14       ` Yijing Wang
2015-04-08  8:14       ` Yijing Wang
2015-04-08  8:14       ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 08/30] PCI: Update pci_host_bridge bus resource Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-07 22:42   ` Bjorn Helgaas
2015-04-07 22:42     ` Bjorn Helgaas
2015-04-07 22:42     ` Bjorn Helgaas
2015-04-07 22:42     ` Bjorn Helgaas
2015-04-08  9:22     ` Yijing Wang
2015-04-08  9:22       ` Yijing Wang
2015-04-08  9:22       ` Yijing Wang
2015-04-08  9:22       ` Yijing Wang
2015-04-08  9:22       ` Yijing Wang
2015-04-07 22:42   ` Bjorn Helgaas
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 09/30] PCI: Introduce pci_host_first_busnr() function Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 10/30] PCI: Introduce pci_host_bridge_list to manage host bridges Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 11/30] PCI: Save sysdata in pci_host_bridge drvdata Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 12/30] powerpc/PCI: Rename pcibios_root_bridge_prepare() to pcibios_set_root_bus_speed() Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 13/30] PCI: Move pcibios_root_bridge_prepare() to pci_create_host_bridge() Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 14/30] PCI: Introduce pci_host_bridge_ops to support host specific operations Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-07  7:04   ` Daniel Axtens
2015-04-07  7:04   ` Daniel Axtens
2015-04-07  7:04     ` Daniel Axtens
2015-04-07  7:04     ` Daniel Axtens
2015-04-07  7:04     ` Daniel Axtens
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 15/30] PCI: Introduce new scan function pci_scan_host_bridge() Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 16/30] PCI: Introduce pci_bus_child_max_busnr() Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 17/30] x86/PCI: Refine pci_acpi_scan_root() with generic pci_host_bridge Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 18/30] ia64/PCI: " Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 19/30] powerpc/pci: Use pci_scan_host_bridge() for simplicity Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-06 23:35   ` Daniel Axtens
2015-04-06 23:35     ` Daniel Axtens
2015-04-06 23:35     ` Daniel Axtens
2015-04-06 23:35     ` Daniel Axtens
2015-04-06 23:35     ` Daniel Axtens
2015-04-07  2:52     ` Yijing Wang
2015-04-07  2:52       ` Yijing Wang
2015-04-07  2:52       ` Yijing Wang
2015-04-07  2:52       ` Yijing Wang
2015-04-07  2:52       ` Yijing Wang
2015-04-07  2:52       ` Yijing Wang
2015-04-07  2:52     ` Yijing Wang
2015-04-06 23:35   ` Daniel Axtens
2015-04-03  9:25 ` [PATCH v9 20/30] PCI: Remove pcibios_root_bridge_prepare() and pcibos_set_root_bus_speed() Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 21/30] sparc/PCI: Use pci_scan_host_bridge() for simplicity Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 22/30] parisc/PCI: Use pci_scan_root_bus() " Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 23/30] PCI/mvebu: Use pci_common_init_dev() to simplify code Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-08  8:08   ` Gregory CLEMENT
2015-04-08  8:08   ` Gregory CLEMENT
2015-04-08  8:08     ` Gregory CLEMENT
2015-04-08  8:08     ` Gregory CLEMENT
2015-04-08  8:08     ` Gregory CLEMENT
2015-04-08  8:30     ` Yijing Wang
2015-04-08  8:30     ` Yijing Wang
2015-04-08  8:30       ` Yijing Wang
2015-04-08  8:30       ` Yijing Wang
2015-04-08  8:30       ` Yijing Wang
2015-04-08  8:30       ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 24/30] PCI/tegra: Remove redundant tegra_pcie_scan_bus() Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25 ` [PATCH v9 25/30] PCI/designware: Use pci_scan_root_bus() for simplicity Yijing Wang
2015-04-03  9:25 ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:25   ` Yijing Wang
2015-04-03  9:26 ` [PATCH v9 26/30] PCI/xgene: Use pci_scan_root_bus() instead of pci_create_root_bus() Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26 ` Yijing Wang
2015-04-03  9:26 ` [PATCH v9 27/30] PCI: Rename __pci_create_root_bus() to pci_create_root_bus() Yijing Wang
2015-04-03  9:26 ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26 ` [PATCH v9 28/30] PCI: Remove platform specific pci_domain_nr() Yijing Wang
2015-04-03  9:26 ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26 ` [PATCH v9 29/30] PCI: Remove pci_bus_assign_domain_nr() Yijing Wang
2015-04-03  9:26 ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26 ` [PATCH v9 30/30] PCI: Clean up CONFIG_PCI_DOMAINS_GENERIC Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` Yijing Wang
2015-04-03  9:26   ` 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=20150407222541.GK10892@google.com \
    --to=bhelgaas@google.com \
    --cc=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=davem@davemloft.net \
    --cc=dja@axtens.net \
    --cc=geert@linux-m68k.org \
    --cc=gxt@mprc.pku.edu.cn \
    --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@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=liviu@dudau.co.uk \
    --cc=marc.zyngier@arm.com \
    --cc=rusty@rustcorp.com.au \
    --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.