From: Jesse Barnes <jbarnes@virtuousgeek.org>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Tony Luck <tony.luck@intel.com>,
Dominik Brodowski <linux@dominikbrodowski.net>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org
Subject: Re: [PATCH 06/24] PCI: Add busn_res tracking in core
Date: Thu, 23 Feb 2012 12:20:23 -0800 [thread overview]
Message-ID: <20120223122023.4a196fff@jbarnes-desktop> (raw)
In-Reply-To: <CAE9FiQWBLpK-Tzmvf1dHeub4Yy2ziRBpnzYuEdBvdJASnbDqYw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 6274 bytes --]
On Wed, 8 Feb 2012 09:26:52 -0800
Yinghai Lu <yinghai@kernel.org> wrote:
> On Wed, Feb 8, 2012 at 8:08 AM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> > On Sat, Feb 4, 2012 at 10:57 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> >> update pci_scan_root_bus, and pci_scan_bus to insert root bus busn into
> >> iobusn_resource tree.
> >>
> >> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> >> ---
> >> drivers/pci/probe.c | 30 ++++++++++++++++++++++++++----
> >> drivers/pci/remove.c | 1 +
> >> include/linux/pci.h | 4 ++++
> >> 3 files changed, 31 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> >> index fabf9d0..cdd6e83 100644
> >> --- a/drivers/pci/probe.c
> >> +++ b/drivers/pci/probe.c
> >> @@ -1667,8 +1667,9 @@ void pci_bus_release_busn_res(struct pci_bus *b)
> >> res, ret ? "can not be" : "is");
> >> }
> >>
> >> -struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
> >> - struct pci_ops *ops, void *sysdata, struct list_head *resources)
> >> +struct pci_bus * __devinit pci_scan_root_bus_max(struct device *parent, int bus,
> >> + int bus_max, struct pci_ops *ops, void *sysdata,
> >> + struct list_head *resources)
> >> {
> >> struct pci_bus *b;
> >>
> >> @@ -1676,10 +1677,26 @@ struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
> >> if (!b)
> >> return NULL;
> >>
> >> + pci_bus_insert_busn_res(b, bus, bus_max);
> >> b->subordinate = pci_scan_child_bus(b);
> >> pci_bus_add_devices(b);
> >> return b;
> >> }
> >> +EXPORT_SYMBOL(pci_scan_root_bus_max);
> >> +
> >> +struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
> >> + struct pci_ops *ops, void *sysdata,
> >> + struct list_head *resources)
> >> +{
> >> + struct pci_bus *b;
> >> +
> >> + b = pci_scan_root_bus_max(parent, bus, 255, ops, sysdata, resources);
> >> +
> >> + if (b)
> >> + pci_bus_update_busn_res_end(b, b->subordinate);
> >> +
> >> + return b;
> >> +}
> >> EXPORT_SYMBOL(pci_scan_root_bus);
> >>
> >> /* Deprecated; use pci_scan_root_bus() instead */
> >> @@ -1692,9 +1709,11 @@ struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
> >> pci_add_resource(&resources, &ioport_resource);
> >> pci_add_resource(&resources, &iomem_resource);
> >> b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
> >> - if (b)
> >> + if (b) {
> >> + pci_bus_insert_busn_res(b, bus, 255);
> >> b->subordinate = pci_scan_child_bus(b);
> >> - else
> >> + pci_bus_update_busn_res_end(b, b->subordinate);
> >> + } else
> >> pci_free_resource_list(&resources);
> >> return b;
> >> }
> >> @@ -1710,7 +1729,10 @@ struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
> >> pci_add_resource(&resources, &iomem_resource);
> >> b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
> >> if (b) {
> >> + pci_bus_insert_busn_res(b, bus, 255);
> >> b->subordinate = pci_scan_child_bus(b);
> >> + pci_bus_update_busn_res_end(b, b->subordinate);
> >> +
> >> pci_bus_add_devices(b);
> >> } else {
> >> pci_free_resource_list(&resources);
> >> diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
> >> index 82f8ae5..5b679d2 100644
> >> --- a/drivers/pci/remove.c
> >> +++ b/drivers/pci/remove.c
> >> @@ -68,6 +68,7 @@ void pci_remove_bus(struct pci_bus *pci_bus)
> >>
> >> down_write(&pci_bus_sem);
> >> list_del(&pci_bus->node);
> >> + pci_bus_release_busn_res(pci_bus);
> >> up_write(&pci_bus_sem);
> >> if (!pci_bus->is_added)
> >> return;
> >> diff --git a/include/linux/pci.h b/include/linux/pci.h
> >> index 3da935c..d5b6786 100644
> >> --- a/include/linux/pci.h
> >> +++ b/include/linux/pci.h
> >> @@ -668,6 +668,10 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
> >> void pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax);
> >> void pci_bus_update_busn_res_end(struct pci_bus *b, int busmax);
> >> void pci_bus_release_busn_res(struct pci_bus *b);
> >> +struct pci_bus * __devinit pci_scan_root_bus_max(struct device *parent, int bus,
> >> + int busmax, struct pci_ops *ops,
> >> + void *sysdata,
> >> + struct list_head *resources);
> >> struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
> >> struct pci_ops *ops, void *sysdata,
> >> struct list_head *resources);
> >
> > Now we have both pci_bus_insert_busn_res() and
> > pci_scan_root_bus_max(). Why do we need both? I think it's too much
> > of a burden on architectures to expect them to understand both.
> >
> > Maybe some sample pseudo-code using both interfaces would help me
> > understand what you expect a typical architecture to do.
>
> We need to call pci_bus_insert_busn_res for root bus:
> 1. after that bus is allocated (...) : that busn_res is in the bus struct.
> 2. before pci_scan_child_bus
I agree with Bjorn; at the very least this has a really bad name. How
are people supposed to know which function to call? If it's just for
the primary scan at init, then it should be named as such. But ideally
it would be inside the existing scan_root_bus...
--
Jesse Barnes, Intel Open Source Technology Center
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2012-02-23 20:20 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-05 6:57 [PATCH -v5 0/24] PCI: allocate pci bus num range for unassigned bridge busn + pci rescan cleanup Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 01/24] PCI: Add iobusn_resource Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-06 18:48 ` Bjorn Helgaas
2012-02-06 18:48 ` Bjorn Helgaas
2012-02-06 18:55 ` Yinghai Lu
2012-02-06 18:55 ` Yinghai Lu
2012-02-10 20:51 ` Jesse Barnes
2012-02-10 23:40 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 02/24] PCI: add busn inline helper Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 03/24] Make %pR could handle bus resource with domain Yinghai Lu
2012-02-05 6:57 ` [PATCH 04/24] PCI: Add busn_res operation functions Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-06 18:59 ` Bjorn Helgaas
2012-02-06 18:59 ` Bjorn Helgaas
2012-02-06 20:45 ` Yinghai Lu
2012-02-12 23:51 ` Bjorn Helgaas
2012-02-12 23:51 ` Bjorn Helgaas
2012-02-13 0:03 ` Yinghai Lu
2012-02-13 0:03 ` Yinghai Lu
2012-02-13 0:11 ` Bjorn Helgaas
2012-02-05 6:57 ` [PATCH 05/24] PCI: add /proc/iobusn Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 06/24] PCI: Add busn_res tracking in core Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-08 16:08 ` Bjorn Helgaas
2012-02-08 16:08 ` Bjorn Helgaas
2012-02-08 17:26 ` Yinghai Lu
2012-02-08 17:26 ` Yinghai Lu
2012-02-23 20:20 ` Jesse Barnes [this message]
2012-02-23 20:20 ` Jesse Barnes
2012-02-05 6:57 ` [PATCH 07/24] PCI, x86: Register busn_res for root buses Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 08/24] PCI, ia64: " Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 09/24] PCI, powerpc: " Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-08 15:58 ` Bjorn Helgaas
2012-02-08 15:58 ` Bjorn Helgaas
2012-02-08 17:31 ` Yinghai Lu
2012-02-08 17:31 ` Yinghai Lu
2012-02-08 22:02 ` Benjamin Herrenschmidt
2012-02-09 19:24 ` Bjorn Helgaas
2012-02-09 19:24 ` Bjorn Helgaas
2012-02-09 21:35 ` Benjamin Herrenschmidt
2012-02-09 21:35 ` Benjamin Herrenschmidt
2012-02-23 20:25 ` Jesse Barnes
2012-02-23 20:51 ` Bjorn Helgaas
2012-02-23 20:51 ` Bjorn Helgaas
2012-02-24 22:24 ` Jesse Barnes
2012-02-24 22:24 ` Jesse Barnes
2012-02-25 7:47 ` Yinghai Lu
2012-02-25 7:47 ` Yinghai Lu
2012-02-27 22:44 ` Bjorn Helgaas
2012-02-27 22:44 ` Bjorn Helgaas
2012-02-05 6:57 ` [PATCH 10/24] PCI, parisc: " Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 11/24] PCI: Add pci_bus_extend/shrink_top() Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 12/24] PCI: Probe safe range that we can use for unassigned bridge Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 13/24] PCI: Strict checking of valid range for bridge Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 14/24] PCI: Allocate bus range instead of use max blindly Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:57 ` [PATCH 15/24] PCI: kill pci_fixup_parent_subordinate_busnr() Yinghai Lu
2012-02-05 6:57 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 16/24] PCI: Seperate child bus scanning to two passes overall Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 17/24] pcmcia: remove workaround for fixing pci parent bus subordinate Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 18/24] PCI: Double checking setting for bus register and bus struct Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 19/24] PCI, pciehp: Remove not needed bus number range checking Yinghai Lu
2012-02-05 6:58 ` [PATCH 20/24] PCI, sys: Use device_type and attr_groups with pci dev Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 21/24] PCI, sysfs: create rescan_bridge under /sys/.../pci/devices/... for pci bridges Yinghai Lu
2012-02-05 6:58 ` [PATCH 22/24] PCI: Add pci_bus_add_single_device() Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 23/24] PCI: make pci_rescan_bus_bridge_resize use pci_scan_bridge instead Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
2012-02-05 6:58 ` [PATCH 24/24] PCI: clean up rescan_bus_bridge_resize Yinghai Lu
2012-02-05 6:58 ` Yinghai Lu
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=20120223122023.4a196fff@jbarnes-desktop \
--to=jbarnes@virtuousgeek.org \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=bhelgaas@google.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@dominikbrodowski.net \
--cc=tony.luck@intel.com \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).