diff options
author | Sinan Kaya <okaya@codeaurora.org> | 2016-06-29 04:27:36 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-07-01 19:38:34 -0400 |
commit | 487cf917ed0d12afaf403d9d77684bf44b8c13be (patch) | |
tree | 32d3e2557cddb92a7b45e44f38c3350cba542d6c | |
parent | 4a6e68bf96c1fa293717d2f00a68a68c92fa4150 (diff) |
Revert "ACPI, PCI, IRQ: remove redundant code in acpi_irq_penalty_init()"
Trying to make the ISA and PCI init functionality common turned out
to be a bad idea, because the ISA path depends on external
functionality.
Restore the previous behavior and limit the refactoring to PCI
interrupts only.
Fixes: 1fcb6a813c4f "ACPI,PCI,IRQ: remove redundant code in acpi_irq_penalty_init()"
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Tested-by: Wim Osterholt <wim@djo.tudelft.nl>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | arch/x86/pci/acpi.c | 1 | ||||
-rw-r--r-- | drivers/acpi/pci_link.c | 36 | ||||
-rw-r--r-- | include/acpi/acpi_drivers.h | 1 |
3 files changed, 38 insertions, 0 deletions
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index b2a4e2a61f6b..3cd69832d7f4 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c | |||
@@ -396,6 +396,7 @@ int __init pci_acpi_init(void) | |||
396 | return -ENODEV; | 396 | return -ENODEV; |
397 | 397 | ||
398 | printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n"); | 398 | printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n"); |
399 | acpi_irq_penalty_init(); | ||
399 | pcibios_enable_irq = acpi_pci_irq_enable; | 400 | pcibios_enable_irq = acpi_pci_irq_enable; |
400 | pcibios_disable_irq = acpi_pci_irq_disable; | 401 | pcibios_disable_irq = acpi_pci_irq_disable; |
401 | x86_init.pci.init_irq = x86_init_noop; | 402 | x86_init.pci.init_irq = x86_init_noop; |
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index db7be62a8222..606083bb3f00 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c | |||
@@ -517,6 +517,42 @@ static int acpi_irq_get_penalty(int irq) | |||
517 | return penalty; | 517 | return penalty; |
518 | } | 518 | } |
519 | 519 | ||
520 | int __init acpi_irq_penalty_init(void) | ||
521 | { | ||
522 | struct acpi_pci_link *link; | ||
523 | int i; | ||
524 | |||
525 | /* | ||
526 | * Update penalties to facilitate IRQ balancing. | ||
527 | */ | ||
528 | list_for_each_entry(link, &acpi_link_list, list) { | ||
529 | |||
530 | /* | ||
531 | * reflect the possible and active irqs in the penalty table -- | ||
532 | * useful for breaking ties. | ||
533 | */ | ||
534 | if (link->irq.possible_count) { | ||
535 | int penalty = | ||
536 | PIRQ_PENALTY_PCI_POSSIBLE / | ||
537 | link->irq.possible_count; | ||
538 | |||
539 | for (i = 0; i < link->irq.possible_count; i++) { | ||
540 | if (link->irq.possible[i] < ACPI_MAX_ISA_IRQS) | ||
541 | acpi_isa_irq_penalty[link->irq. | ||
542 | possible[i]] += | ||
543 | penalty; | ||
544 | } | ||
545 | |||
546 | } else if (link->irq.active && | ||
547 | (link->irq.active < ACPI_MAX_ISA_IRQS)) { | ||
548 | acpi_isa_irq_penalty[link->irq.active] += | ||
549 | PIRQ_PENALTY_PCI_POSSIBLE; | ||
550 | } | ||
551 | } | ||
552 | |||
553 | return 0; | ||
554 | } | ||
555 | |||
520 | static int acpi_irq_balance = -1; /* 0: static, 1: balance */ | 556 | static int acpi_irq_balance = -1; /* 0: static, 1: balance */ |
521 | 557 | ||
522 | static int acpi_pci_link_allocate(struct acpi_pci_link *link) | 558 | static int acpi_pci_link_allocate(struct acpi_pci_link *link) |
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index 797ae2ec8eee..29c691265b49 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h | |||
@@ -78,6 +78,7 @@ | |||
78 | 78 | ||
79 | /* ACPI PCI Interrupt Link (pci_link.c) */ | 79 | /* ACPI PCI Interrupt Link (pci_link.c) */ |
80 | 80 | ||
81 | int acpi_irq_penalty_init(void); | ||
81 | int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *triggering, | 82 | int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *triggering, |
82 | int *polarity, char **name); | 83 | int *polarity, char **name); |
83 | int acpi_pci_link_free_irq(acpi_handle handle); | 84 | int acpi_pci_link_free_irq(acpi_handle handle); |