From: Yinghai Lu <yinghai@kernel.org>
To: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
Jesse Barnes <jbarnes@virtuousgeek.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Alex Chiang <achiang@hp.com>,
Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Ingo Molnar <mingo@elte.hu>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Subject: [PATCH 7/9] pci: introduce pci_assign_unassigned_bridge_resources
Date: Wed, 25 Nov 2009 11:59:43 -0800 [thread overview]
Message-ID: <4B0D8CAF.7040007@kernel.org> (raw)
In-Reply-To: <4B0D88A4.5050904@kernel.org>
for pciehp to use it later
pci_setup_bridge() will not check enabled for the slot bridge, otherwise
update res is not updated to bridge BAR. that is bridge is enabled already for
port service.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
drivers/pci/setup-bus.c | 94 +++++++++++++++++++++++++++++++++++++++++++++---
include/linux/pci.h | 1
2 files changed, 91 insertions(+), 4 deletions(-)
Index: linux-2.6/drivers/pci/setup-bus.c
===================================================================
--- linux-2.6.orig/drivers/pci/setup-bus.c
+++ linux-2.6/drivers/pci/setup-bus.c
@@ -68,6 +68,51 @@ static void free_failed_list(struct reso
head->next = NULL;
}
+static void pdev_assign_resources_sorted(struct pci_dev *dev,
+ struct resource_list *fail_head)
+{
+ struct resource *res;
+ struct resource_list head, *list, *tmp;
+ int idx;
+ u16 class = dev->class >> 8;
+
+ head.next = NULL;
+
+ /* Don't touch classless devices or host bridges or ioapics. */
+ if (class == PCI_CLASS_NOT_DEFINED || class == PCI_CLASS_BRIDGE_HOST)
+ return;
+
+ /* Don't touch ioapic devices already enabled by firmware */
+ if (class == PCI_CLASS_SYSTEM_PIC) {
+ u16 command;
+ pci_read_config_word(dev, PCI_COMMAND, &command);
+ if (command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))
+ return;
+ }
+
+ pdev_sort_resources(dev, &head);
+
+ for (list = head.next; list;) {
+ res = list->res;
+ idx = res - &list->dev->resource[0];
+ if (pci_assign_resource(list->dev, idx)) {
+ if (fail_head && !pci_is_root_bus(list->dev->bus)) {
+ /*
+ * device need to keep flags and size
+ * for second try
+ */
+ add_to_failed_list(fail_head, list->dev, res);
+ } else {
+ res->start = 0;
+ res->end = 0;
+ res->flags = 0;
+ }
+ }
+ tmp = list;
+ list = list->next;
+ kfree(tmp);
+ }
+}
static void pbus_assign_resources_sorted(const struct pci_bus *bus,
struct resource_list *fail_head)
{
@@ -281,9 +326,6 @@ static void __pci_setup_bridge(struct pc
{
struct pci_dev *bridge = bus->self;
- if (pci_is_enabled(bridge))
- return;
-
dev_info(&bridge->dev, "PCI bridge to [bus %02x-%02x]\n",
bus->secondary, bus->subordinate);
@@ -646,7 +688,8 @@ static void __ref __pci_bus_assign_resou
switch (dev->class >> 8) {
case PCI_CLASS_BRIDGE_PCI:
- pci_setup_bridge(b);
+ if (!pci_is_enabled(dev))
+ pci_setup_bridge(b);
break;
case PCI_CLASS_BRIDGE_CARDBUS:
@@ -667,6 +710,34 @@ void __ref pci_bus_assign_resources(cons
}
EXPORT_SYMBOL(pci_bus_assign_resources);
+static void __ref __pci_bridge_assign_resources(const struct pci_dev *bridge,
+ struct resource_list *fail_head)
+{
+ struct pci_bus *b;
+
+ pdev_assign_resources_sorted((struct pci_dev *)bridge, fail_head);
+
+ b = bridge->subordinate;
+ if (!b)
+ return;
+
+ __pci_bus_assign_resources(b, fail_head);
+
+ switch (bridge->class >> 8) {
+ case PCI_CLASS_BRIDGE_PCI:
+ pci_setup_bridge(b);
+ break;
+
+ case PCI_CLASS_BRIDGE_CARDBUS:
+ pci_setup_cardbus(b);
+ break;
+
+ default:
+ dev_info(&bridge->dev, "not setting up bridge for bus "
+ "%04x:%02x\n", pci_domain_nr(b), b->number);
+ break;
+ }
+}
static void release_children_resource(struct resource *r)
{
struct resource *p;
@@ -894,3 +965,18 @@ enable_and_dump:
pci_bus_dump_resources(bus);
}
}
+
+void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge)
+{
+ struct pci_bus *bus;
+ struct pci_bus *parent = bridge->subordinate;
+ int retval;
+
+ pci_bus_size_bridges(parent);
+ pci_clear_master(bridge);
+ __pci_bridge_assign_resources(bridge, NULL);
+ retval = pci_reenable_device(bridge);
+ pci_set_master(bridge);
+ pci_enable_bridges(parent);
+}
+EXPORT_SYMBOL_GPL(pci_assign_unassigned_bridge_resources);
Index: linux-2.6/include/linux/pci.h
===================================================================
--- linux-2.6.orig/include/linux/pci.h
+++ linux-2.6/include/linux/pci.h
@@ -768,6 +768,7 @@ void pci_bus_assign_resources(const stru
void pci_bus_size_bridges(struct pci_bus *bus);
int pci_claim_resource(struct pci_dev *, int);
void pci_assign_unassigned_resources(void);
+void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
void pdev_enable_device(struct pci_dev *);
void pdev_sort_resources(struct pci_dev *, struct resource_list *);
int pci_enable_resources(struct pci_dev *, int mask);
next prev parent reply other threads:[~2009-11-25 20:01 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-21 7:19 [PATCH] pci: pciehp update the slot bridge res to get big range for pcie devices Yinghai Lu
2009-10-21 18:57 ` Alex Chiang
2009-10-22 0:29 ` [PATCH] pci: pciehp update the slot bridge res to get big range for pcie devices - v2 Yinghai Lu
2009-10-26 4:54 ` [PATCH] pci: pciehp update the slot bridge res to get big range for pcie devices Kenji Kaneshige
2009-10-26 5:49 ` Yinghai Lu
2009-10-26 7:48 ` Kenji Kaneshige
2009-10-26 8:25 ` Yinghai Lu
2009-10-26 10:27 ` Kenji Kaneshige
2009-10-26 17:59 ` Yinghai Lu
2009-10-26 18:52 ` Yinghai Lu
2009-10-28 8:31 ` Kenji Kaneshige
2009-10-28 17:44 ` Yinghai Lu
2009-10-28 17:52 ` Bjorn Helgaas
2009-10-28 18:37 ` Yinghai Lu
2009-10-28 19:00 ` Eric W. Biederman
2009-10-28 19:12 ` Yinghai Lu
2009-10-28 19:36 ` Eric W. Biederman
2009-10-28 19:50 ` Yinghai Lu
2009-10-28 21:30 ` Eric W. Biederman
2009-10-28 21:39 ` Yinghai Lu
2009-10-28 22:25 ` Yinghai Lu
2009-10-28 22:26 ` Yinghai Lu
2009-10-29 8:16 ` Eric W. Biederman
2009-10-29 9:03 ` Yinghai Lu
2009-10-29 15:43 ` Eric W. Biederman
2009-10-29 17:00 ` Yinghai Lu
2009-10-29 19:48 ` Eric W. Biederman
2009-10-29 19:55 ` Yinghai Lu
2009-10-30 8:36 ` [PATCH 1/2] pci: release that leaf bridge' resource that is not big -v8 Yinghai Lu
2009-10-30 8:37 ` [PATCH 2/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v8 Yinghai Lu
2009-11-10 8:00 ` [PATCH 1/2] pci: release that leaf bridge' resource that is not big -v8 Kenji Kaneshige
2009-10-29 13:21 ` [PATCH] pci: pciehp update the slot bridge res to get big range for pcie devices Bjorn Helgaas
2009-10-29 15:13 ` Eric W. Biederman
2009-10-29 15:43 ` Bjorn Helgaas
2009-10-29 19:28 ` Eric W. Biederman
2009-10-29 19:36 ` Bjorn Helgaas
[not found] ` <4AE89933.8030809@kernel.org>
2009-10-28 19:20 ` [PATCH 2/2] pci: only release that resource index is less than 3 -v5 Yinghai Lu
2009-10-29 6:34 ` Kenji Kaneshige
2009-10-29 9:03 ` Yinghai Lu
2009-10-28 19:21 ` [PATCH 1/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v4 Yinghai Lu
2009-10-29 8:28 ` Kenji Kaneshige
2009-10-29 8:30 ` Yinghai Lu
2009-10-29 8:55 ` Kenji Kaneshige
2009-10-29 8:57 ` Yinghai Lu
2009-10-29 9:52 ` [PATCH 1/2] pci: release that leaf bridge' resource index is not used -v6 Yinghai Lu
2009-10-29 16:31 ` Jesse Barnes
2009-10-29 17:10 ` Yinghai Lu
2009-10-29 17:51 ` Jesse Barnes
[not found] ` <4AE9657F.7010302@kernel.org>
2009-10-29 9:52 ` [PATCH 2/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v5 Yinghai Lu
2009-11-04 17:30 ` Jesse Barnes
2009-11-04 18:52 ` Yinghai Lu
2009-11-05 1:40 ` [PATCH 1/2] pci: release that leaf bridge' resource that is not big -v9 Yinghai Lu
2009-11-05 1:40 ` [PATCH 2/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v9 Yinghai Lu
2009-11-05 20:47 ` Alex Chiang
2009-11-05 21:06 ` Yinghai Lu
2009-11-07 5:41 ` [PATCH 2/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v10 Yinghai Lu
2009-11-07 5:43 ` Yinghai Lu
2009-11-10 8:07 ` Kenji Kaneshige
2009-11-10 9:48 ` Yinghai Lu
2009-11-13 6:08 ` Kenji Kaneshige
2009-11-13 6:26 ` Yinghai Lu
2009-11-13 8:33 ` Kenji Kaneshige
2009-11-14 8:50 ` [PATCH 1/2] pci: release that leaf bridge' resource that is not big -v11 Yinghai Lu
2009-11-24 1:08 ` Kenji Kaneshige
2009-11-24 1:14 ` Yinghai Lu
[not found] ` <4B0B3C13.9030502@jp.fujit! su.com>
2009-11-24 1:51 ` Kenji Kaneshige
2009-11-24 2:32 ` Yinghai Lu
2009-11-24 23:18 ` Yinghai Lu
2009-11-25 11:24 ` Kenji Kaneshige
2009-11-25 11:25 ` [PATCH 1/2] pciehp: remove redundancy in bridge resource allocation Kenji Kaneshige
2009-11-25 17:37 ` Yinghai Lu
2009-11-25 11:27 ` [PATCH 2/2] pciehp: add support for bridge resource reallocation Kenji Kaneshige
2009-11-25 17:44 ` [PATCH 1/2] pci: release that leaf bridge' resource that is not big -v11 Yinghai Lu
2009-11-26 6:43 ` Kenji Kaneshige
2009-11-26 7:30 ` Yinghai
2009-11-27 7:12 ` Kenji Kaneshige
2009-11-27 7:52 ` Yinghai Lu
2009-11-27 8:26 ` Kenji Kaneshige
2009-11-27 23:13 ` Yinghai Lu
2009-11-25 19:58 ` [PATCH 0/9] pci: update pci bridge resource to get more big range for devices under it - v12 Yinghai Lu
[not found] ` <4B0D88A4.5050904@kerne! l.org>
[not found] ` <4B0D88A4.5050904@kernel.org>
2009-11-25 19:59 ` [PATCH 1/9] pci: separate pci_setup_bridge to small functions Yinghai Lu
2009-11-25 19:59 ` [PATCH 2/9] pci: add pci_bridge_release_unused_res and pci_bus_release_unused_bridge_res Yinghai Lu
2009-11-25 19:59 ` [PATCH 3/9] pci: don't dump it when bus resource flags is not set Yinghai Lu
2009-11-25 19:59 ` [PATCH 4/9] pci: add failed_list to record failed one for pci_bus_assign_resources Yinghai Lu
2009-11-25 19:59 ` [PATCH 5/9] pci: update leaf bridge res to get more big range in pci assign unssign Yinghai Lu
2009-11-25 19:59 ` [PATCH 6/9] pci: don't shrink bridge resources Yinghai Lu
2009-11-25 19:59 ` Yinghai Lu [this message]
2009-11-25 19:59 ` [PATCH 8/9] pci: pciehp clean flow in pciehp_configure_device Yinghai Lu
2009-11-25 19:59 ` [PATCH 9/9] pci: pciehp second try to get big range for pcie devices Yinghai Lu
2009-11-28 7:34 ` [PATCH 0/9] pci: update pci bridge resource to get more big range for devices under it - v13 Yinghai Lu
2009-11-28 8:15 ` Yinghai Lu
2009-11-30 7:10 ` Kenji Kaneshige
2009-11-30 7:14 ` Yinghai Lu
2009-11-30 7:26 ` Kenji Kaneshige
2009-11-30 7:43 ` Yinghai Lu
2009-11-30 8:19 ` Yinghai Lu
2009-11-30 8:44 ` Kenji Kaneshige
2009-12-16 20:54 ` Jesse Barnes
2009-12-16 21:11 ` Alex Chiang
2009-12-16 22:21 ` Yinghai Lu
2009-12-16 22:27 ` Yinghai Lu
2009-12-16 22:44 ` Alex Chiang
[not found] ` <4B10D084.8070608@kerne! l.org>
[not found] ` <4B10D084.8070608@kernel.org>
2009-11-28 7:34 ` [PATCH 1/9] pci: separate pci_setup_bridge to small functions Yinghai Lu
2009-12-16 20:41 ` Jesse Barnes
2009-12-17 11:03 ` Rolf Eike Beer
2009-11-28 7:35 ` [PATCH 2/9] pci: add pci_bridge_release_unused_res and pci_bus_release_unused_bridge_res Yinghai Lu
2009-12-16 20:49 ` Jesse Barnes
2009-12-16 22:19 ` Yinghai Lu
2009-11-28 7:35 ` [PATCH 3/9] pci: don't dump it when bus resource flags is not used Yinghai Lu
2009-12-16 20:50 ` Jesse Barnes
2009-12-16 22:20 ` Yinghai Lu
2009-11-28 7:35 ` [PATCH 4/9] pci: add failed_list to record failed one for pci_bus_assign_resources -v2 Yinghai Lu
2009-11-28 7:35 ` [PATCH 5/9] pci: update leaf bridge res to get more big range in pci assign unssign -v2 Yinghai Lu
2009-11-30 21:55 ` [PATCH 5/9] pci: update leaf bridge res to get more big range in pci assign unssign -v3 Yinghai Lu
2009-11-28 7:36 ` [PATCH 6/9] pci: don't shrink bridge resources Yinghai Lu
2009-11-28 7:36 ` [PATCH 7/9] pci: introduce pci_assign_unassigned_bridge_resources -v2 Yinghai Lu
2009-11-28 7:36 ` [PATCH 8/9] pci: pciehp clean flow in pciehp_configure_device Yinghai Lu
2009-11-28 7:36 ` [PATCH 9/9] pci: pciehp second try to get big range for pcie devices -v2 Yinghai Lu
2009-12-01 1:19 ` [PATCH 1/2] pci: pci_bridge_release_res Yinghai Lu
2009-12-07 21:42 ` Patrick Keller
2009-12-07 21:57 ` Yinghai Lu
2009-12-01 1:21 ` [PATCH 2/2] pciehp: add support for bridge resource reallocation -v2 Yinghai Lu
2009-11-14 8:51 ` [PATCH 2/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v11 Yinghai Lu
2009-10-26 8:27 ` [PATCH] pci: pciehp update the slot bridge res to get big range for pcie devices - v3 Yinghai Lu
2009-10-27 8:09 ` [PATCH 1/4] pci: pciehp update the slot bridge res to get big range for pcie devices - v4 Yinghai Lu
[not found] ` <4AE6A9CA.4060106@kernel.org>
2009-10-27 8:09 ` [PATCH 2/4] pci: revert "get larger bridge ranges when space is available" Yinghai Lu
2009-10-27 8:10 ` [PATCH 3/4] pci: only release that resource index is less than 3 -v3 Yinghai Lu
2009-10-27 8:10 ` [PATCH 4/4] pci: remove min_size for hotplug bridge Yinghai Lu
2009-10-27 9:20 ` Eric W. Biederman
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=4B0D8CAF.7040007@kernel.org \
--to=yinghai@kernel.org \
--cc=achiang@hp.com \
--cc=bjorn.helgaas@hp.com \
--cc=ebiederm@xmission.com \
--cc=ink@jurassic.park.msu.ru \
--cc=jbarnes@virtuousgeek.org \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mingo@elte.hu \
/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.