Thread (2 messages) 2 messages, 2 authors, 2015-11-15

[PATCH V3] acpi: add support for extended IRQ to PCI link

From: Andy Shevchenko <hidden>
Date: 2015-11-15 20:14:32
Also in: linux-acpi, linux-arm-msm, lkml

On Sun, Nov 15, 2015 at 10:00 PM, Sinan Kaya [off-list ref] wrote:
The ACPI compiler uses the extended format when used
interrupt numbers are greater than 256. The PCI link code
currently only supports simple interrupt format. The IRQ
numbers are represented using 32 bits when extended IRQ
syntax. This patch changes the interrupt number type to
32 bits and places an upper limit of 1020 as possible
interrupt id.

1020 is the maximum interrupt ID that can be assigned to
an ARM SPI interrupt according to ARM architecture.

Additional checks have been placed to prevent out of bounds
writes.
One comment below.
quoted hunk ↗ jump to hunk
@@ -541,14 +547,16 @@ static int acpi_pci_link_allocate(struct acpi_pci_link *link)
        else
                irq = link->irq.possible[link->irq.possible_count - 1];

-       if (acpi_irq_balance || !link->irq.active) {
+       if ((acpi_irq_balance || !link->irq.active) && (irq < ACPI_MAX_IRQS)) {
                /*
                 * Select the best IRQ.  This is done in reverse to promote
                 * the use of IRQs 9, 10, 11, and >15.
                 */
-               for (i = (link->irq.possible_count - 1); i >= 0; i--) {
-                       if (acpi_irq_penalty[irq] >
-                           acpi_irq_penalty[link->irq.possible[i]])
+               i = link->irq.possible_count;
+               while (--i) {
Actually it should be (--i >= 0). Sorry if I misled you.
+                       if ((link->irq.possible[i] < ACPI_MAX_IRQS) &&
+                           (acpi_irq_penalty[irq] >
+                           acpi_irq_penalty[link->irq.possible[i]]))
                                irq = link->irq.possible[i];
                }
        }

-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help