All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yijing Wang <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.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>,
	"Yijing Wang" <wangyijing@huawei.com>
Subject: [PATCH v3 21/30] PCI: Introduce pci_bus_child_max_busnr()
Date: Thu, 26 Feb 2015 09:29:38 +0800	[thread overview]
Message-ID: <1424914187-21027-22-git-send-email-wangyijing@huawei.com> (raw)
In-Reply-To: <1424914187-21027-1-git-send-email-wangyijing@huawei.com>

Sometimes, we need to know the highest reserved
busnr for children bus. Because parent's
bus->busn_res could have padding in it.
This function return the max child busnr as
pci_scan_child_bus().

Signed-off-by: Yijing Wang <wangyijing@huawei.com>
---
 drivers/pci/hotplug/acpiphp_glue.c |   29 +----------------------------
 drivers/pci/pci.c                  |   25 ++++++++++++++++++++++++-
 include/linux/pci.h                |    2 +-
 3 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index bcb90e4..84f2584 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -397,33 +397,6 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
 	acpi_unlock_hp_context();
 }
 
-/**
- * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
- * @bus: bus to start search with
- */
-static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
-{
-	struct pci_bus *tmp;
-	unsigned char max, n;
-
-	/*
-	 * pci_bus_max_busnr will return the highest
-	 * reserved busnr for all these children.
-	 * that is equivalent to the bus->subordinate
-	 * value.  We don't want to use the parent's
-	 * bus->subordinate value because it could have
-	 * padding in it.
-	 */
-	max = bus->busn_res.start;
-
-	list_for_each_entry(tmp, &bus->children, node) {
-		n = pci_bus_max_busnr(tmp);
-		if (n > max)
-			max = n;
-	}
-	return max;
-}
-
 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
 {
 	struct acpiphp_func *func;
@@ -489,7 +462,7 @@ static void enable_slot(struct acpiphp_slot *slot)
 	LIST_HEAD(add_list);
 
 	acpiphp_rescan_slot(slot);
-	max = acpiphp_max_busnr(bus);
+	max = pci_bus_child_max_busnr(bus);
 	for (pass = 0; pass < 2; pass++) {
 		list_for_each_entry(dev, &bus->devices, bus_list) {
 			if (PCI_SLOT(dev->devfn) != slot->device)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d9e7645..2abac8f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -121,7 +121,30 @@ unsigned char pci_bus_max_busnr(struct pci_bus *bus)
 	}
 	return max;
 }
-EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
+
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus)
+{
+	struct pci_bus *tmp;
+	unsigned char max, n;
+
+	/*
+	 * pci_bus_max_busnr will return the highest
+	 * reserved busnr for all these children.
+	 * that is equivalent to the bus->subordinate
+	 * value.  We don't want to use the parent's
+	 * bus->subordinate value because it could have
+	 * padding in it.
+	 */
+	max = bus->busn_res.start;
+
+	list_for_each_entry(tmp, &bus->children, node) {
+		n = pci_bus_max_busnr(tmp);
+		if (n > max)
+			max = n;
+	}
+	return max;
+}
+EXPORT_SYMBOL_GPL(pci_bus_child_max_busnr);
 
 #ifdef CONFIG_HAS_IOMEM
 void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 3c4413c..d266d74 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1183,7 +1183,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
 		  void *userdata);
 int pci_cfg_space_size(struct pci_dev *dev);
-unsigned char pci_bus_max_busnr(struct pci_bus *bus);
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus);
 void pci_setup_bridge(struct pci_bus *bus);
 resource_size_t pcibios_window_alignment(struct pci_bus *bus,
 					 unsigned long type);
-- 
1.7.1


WARNING: multiple messages have this Message-ID (diff)
From: Yijing Wang <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.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>,
	"Yijing Wang" <wangyijing@huawei.com>
Subject: [PATCH v3 21/30] PCI: Introduce pci_bus_child_max_busnr()
Date: Thu, 26 Feb 2015 09:29:38 +0800	[thread overview]
Message-ID: <1424914187-21027-22-git-send-email-wangyijing@huawei.com> (raw)
In-Reply-To: <1424914187-21027-1-git-send-email-wangyijing@huawei.com>

Sometimes, we need to know the highest reserved
busnr for children bus. Because parent's
bus->busn_res could have padding in it.
This function return the max child busnr as
pci_scan_child_bus().

Signed-off-by: Yijing Wang <wangyijing@huawei.com>
---
 drivers/pci/hotplug/acpiphp_glue.c |   29 +----------------------------
 drivers/pci/pci.c                  |   25 ++++++++++++++++++++++++-
 include/linux/pci.h                |    2 +-
 3 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index bcb90e4..84f2584 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -397,33 +397,6 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
 	acpi_unlock_hp_context();
 }
 
-/**
- * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
- * @bus: bus to start search with
- */
-static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
-{
-	struct pci_bus *tmp;
-	unsigned char max, n;
-
-	/*
-	 * pci_bus_max_busnr will return the highest
-	 * reserved busnr for all these children.
-	 * that is equivalent to the bus->subordinate
-	 * value.  We don't want to use the parent's
-	 * bus->subordinate value because it could have
-	 * padding in it.
-	 */
-	max = bus->busn_res.start;
-
-	list_for_each_entry(tmp, &bus->children, node) {
-		n = pci_bus_max_busnr(tmp);
-		if (n > max)
-			max = n;
-	}
-	return max;
-}
-
 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
 {
 	struct acpiphp_func *func;
@@ -489,7 +462,7 @@ static void enable_slot(struct acpiphp_slot *slot)
 	LIST_HEAD(add_list);
 
 	acpiphp_rescan_slot(slot);
-	max = acpiphp_max_busnr(bus);
+	max = pci_bus_child_max_busnr(bus);
 	for (pass = 0; pass < 2; pass++) {
 		list_for_each_entry(dev, &bus->devices, bus_list) {
 			if (PCI_SLOT(dev->devfn) != slot->device)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d9e7645..2abac8f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -121,7 +121,30 @@ unsigned char pci_bus_max_busnr(struct pci_bus *bus)
 	}
 	return max;
 }
-EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
+
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus)
+{
+	struct pci_bus *tmp;
+	unsigned char max, n;
+
+	/*
+	 * pci_bus_max_busnr will return the highest
+	 * reserved busnr for all these children.
+	 * that is equivalent to the bus->subordinate
+	 * value.  We don't want to use the parent's
+	 * bus->subordinate value because it could have
+	 * padding in it.
+	 */
+	max = bus->busn_res.start;
+
+	list_for_each_entry(tmp, &bus->children, node) {
+		n = pci_bus_max_busnr(tmp);
+		if (n > max)
+			max = n;
+	}
+	return max;
+}
+EXPORT_SYMBOL_GPL(pci_bus_child_max_busnr);
 
 #ifdef CONFIG_HAS_IOMEM
 void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 3c4413c..d266d74 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1183,7 +1183,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
 		  void *userdata);
 int pci_cfg_space_size(struct pci_dev *dev);
-unsigned char pci_bus_max_busnr(struct pci_bus *bus);
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus);
 void pci_setup_bridge(struct pci_bus *bus);
 resource_size_t pcibios_window_alignment(struct pci_bus *bus,
 					 unsigned long type);
-- 
1.7.1


WARNING: multiple messages have this Message-ID (diff)
From: wangyijing@huawei.com (Yijing Wang)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 21/30] PCI: Introduce pci_bus_child_max_busnr()
Date: Thu, 26 Feb 2015 09:29:38 +0800	[thread overview]
Message-ID: <1424914187-21027-22-git-send-email-wangyijing@huawei.com> (raw)
In-Reply-To: <1424914187-21027-1-git-send-email-wangyijing@huawei.com>

Sometimes, we need to know the highest reserved
busnr for children bus. Because parent's
bus->busn_res could have padding in it.
This function return the max child busnr as
pci_scan_child_bus().

Signed-off-by: Yijing Wang <wangyijing@huawei.com>
---
 drivers/pci/hotplug/acpiphp_glue.c |   29 +----------------------------
 drivers/pci/pci.c                  |   25 ++++++++++++++++++++++++-
 include/linux/pci.h                |    2 +-
 3 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index bcb90e4..84f2584 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -397,33 +397,6 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
 	acpi_unlock_hp_context();
 }
 
-/**
- * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
- * @bus: bus to start search with
- */
-static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
-{
-	struct pci_bus *tmp;
-	unsigned char max, n;
-
-	/*
-	 * pci_bus_max_busnr will return the highest
-	 * reserved busnr for all these children.
-	 * that is equivalent to the bus->subordinate
-	 * value.  We don't want to use the parent's
-	 * bus->subordinate value because it could have
-	 * padding in it.
-	 */
-	max = bus->busn_res.start;
-
-	list_for_each_entry(tmp, &bus->children, node) {
-		n = pci_bus_max_busnr(tmp);
-		if (n > max)
-			max = n;
-	}
-	return max;
-}
-
 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
 {
 	struct acpiphp_func *func;
@@ -489,7 +462,7 @@ static void enable_slot(struct acpiphp_slot *slot)
 	LIST_HEAD(add_list);
 
 	acpiphp_rescan_slot(slot);
-	max = acpiphp_max_busnr(bus);
+	max = pci_bus_child_max_busnr(bus);
 	for (pass = 0; pass < 2; pass++) {
 		list_for_each_entry(dev, &bus->devices, bus_list) {
 			if (PCI_SLOT(dev->devfn) != slot->device)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d9e7645..2abac8f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -121,7 +121,30 @@ unsigned char pci_bus_max_busnr(struct pci_bus *bus)
 	}
 	return max;
 }
-EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
+
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus)
+{
+	struct pci_bus *tmp;
+	unsigned char max, n;
+
+	/*
+	 * pci_bus_max_busnr will return the highest
+	 * reserved busnr for all these children.
+	 * that is equivalent to the bus->subordinate
+	 * value.  We don't want to use the parent's
+	 * bus->subordinate value because it could have
+	 * padding in it.
+	 */
+	max = bus->busn_res.start;
+
+	list_for_each_entry(tmp, &bus->children, node) {
+		n = pci_bus_max_busnr(tmp);
+		if (n > max)
+			max = n;
+	}
+	return max;
+}
+EXPORT_SYMBOL_GPL(pci_bus_child_max_busnr);
 
 #ifdef CONFIG_HAS_IOMEM
 void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 3c4413c..d266d74 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1183,7 +1183,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
 		  void *userdata);
 int pci_cfg_space_size(struct pci_dev *dev);
-unsigned char pci_bus_max_busnr(struct pci_bus *bus);
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus);
 void pci_setup_bridge(struct pci_bus *bus);
 resource_size_t pcibios_window_alignment(struct pci_bus *bus,
 					 unsigned long type);
-- 
1.7.1

WARNING: multiple messages have this Message-ID (diff)
From: Yijing Wang <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.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>,
	Yijing Wang <wangyijing@huawei.com>
Subject: [PATCH v3 21/30] PCI: Introduce pci_bus_child_max_busnr()
Date: Thu, 26 Feb 2015 01:29:38 +0000	[thread overview]
Message-ID: <1424914187-21027-22-git-send-email-wangyijing@huawei.com> (raw)
In-Reply-To: <1424914187-21027-1-git-send-email-wangyijing@huawei.com>

Sometimes, we need to know the highest reserved
busnr for children bus. Because parent's
bus->busn_res could have padding in it.
This function return the max child busnr as
pci_scan_child_bus().

Signed-off-by: Yijing Wang <wangyijing@huawei.com>
---
 drivers/pci/hotplug/acpiphp_glue.c |   29 +----------------------------
 drivers/pci/pci.c                  |   25 ++++++++++++++++++++++++-
 include/linux/pci.h                |    2 +-
 3 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index bcb90e4..84f2584 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -397,33 +397,6 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
 	acpi_unlock_hp_context();
 }
 
-/**
- * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
- * @bus: bus to start search with
- */
-static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
-{
-	struct pci_bus *tmp;
-	unsigned char max, n;
-
-	/*
-	 * pci_bus_max_busnr will return the highest
-	 * reserved busnr for all these children.
-	 * that is equivalent to the bus->subordinate
-	 * value.  We don't want to use the parent's
-	 * bus->subordinate value because it could have
-	 * padding in it.
-	 */
-	max = bus->busn_res.start;
-
-	list_for_each_entry(tmp, &bus->children, node) {
-		n = pci_bus_max_busnr(tmp);
-		if (n > max)
-			max = n;
-	}
-	return max;
-}
-
 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
 {
 	struct acpiphp_func *func;
@@ -489,7 +462,7 @@ static void enable_slot(struct acpiphp_slot *slot)
 	LIST_HEAD(add_list);
 
 	acpiphp_rescan_slot(slot);
-	max = acpiphp_max_busnr(bus);
+	max = pci_bus_child_max_busnr(bus);
 	for (pass = 0; pass < 2; pass++) {
 		list_for_each_entry(dev, &bus->devices, bus_list) {
 			if (PCI_SLOT(dev->devfn) != slot->device)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d9e7645..2abac8f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -121,7 +121,30 @@ unsigned char pci_bus_max_busnr(struct pci_bus *bus)
 	}
 	return max;
 }
-EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
+
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus)
+{
+	struct pci_bus *tmp;
+	unsigned char max, n;
+
+	/*
+	 * pci_bus_max_busnr will return the highest
+	 * reserved busnr for all these children.
+	 * that is equivalent to the bus->subordinate
+	 * value.  We don't want to use the parent's
+	 * bus->subordinate value because it could have
+	 * padding in it.
+	 */
+	max = bus->busn_res.start;
+
+	list_for_each_entry(tmp, &bus->children, node) {
+		n = pci_bus_max_busnr(tmp);
+		if (n > max)
+			max = n;
+	}
+	return max;
+}
+EXPORT_SYMBOL_GPL(pci_bus_child_max_busnr);
 
 #ifdef CONFIG_HAS_IOMEM
 void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 3c4413c..d266d74 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1183,7 +1183,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
 		  void *userdata);
 int pci_cfg_space_size(struct pci_dev *dev);
-unsigned char pci_bus_max_busnr(struct pci_bus *bus);
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus);
 void pci_setup_bridge(struct pci_bus *bus);
 resource_size_t pcibios_window_alignment(struct pci_bus *bus,
 					 unsigned long type);
-- 
1.7.1


WARNING: multiple messages have this Message-ID (diff)
From: Yijing Wang <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Liviu Dudau <liviu@dudau.co.uk>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Russell King <linux@arm.linux.org.uk>,
	Arnd Bergmann <arnd@arndb.de>,
	Marc Zyngier <marc.zyngier@arm.com>,
	linux-pci@vger.kernel.org, x86@kernel.org,
	linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>,
	linux-alpha@vger.kernel.org, Tony Luck <tony.luck@intel.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Yijing Wang <wangyijing@huawei.com>,
	linux-ia64@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Guan Xuetao <gxt@mprc.pku.edu.cn>,
	Yinghai Lu <yinghai@kernel.org>,
	Jiang Liu <jiang.liu@linux.intel.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 21/30] PCI: Introduce pci_bus_child_max_busnr()
Date: Thu, 26 Feb 2015 09:29:38 +0800	[thread overview]
Message-ID: <1424914187-21027-22-git-send-email-wangyijing@huawei.com> (raw)
In-Reply-To: <1424914187-21027-1-git-send-email-wangyijing@huawei.com>

Sometimes, we need to know the highest reserved
busnr for children bus. Because parent's
bus->busn_res could have padding in it.
This function return the max child busnr as
pci_scan_child_bus().

Signed-off-by: Yijing Wang <wangyijing@huawei.com>
---
 drivers/pci/hotplug/acpiphp_glue.c |   29 +----------------------------
 drivers/pci/pci.c                  |   25 ++++++++++++++++++++++++-
 include/linux/pci.h                |    2 +-
 3 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index bcb90e4..84f2584 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -397,33 +397,6 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
 	acpi_unlock_hp_context();
 }
 
-/**
- * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
- * @bus: bus to start search with
- */
-static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
-{
-	struct pci_bus *tmp;
-	unsigned char max, n;
-
-	/*
-	 * pci_bus_max_busnr will return the highest
-	 * reserved busnr for all these children.
-	 * that is equivalent to the bus->subordinate
-	 * value.  We don't want to use the parent's
-	 * bus->subordinate value because it could have
-	 * padding in it.
-	 */
-	max = bus->busn_res.start;
-
-	list_for_each_entry(tmp, &bus->children, node) {
-		n = pci_bus_max_busnr(tmp);
-		if (n > max)
-			max = n;
-	}
-	return max;
-}
-
 static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
 {
 	struct acpiphp_func *func;
@@ -489,7 +462,7 @@ static void enable_slot(struct acpiphp_slot *slot)
 	LIST_HEAD(add_list);
 
 	acpiphp_rescan_slot(slot);
-	max = acpiphp_max_busnr(bus);
+	max = pci_bus_child_max_busnr(bus);
 	for (pass = 0; pass < 2; pass++) {
 		list_for_each_entry(dev, &bus->devices, bus_list) {
 			if (PCI_SLOT(dev->devfn) != slot->device)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d9e7645..2abac8f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -121,7 +121,30 @@ unsigned char pci_bus_max_busnr(struct pci_bus *bus)
 	}
 	return max;
 }
-EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
+
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus)
+{
+	struct pci_bus *tmp;
+	unsigned char max, n;
+
+	/*
+	 * pci_bus_max_busnr will return the highest
+	 * reserved busnr for all these children.
+	 * that is equivalent to the bus->subordinate
+	 * value.  We don't want to use the parent's
+	 * bus->subordinate value because it could have
+	 * padding in it.
+	 */
+	max = bus->busn_res.start;
+
+	list_for_each_entry(tmp, &bus->children, node) {
+		n = pci_bus_max_busnr(tmp);
+		if (n > max)
+			max = n;
+	}
+	return max;
+}
+EXPORT_SYMBOL_GPL(pci_bus_child_max_busnr);
 
 #ifdef CONFIG_HAS_IOMEM
 void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 3c4413c..d266d74 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1183,7 +1183,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
 		  void *userdata);
 int pci_cfg_space_size(struct pci_dev *dev);
-unsigned char pci_bus_max_busnr(struct pci_bus *bus);
+unsigned char pci_bus_child_max_busnr(struct pci_bus *bus);
 void pci_setup_bridge(struct pci_bus *bus);
 resource_size_t pcibios_window_alignment(struct pci_bus *bus,
 					 unsigned long type);
-- 
1.7.1

  parent reply	other threads:[~2015-02-26  1:41 UTC|newest]

Thread overview: 203+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-26  1:29 [PATCH v3 00/30] Refine PCI scan interfaces and make generic pci host bridge Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 01/30] PCI: Rip out pci_bus_add_devices() from pci_scan_bus() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 02/30] PCI: Rip out pci_bus_add_devices() from pci_scan_root_bus() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 03/30] xen/PCI: Don't use deprecated function pci_scan_bus_parented() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 04/30] PCI: Remove deprecated pci_scan_bus_parented() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 05/30] PCI: Rename pci_scan_bus() to pci_scan_bus_legacy() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 06/30] PCI: Combine PCI domain and bus number in u32 arg Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 07/30] PCI: Pass PCI domain number combined with root bus number Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 08/30] PCI: Introduce pci_host_assign_domain_nr() to assign domain Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 09/30] PCI: Separate pci_host_bridge creation out of pci_create_root_bus() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 10/30] PCI: Introduce pci_host_bridge_list to manage host bridges Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 11/30] PCI: Save sysdata in pci_host_bridge drvdata Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 12/30] PCI: Introduce pci_host_bridge_ops to support host specific operations Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 13/30] PCI: Introduce new scan function pci_scan_root_bridge() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 14/30] PCI/x86: Refine pci_acpi_scan_root() with generic pci_host_bridge Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 15/30] PCI/IA64: " Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 16/30] PCI/IA64: Fix the build warning about pci_domain_nr() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 17/30] PCI/powerpc: Rename pcibios_root_bridge_prepare() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 18/30] PCI/powerpc: Use pci_scan_root_bridge() for simplicity Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 19/30] PCI: Remove weak pcibios_root_bridge_prepare() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 20/30] PCI/sparc: Use pci_scan_root_bridge() for simplicity Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang [this message]
2015-02-26  1:29   ` [PATCH v3 21/30] PCI: Introduce pci_bus_child_max_busnr() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 22/30] PCI/Parisc: Use pci_scan_root_bus() for simplicity Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 23/30] PCI/mvebu: Use pci_common_init_dev() to simplify code Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 24/30] PCI/tegra: Remove redundant tegra_pcie_scan_bus() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 25/30] PCI/designware: Use pci_scan_root_bus() for simplicity Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 26/30] PCI/xgene: Use pci_scan_root_bus() instead of pci_create_root_bus() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 27/30] PCI: Rename __pci_create_root_bus() to pci_create_root_bus() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 28/30] PCI: Export find_pci_host_bridge() Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 29/30] PCI: Remove platform specific pci_domain_nr() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` [PATCH v3 30/30] PCI: Remove pci_bus_assign_domain_nr() Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29   ` Yijing Wang
2015-02-26  1:29 ` Yijing Wang
2015-02-26  5:51 ` [PATCH v3 00/30] Refine PCI scan interfaces and make generic pci host bridge Bjorn Helgaas
2015-02-26  5:51 ` Bjorn Helgaas
2015-02-26  5:51   ` Bjorn Helgaas
2015-02-26  5:51   ` Bjorn Helgaas
2015-02-26  5:51   ` Bjorn Helgaas
2015-02-26  8:23   ` Yijing Wang
2015-02-26  8:23     ` Yijing Wang
2015-02-26  8:23     ` Yijing Wang
2015-02-26  8:23     ` Yijing Wang
2015-02-26  8:23     ` Yijing Wang
2015-02-26  8:23   ` 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=1424914187-21027-22-git-send-email-wangyijing@huawei.com \
    --to=wangyijing@huawei.com \
    --cc=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=davem@davemloft.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=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.