From: Yinghai Lu <yinghai@kernel.org>
To: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
Jesse Barnes <jbarnes@virtuousgeek.org>,
Alex Chiang <achiang@hp.com>,
Bjorn Helgaas <bjorn.helgaas@hp.com>, 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: Re: [PATCH 1/2] pci: pciehp update the slot bridge res to get big range for pcie devices - v4
Date: Thu, 29 Oct 2009 01:57:43 -0700 [thread overview]
Message-ID: <4AE95907.5050300@kernel.org> (raw)
In-Reply-To: <4AE9588E.90708@jp.fujitsu.com>
Kenji Kaneshige wrote:
> Yinghai Lu wrote:
>> Kenji Kaneshige wrote:
>>> Yinghai Lu wrote:
>>>> move out bus_size_bridges and assign resources out of
>>>> pciehp_add_bridge()
>>>> and at last do them all together one time including slot bridge, to
>>>> avoid to
>>>> call assign resources several times, when there are several bridges
>>>> under the
>>>> slot bridge.
>>>>
>>>> need to introduce pci_bridge_assign_resources there.
>>>>
>>>> handle the case the slot bridge that doesn't get pre-allocated big
>>>> enough res
>>>> from FW.
>>>> for example pcie devices need 256M, but the bridge only get
>>>> preallocated 2M...
>>>>
>>>> pci_setup_bridge() will take extra check_enabled for the slot bridge,
>>>> otherwise
>>>> update res is not updated to bridge BAR. that is bridge is enabled
>>>> already for
>>>> port service.
>>>>
>>>> -v2: address Alex's concern about pci remove/rescan feature about
>>>> pci_setup_bridge changes.
>>>> -v3: Kenji pointed out that pci_config_slot need to be called before
>>>> pci_bus_add_devices()
>>>> -v4: move out pci_is_enabled checkout of pci_setup_bridge()
>>>>
>>>> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>>>>
>>>> ---
>>>> drivers/pci/hotplug/pciehp_pci.c | 29 ++++++++++++---
>>>> drivers/pci/setup-bus.c | 73
>>>> ++++++++++++++++++++++++++++++++++++---
>>>> include/linux/pci.h | 1 3 files changed, 93
>>>> insertions(+), 10 deletions(-)
>>>>
>>>> Index: linux-2.6/drivers/pci/hotplug/pciehp_pci.c
>>>> ===================================================================
>>>> --- linux-2.6.orig/drivers/pci/hotplug/pciehp_pci.c
>>>> +++ linux-2.6/drivers/pci/hotplug/pciehp_pci.c
>>>> @@ -53,19 +53,18 @@ static int __ref pciehp_add_bridge(struc
>>>> busnr = pci_scan_bridge(parent, dev, busnr, pass);
>>>> if (!dev->subordinate)
>>>> return -1;
>>>> - pci_bus_size_bridges(dev->subordinate);
>>>> - pci_bus_assign_resources(parent);
>>>> - pci_enable_bridges(parent);
>>>> - pci_bus_add_devices(parent);
>>>> +
>>>> return 0;
>>>> }
>>>>
>>>> int pciehp_configure_device(struct slot *p_slot)
>>>> {
>>>> struct pci_dev *dev;
>>>> - struct pci_bus *parent = p_slot->ctrl->pcie->port->subordinate;
>>>> + struct pci_dev *bridge = p_slot->ctrl->pcie->port;
>>>> + struct pci_bus *parent = bridge->subordinate;
>>>> int num, fn;
>>>> struct controller *ctrl = p_slot->ctrl;
>>>> + int retval;
>>>>
>>>> dev = pci_get_slot(parent, PCI_DEVFN(0, 0));
>>>> if (dev) {
>>>> @@ -96,12 +95,30 @@ int pciehp_configure_device(struct slot
>>>> (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
>>>> pciehp_add_bridge(dev);
>>>> }
>>>> + pci_dev_put(dev);
>>>> + }
>>>> +
>>>> + pci_bus_size_bridges(parent);
>>>> + pci_clear_master(bridge);
>>>> + pci_bridge_assign_resources(bridge);
>>>> + retval = pci_reenable_device(bridge);
>>>> + pci_set_master(bridge);
>>>> + pci_enable_bridges(parent);
>>>> +
>>>> + for (fn = 0; fn < 8; fn++) {
>>>> + dev = pci_get_slot(parent, PCI_DEVFN(0, fn));
>>>> + if (!dev)
>>>> + continue;
>>>> + if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
>>>> + pci_dev_put(dev);
>>>> + continue;
>>>> + }
>>>> pci_configure_slot(dev);
>>>> pci_dev_put(dev);
>>>> }
>>>>
>>>> - pci_bus_assign_resources(parent);
>>>> pci_bus_add_devices(parent);
>>>> +
>>>> return 0;
>>>> }
>>>>
>>>> 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
>>>> @@ -27,6 +27,44 @@
>>>> #include <linux/slab.h>
>>>> #include "pci.h"
>>>>
>>>> +static void pdev_assign_resources_sorted(struct pci_dev *dev)
>>>> +{
>>>> + 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)) {
>>>> + 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 pci_dev *dev;
>>>> @@ -144,9 +182,6 @@ static void pci_setup_bridge(struct pci_
>>>> u32 l, bu, lu, io_upper16;
>>>> int pref_mem64;
>>>>
>>>> - if (pci_is_enabled(bridge))
>>>> - return;
>>>> -
>>>> dev_info(&bridge->dev, "PCI bridge, secondary bus %04x:%02x\n",
>>>> pci_domain_nr(bus), bus->number);
>>>>
>>>> @@ -541,6 +576,35 @@ void __ref pci_bus_size_bridges(struct p
>>>> }
>>>> EXPORT_SYMBOL(pci_bus_size_bridges);
>>>>
>>>> +void __ref pci_bridge_assign_resources(const struct pci_dev *bridge)
>>>> +{
>>>> + struct pci_bus *b;
>>>> +
>>>> + pdev_assign_resources_sorted((struct pci_dev *)bridge);
>>>> +
>>>> + b = bridge->subordinate;
>>>> + if (!b)
>>>> + return;
>>>> +
>>>> + pci_bus_assign_resources(b);
>>>> +
>>>> + 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;
>>>> + }
>>>> +}
>>>> +EXPORT_SYMBOL(pci_bridge_assign_resources);
>>>> +
>>>> void __ref pci_bus_assign_resources(const struct pci_bus *bus)
>>>> {
>>>> struct pci_bus *b;
>>>> @@ -557,7 +621,8 @@ void __ref pci_bus_assign_resources(cons
>>>>
>>>> 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:
>>>> Index: linux-2.6/include/linux/pci.h
>>>> ===================================================================
>>>> --- linux-2.6.orig/include/linux/pci.h
>>>> +++ linux-2.6/include/linux/pci.h
>>>> @@ -756,6 +756,7 @@ ssize_t pci_write_vpd(struct pci_dev *de
>>>> int pci_vpd_truncate(struct pci_dev *dev, size_t size);
>>>>
>>>> /* Helper functions for low-level code
>>>> (drivers/pci/setup-[bus,res].c) */
>>>> +void pci_bridge_assign_resources(const struct pci_dev *bridge);
>>>> void pci_bus_assign_resources(const struct pci_bus *bus);
>>>> void pci_bus_size_bridges(struct pci_bus *bus);
>>>> int pci_claim_resource(struct pci_dev *, int);
>>>>
>>> Does this patch work without [PATCH 2/2]? I don't understand who
>>> releases resouces? Does find_free_bus_resource() still release
>>> resources?
>>
>> need to work with [2/2].
>>
>
> Ok. Could you rearrange the set of patches with the right pieces and
> with the right order? It's very difficult for me to understand and
> review the current patches.
ok
>
> By the way, is release_resource() in find_free_bus_resource() already
> removed?
YES. Jesse sent request to Linus to revert that.
YH
next prev parent reply other threads:[~2009-10-29 8:58 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 [this message]
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 ` [PATCH 7/9] pci: introduce pci_assign_unassigned_bridge_resources Yinghai Lu
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=4AE95907.5050300@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox