Re: [PATCH 3/3] pci: Make rescan bus could increase bridge resource size if needed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 02 May 2011 16:14:56 -0700
Yinghai Lu <yinghai@xxxxxxxxxx> wrote:

> 
> Current rescan will not touch bridge MMIO and IO.
> 
> Try to reuse pci_assign_unassigned_bridge_resources(bridge) to update bridge resource,
> if child devices need more resource.
> 
> only do that for bridges that all children get removed before. So do not release resources
> that could already be used by drivers of child devices.
> 
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
> 
> ---
>  drivers/pci/pci-sysfs.c |    5 ++++-
>  drivers/pci/probe.c     |   24 ++++++++++++++++++++++++
>  include/linux/pci.h     |    1 +
>  3 files changed, 29 insertions(+), 1 deletion(-)
> 
> Index: linux-2.6/drivers/pci/pci-sysfs.c
> ===================================================================
> --- linux-2.6.orig/drivers/pci/pci-sysfs.c
> +++ linux-2.6/drivers/pci/pci-sysfs.c
> @@ -313,7 +313,10 @@ dev_bus_rescan_store(struct device *dev,
>  
>  	if (val) {
>  		mutex_lock(&pci_remove_rescan_mutex);
> -		pci_rescan_bus(bus);
> +		if (!pci_is_root_bus(bus) && list_empty(&bus->devices))
> +			pci_rescan_bus_bridge_resize(bus->self);
> +		else
> +			pci_rescan_bus(bus);
>  		mutex_unlock(&pci_remove_rescan_mutex);
>  	}
>  	return count;
> Index: linux-2.6/drivers/pci/probe.c
> ===================================================================
> --- linux-2.6.orig/drivers/pci/probe.c
> +++ linux-2.6/drivers/pci/probe.c
> @@ -1518,6 +1518,30 @@ EXPORT_SYMBOL(pci_scan_bus_parented);
>  
>  #ifdef CONFIG_HOTPLUG
>  /**
> + * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
> + * @bridge: PCI bridge for the bus to scan
> + *
> + * Scan a PCI bus and child buses for new devices, adds them,
> + * and enables them, it will resize bridge mmio/io resource if it is possible
> + * for safe, caller should make sure that children get removed already.
> + *
> + * Returns the max number of subordinate bus discovered.
> + */
> +unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
> +{
> +	unsigned int max;
> +	struct pci_bus *bus = bridge->subordinate;
> +
> +	max = pci_scan_child_bus(bus);
> +
> +	pci_assign_unassigned_bridge_resources(bridge);
> +
> +	pci_bus_add_devices(bus);
> +
> +	return max;
> +}
> +
> +/**

Why return anything if the value will never be used?

-- 
Jesse Barnes, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux