From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rcsinet15.oracle.com ([148.87.113.117]:30597 "EHLO rcsinet15.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161132Ab2CSFrk (ORCPT ); Mon, 19 Mar 2012 01:47:40 -0400 From: Yinghai Lu To: Jesse Barnes , x86 Cc: Bjorn Helgaas , Andrew Morton , Linus Torvalds , Greg Kroah-Hartman , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Yinghai Lu Subject: [PATCH -v3 12/47] PCI: Make pci_rescan_bus_bridge_resize() use pci_scan_bridge instead Date: Sun, 18 Mar 2012 22:46:01 -0700 Message-Id: <1332135996-13860-13-git-send-email-yinghai@kernel.org> In-Reply-To: <1332135996-13860-1-git-send-email-yinghai@kernel.org> References: <1332135996-13860-1-git-send-email-yinghai@kernel.org> Sender: linux-pci-owner@vger.kernel.org List-ID: So after remove all children and then using setpci change bus register and rescan bridge could use new set bus number. Otherwise need to rescan parent bus, it would have too much overhead. also need to use pci_bus_add_single_device to make sure new change bus have directory /sys/../.../pci_bus. Signed-off-by: Yinghai Lu --- drivers/pci/probe.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index e51e1a5..a819e76 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2025,14 +2025,16 @@ EXPORT_SYMBOL(pci_scan_bus); */ unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge) { - unsigned int max; - struct pci_bus *bus = bridge->subordinate; + unsigned int max = 0; + int pass; + struct pci_bus *bus = bridge->bus; - max = pci_scan_child_bus(bus); + for (pass = 0; pass < 2; pass++) + max = pci_scan_bridge(bus, bridge, max, pass); pci_assign_unassigned_bridge_resources(bridge); - pci_bus_add_devices(bus); + pci_bus_add_single_device(bridge); return max; } -- 1.7.7