extern void pci_disable_bridge_window(struct pci_dev *dev);
#else
#define is_reassigndev(dev) 0
-static inline void pci_disable_bridge_window(struct pci_dev *dev) {}
#endif
#include "pci.h"
+#ifdef CONFIG_PCI_REASSIGN
/*
* This quirk function disables the device and releases resources
* which is specified by kernel's boot parameter 'reassigndev'.
(dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
pci_disable_bridge_window(dev);
}
- return;
}
}
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_release_resources);
+#endif /* CONFIG_PCI_REASSIGN */
/* The Mellanox Tavor device gives false positive parity errors
* Mark this device with a broken_parity_status, to allow
continue;
r_size = r->end - r->start + 1;
- if (reassign)
+ if ((i < PCI_BRIDGE_RESOURCES) && reassign)
r_size = ALIGN(r_size, PAGE_SIZE);
/* For bridges size != alignment */
pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
{
int i;
+ int reassigndev = is_reassigndev(dev);
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
struct resource *r;
if (!(r->flags) || r->parent)
continue;
+
+ if (i < PCI_BRIDGE_RESOURCES && (r->flags & IORESOURCE_MEM) &&
+ reassigndev)
+ r_align = ALIGN(r_align, PAGE_SIZE);
+
if (!r_align) {
printk(KERN_WARNING "PCI: Ignore bogus resource %d "
"[%llx:%llx] of %s\n",
align = (idx < PCI_BRIDGE_RESOURCES) ?
ln->res->end - ln->res->start + 1 :
ln->res->start;
+ if ((idx < PCI_BRIDGE_RESOURCES) &&
+ (ln->res->flags & IORESOURCE_MEM) &&
+ is_reassigndev(ln->dev))
+ align = ALIGN(align, PAGE_SIZE);
}
if (r_align > align) {
tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);