|
@@ -4947,6 +4947,11 @@ void pci_ignore_hotplug(struct pci_dev *dev)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(pci_ignore_hotplug);
|
|
|
|
|
|
+resource_size_t __weak pcibios_default_alignment(void)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
#define RESOURCE_ALIGNMENT_PARAM_SIZE COMMAND_LINE_SIZE
|
|
|
static char resource_alignment_param[RESOURCE_ALIGNMENT_PARAM_SIZE] = {0};
|
|
|
static DEFINE_SPINLOCK(resource_alignment_lock);
|
|
@@ -4962,14 +4967,15 @@ static resource_size_t pci_specified_resource_alignment(struct pci_dev *dev)
|
|
|
{
|
|
|
int seg, bus, slot, func, align_order, count;
|
|
|
unsigned short vendor, device, subsystem_vendor, subsystem_device;
|
|
|
- resource_size_t align = 0;
|
|
|
+ resource_size_t align = pcibios_default_alignment();
|
|
|
char *p;
|
|
|
|
|
|
spin_lock(&resource_alignment_lock);
|
|
|
p = resource_alignment_param;
|
|
|
- if (!*p)
|
|
|
+ if (!*p && !align)
|
|
|
goto out;
|
|
|
if (pci_has_flag(PCI_PROBE_ONLY)) {
|
|
|
+ align = 0;
|
|
|
pr_info_once("PCI: Ignoring requested alignments (PCI_PROBE_ONLY)\n");
|
|
|
goto out;
|
|
|
}
|