Merge branch 'pci/resource'
- Protect pci_reassign_bridge_resources() against concurrent addition/removal (Benjamin Herrenschmidt) - Fix bridge dma_ranges resource list cleanup (Rob Herring) - Add PCI_STD_NUM_BARS for the number of standard BARs (Denis Efremov) - Add "pci=hpmmiosize" and "pci=hpmmioprefsize" parameters to control the MMIO and prefetchable MMIO window sizes of hotplug bridges independently (Nicholas Johnson) - Fix MMIO/MMIO_PREF window assignment that assigned more space than desired (Nicholas Johnson) - Only enforce bus numbers from bridge EA if the bridge has EA devices downstream (Subbaraya Sundeep) * pci/resource: PCI: Do not use bus number zero from EA capability PCI: Avoid double hpmemsize MMIO window assignment PCI: Add "pci=hpmmiosize" and "pci=hpmmioprefsize" parameters PCI: Add PCI_STD_NUM_BARS for the number of standard BARs PCI: Fix missing bridge dma_ranges resource list cleanup PCI: Protect pci_reassign_bridge_resources() against concurrent addition/removal
This commit is contained in:
@@ -86,10 +86,17 @@ unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
|
||||
unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
|
||||
|
||||
#define DEFAULT_HOTPLUG_IO_SIZE (256)
|
||||
#define DEFAULT_HOTPLUG_MEM_SIZE (2*1024*1024)
|
||||
/* pci=hpmemsize=nnM,hpiosize=nn can override this */
|
||||
#define DEFAULT_HOTPLUG_MMIO_SIZE (2*1024*1024)
|
||||
#define DEFAULT_HOTPLUG_MMIO_PREF_SIZE (2*1024*1024)
|
||||
/* hpiosize=nn can override this */
|
||||
unsigned long pci_hotplug_io_size = DEFAULT_HOTPLUG_IO_SIZE;
|
||||
unsigned long pci_hotplug_mem_size = DEFAULT_HOTPLUG_MEM_SIZE;
|
||||
/*
|
||||
* pci=hpmmiosize=nnM overrides non-prefetchable MMIO size,
|
||||
* pci=hpmmioprefsize=nnM overrides prefetchable MMIO size;
|
||||
* pci=hpmemsize=nnM overrides both
|
||||
*/
|
||||
unsigned long pci_hotplug_mmio_size = DEFAULT_HOTPLUG_MMIO_SIZE;
|
||||
unsigned long pci_hotplug_mmio_pref_size = DEFAULT_HOTPLUG_MMIO_PREF_SIZE;
|
||||
|
||||
#define DEFAULT_HOTPLUG_BUS_SIZE 1
|
||||
unsigned long pci_hotplug_bus_size = DEFAULT_HOTPLUG_BUS_SIZE;
|
||||
@@ -675,7 +682,7 @@ struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < PCI_ROM_RESOURCE; i++) {
|
||||
for (i = 0; i < PCI_STD_NUM_BARS; i++) {
|
||||
struct resource *r = &dev->resource[i];
|
||||
|
||||
if (r->start && resource_contains(r, res))
|
||||
@@ -3788,7 +3795,7 @@ void pci_release_selected_regions(struct pci_dev *pdev, int bars)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PCI_STD_NUM_BARS; i++)
|
||||
if (bars & (1 << i))
|
||||
pci_release_region(pdev, i);
|
||||
}
|
||||
@@ -3799,7 +3806,7 @@ static int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PCI_STD_NUM_BARS; i++)
|
||||
if (bars & (1 << i))
|
||||
if (__pci_request_region(pdev, i, res_name, excl))
|
||||
goto err_out;
|
||||
@@ -3847,7 +3854,7 @@ EXPORT_SYMBOL(pci_request_selected_regions_exclusive);
|
||||
|
||||
void pci_release_regions(struct pci_dev *pdev)
|
||||
{
|
||||
pci_release_selected_regions(pdev, (1 << 6) - 1);
|
||||
pci_release_selected_regions(pdev, (1 << PCI_STD_NUM_BARS) - 1);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_release_regions);
|
||||
|
||||
@@ -3866,7 +3873,8 @@ EXPORT_SYMBOL(pci_release_regions);
|
||||
*/
|
||||
int pci_request_regions(struct pci_dev *pdev, const char *res_name)
|
||||
{
|
||||
return pci_request_selected_regions(pdev, ((1 << 6) - 1), res_name);
|
||||
return pci_request_selected_regions(pdev,
|
||||
((1 << PCI_STD_NUM_BARS) - 1), res_name);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_regions);
|
||||
|
||||
@@ -3888,7 +3896,7 @@ EXPORT_SYMBOL(pci_request_regions);
|
||||
int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
|
||||
{
|
||||
return pci_request_selected_regions_exclusive(pdev,
|
||||
((1 << 6) - 1), res_name);
|
||||
((1 << PCI_STD_NUM_BARS) - 1), res_name);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_regions_exclusive);
|
||||
|
||||
@@ -6401,8 +6409,13 @@ static int __init pci_setup(char *str)
|
||||
pcie_ecrc_get_policy(str + 5);
|
||||
} else if (!strncmp(str, "hpiosize=", 9)) {
|
||||
pci_hotplug_io_size = memparse(str + 9, &str);
|
||||
} else if (!strncmp(str, "hpmmiosize=", 11)) {
|
||||
pci_hotplug_mmio_size = memparse(str + 11, &str);
|
||||
} else if (!strncmp(str, "hpmmioprefsize=", 15)) {
|
||||
pci_hotplug_mmio_pref_size = memparse(str + 15, &str);
|
||||
} else if (!strncmp(str, "hpmemsize=", 10)) {
|
||||
pci_hotplug_mem_size = memparse(str + 10, &str);
|
||||
pci_hotplug_mmio_size = memparse(str + 10, &str);
|
||||
pci_hotplug_mmio_pref_size = pci_hotplug_mmio_size;
|
||||
} else if (!strncmp(str, "hpbussize=", 10)) {
|
||||
pci_hotplug_bus_size =
|
||||
simple_strtoul(str + 10, &str, 0);
|
||||
|
Reference in New Issue
Block a user