From: Andreas Noever <andreas.noever@gmail.com>
To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
bhelgaas@google.com
Cc: Andreas Noever <andreas.noever@gmail.com>
Subject: [PATCH 5/8] PCI: Make sure bus number resources stay within their parents bounds.
Date: Thu, 23 Jan 2014 21:59:25 +0100 [thread overview]
Message-ID: <1390510768-5652-6-git-send-email-andreas.noever@gmail.com> (raw)
In-Reply-To: <1390510768-5652-1-git-send-email-andreas.noever@gmail.com>
Right now we use 0xff for busn_res.end when probing and later reduce it
to the value that is actually used. This does not work if a parent
bridge has already a lower subordinate value. For example during hotplug of a
new bridge below an already configured bridge the following message is
printed from pci_bus_insert_busn_res:
pci_bus 0000:06: busn_res: can not insert [bus 06-ff] under [bus 05-9b]
(conflicts with (null) [bus 05-9b])
This patch clamps the bus range to that of the parent and also ensures
that we do not exceed the parents range when assigning the final
subordinate value.
We also check that busses configured by the firmware fit into their
parents bounds.
Signed-off-by: Andreas Noever <andreas.noever@gmail.com>
---
drivers/pci/probe.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index fe6e10e..42ee0c0 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -782,7 +782,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
/* Check if setup is sensible at all */
if (!pass &&
(primary != bus->number || secondary <= bus->number ||
- secondary > subordinate)) {
+ secondary > subordinate || subordinate > bus->busn_res.end)) {
dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
secondary, subordinate);
broken = 1;
@@ -854,7 +854,8 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
child = pci_add_new_bus(bus, dev, max+1);
if (!child)
goto out;
- pci_bus_insert_busn_res(child, max+1, 0xff);
+ pci_bus_insert_busn_res(child, max+1,
+ bus->busn_res.end);
}
max++;
buses = (buses & 0xff000000)
@@ -927,6 +928,12 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
/*
* Set the subordinate bus number to its real value.
*/
+ if (max > bus->busn_res.end) {
+ dev_warn(&dev->dev,
+ "bridge has max busn %02x, but can only accomodate up to %02x\n",
+ max, bus->busn_res.end);
+ max = bus->busn_res.end;
+ }
pci_bus_update_busn_res_end(child, max);
pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
}
--
1.8.5.3
next prev parent reply other threads:[~2014-01-23 21:00 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-23 20:59 [PATCH 0/8] PCI: cleanup pci_scan_bridge Andreas Noever
2014-01-23 20:59 ` [PATCH 1/8] PCI: Increment max correctly in pci_scan_bridge Andreas Noever
2014-01-23 20:59 ` [PATCH 2/8] PCI: Clarify the "scan anyway" comment " Andreas Noever
2014-01-23 20:59 ` [PATCH 3/8] PCI: Assign CardBus bus number only during the second pass Andreas Noever
2014-01-23 20:59 ` [PATCH 4/8] PCI: Use request_resource_conflict instead of insert_ for bus numbers Andreas Noever
2014-01-23 20:59 ` Andreas Noever [this message]
2014-01-23 20:59 ` [PATCH 6/8] PCI: Remove pci_fixup_parent_subordinate_busnr Andreas Noever
2014-01-23 20:59 ` [PATCH 7/8] PCI: Check for child busses which use more bus numbers than allocated Andreas Noever
2014-01-23 20:59 ` [PATCH 8/8] PCI: Don't scan random busses in pci_scan_bridge Andreas Noever
2014-02-11 0:16 ` [PATCH 0/8] PCI: cleanup pci_scan_bridge Bjorn Helgaas
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=1390510768-5652-6-git-send-email-andreas.noever@gmail.com \
--to=andreas.noever@gmail.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.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).