Re: 4.7 regression: ACPI: No IRQ available for PCI Interrupt Link [LNKD]. Try pci=noacpi or acpi=off

From: Sinan Kaya
Date: Tue Sep 27 2016 - 19:06:25 EST


On 9/27/2016 6:58 PM, Rafael J. Wysocki wrote:
>> :040000 040000 9bf16c388d23bb66e087809f069eafed18e46a8c bcac95fb33ee834aec7d23eab9eb0dc5e330c68c M drivers
> OK
>
> Sinan, can you help, please?
>
>

Sure, let's see what's going on. I was writing an email.

Can we apply this and collect the kernel log? It also helps to see the kernel log from a working
combination.

--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
From 9181f4b9ab405bc6c9412133aefef7676899733c Mon Sep 17 00:00:00 2001
From: Sinan Kaya <okaya@xxxxxxxxxxxxxx>
Date: Tue, 27 Sep 2016 18:35:15 -0400
Subject: [PATCH] acpi: pci_link: debug aids

Change-Id: I6c459cb5888d95f5f1ef7c0e2f138fb9c65f40e5
---
drivers/acpi/pci_link.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index c983bf7..44937f93 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -508,6 +508,8 @@ static int acpi_irq_get_penalty(int irq)
penalty += PIRQ_PENALTY_ISA_ALWAYS;
else
penalty += PIRQ_PENALTY_PCI_USING;
+
+ pr_info("%s:%d adding SCI penalty: %d\n", __func__, __LINE__, penalty);
}

if (irq < ACPI_MAX_ISA_IRQS)
@@ -604,6 +606,12 @@ static int acpi_pci_link_allocate(struct acpi_pci_link *link)
}
}
if (acpi_irq_get_penalty(irq) >= PIRQ_PENALTY_ISA_ALWAYS) {
+ for (i = (link->irq.possible_count - 1); i >= 0; i--) {
+ pr_info("penalty[%d] = 0x%x\n",
+ link->irq.possible[i],
+ acpi_irq_get_penalty(link->irq.possible[i]));
+ }
+
printk(KERN_ERR PREFIX "No IRQ available for %s [%s]. "
"Try pci=noacpi or acpi=off\n",
acpi_device_name(link->device),
@@ -870,9 +878,12 @@ static int __init acpi_irq_penalty_update(char *str, int used)
*/
void acpi_penalize_isa_irq(int irq, int active)
{
- if ((irq >= 0) && (irq < ARRAY_SIZE(acpi_isa_irq_penalty)))
+ if ((irq >= 0) && (irq < ARRAY_SIZE(acpi_isa_irq_penalty))) {
acpi_isa_irq_penalty[irq] = acpi_irq_get_penalty(irq) +
(active ? PIRQ_PENALTY_ISA_USED : PIRQ_PENALTY_PCI_USING);
+ pr_info("%s:%d acpi_isa_irq_penalty[%d]=0x%x active = %d\n", __func__,
+ __LINE__, irq, acpi_irq_get_penalty(irq), active);
+ }
}

bool acpi_isa_irq_available(int irq)
--
1.9.1