From: Sinan Kaya <okaya@codeaurora.org>
To: linux-acpi@vger.kernel.org, timur@codeaurora.org,
cov@codeaurora.org, jcm@redhat.com, helgaas@kernel.org
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Len Brown <lenb@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH V5] acpi: add support for extended IRQ to PCI link
Date: Wed, 25 Nov 2015 09:27:41 -0500 [thread overview]
Message-ID: <5655C55D.80206@codeaurora.org> (raw)
In-Reply-To: <1448395843-23112-1-git-send-email-okaya@codeaurora.org>
On 11/24/2015 3:10 PM, Sinan Kaya wrote:
> The ACPI compiler uses the extended format when used interrupt numbers
> are greater than 256. The extended IRQ numbers use 32 bits for storing
> interrupts. The code already supports parsing extended IRQ type but is
> limited by 256 due to used data structure type (u8). 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 return an error when ACPI_MAX_IRQS
> is exceeded.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
> drivers/acpi/pci_link.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> index 7c8408b..8fe4e6f 100644
> --- a/drivers/acpi/pci_link.c
> +++ b/drivers/acpi/pci_link.c
> @@ -1,6 +1,7 @@
> /*
> * pci_link.c - ACPI PCI Interrupt Link Device Driver ($Revision: 34 $)
> *
> + * Copyright (c) 2015, The Linux Foundation. All rights reserved.
> * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
> * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
> * Copyright (C) 2002 Dominik Brodowski <devel@brodo.de>
> @@ -47,6 +48,14 @@ ACPI_MODULE_NAME("pci_link");
> #define ACPI_PCI_LINK_FILE_STATUS "state"
> #define ACPI_PCI_LINK_MAX_POSSIBLE 16
>
> +/*
> + * 1020 is the maximum interrupt ID that can be assigned to
> + * an ARM SPI interrupt according to ARM architecture.
> + */
> +#define ACPI_MAX_IRQS 1020
> +#define ACPI_MAX_ISA_IRQ 16
> +
> +
> static int acpi_pci_link_add(struct acpi_device *device,
> const struct acpi_device_id *not_used);
> static void acpi_pci_link_remove(struct acpi_device *device);
> @@ -67,12 +76,12 @@ static struct acpi_scan_handler pci_link_handler = {
> * later even the link is disable. Instead, we just repick the active irq
> */
> struct acpi_pci_link_irq {
> - u8 active; /* Current IRQ */
> + u32 active; /* Current IRQ */
> u8 triggering; /* All IRQs */
> u8 polarity; /* All IRQs */
> u8 resource_type;
> u8 possible_count;
> - u8 possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> + u32 possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> u8 initialized:1;
> u8 reserved:7;
> };
> @@ -147,6 +156,12 @@ static acpi_status acpi_pci_link_check_possible(struct acpi_resource *resource,
> p->interrupts[i]);
> continue;
> }
> + if (p->interrupts[i] > ACPI_MAX_IRQS) {
this should have been >=
> + pr_warn("IRQ %d exceeds max (%d)\n",
> + p->interrupts[i],
> + ACPI_MAX_IRQS);
> + continue;
> + }
> link->irq.possible[i] = p->interrupts[i];
> link->irq.possible_count++;
> }
> @@ -279,6 +294,11 @@ static int acpi_pci_link_get_current(struct acpi_pci_link *link)
> result = -ENODEV;
> }
>
this should have been >=
> + if (irq > ACPI_MAX_IRQS) {
> + pr_err("IRQ %d number exceed max IRQ (%d)\n", irq,
> + ACPI_MAX_IRQS);
> + result = -ENODEV;
> + }
> link->irq.active = irq;
>
> ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Link at IRQ %d \n", link->irq.active));
> @@ -437,9 +457,6 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
> * enabled system.
> */
>
> -#define ACPI_MAX_IRQS 256
> -#define ACPI_MAX_ISA_IRQ 16
> -
> #define PIRQ_PENALTY_PCI_AVAILABLE (0)
> #define PIRQ_PENALTY_PCI_POSSIBLE (16*16)
> #define PIRQ_PENALTY_PCI_USING (16*16*16)
>
Bjorn,
Does this look like what you were thinking?
Sinan
--
Sinan Kaya
Qualcomm Technologies, Inc. on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a
Linux Foundation Collaborative Project
next prev parent reply other threads:[~2015-11-25 14:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-24 20:10 [PATCH V5] acpi: add support for extended IRQ to PCI link Sinan Kaya
2015-11-25 14:27 ` Sinan Kaya [this message]
2015-11-25 17:27 ` Bjorn Helgaas
2015-11-25 18:28 ` Sinan Kaya
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5655C55D.80206@codeaurora.org \
--to=okaya@codeaurora.org \
--cc=cov@codeaurora.org \
--cc=helgaas@kernel.org \
--cc=jcm@redhat.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=timur@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.