Message ID | 20170414184014.8524-9-fu.wei@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, Apr 15, 2017 at 02:40:11AM +0800, fu.wei@linaro.org wrote: > From: Fu Wei <fu.wei@linaro.org> > > This patch introduces acpi_unregister_irq function to free a > linux IRQ number<->GSI mapping by a given linux IRQ number. > > Even we have successfully registered the GSI, when some error occurs, we > may need to unmap it for freeing the IRQ resource. But in some cases, we > only have IRQ, but not GSI. > > This patch is the preparation for memory-mapped timer support in GTDT > driver. > > Signed-off-by: Fu Wei <fu.wei@linaro.org> > --- > drivers/acpi/irq.c | 10 ++++++++++ > include/linux/acpi.h | 7 +++++++ > 2 files changed, 17 insertions(+) This will need comments/acks from the ACPI folk. Lorenzo, do you prefer this to direct use of irq_dispose_mapping() in the GTDT parsing code? Thanks, Mark. > diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c > index 830299a..59de777 100644 > --- a/drivers/acpi/irq.c > +++ b/drivers/acpi/irq.c > @@ -85,6 +85,16 @@ void acpi_unregister_gsi(u32 gsi) > EXPORT_SYMBOL_GPL(acpi_unregister_gsi); > > /** > + * acpi_unregister_irq() - Free a linux IRQ number<->GSI mapping > + * @irq: linux IRQ number > + */ > +void acpi_unregister_irq(int irq) > +{ > + irq_dispose_mapping(irq); > +} > +EXPORT_SYMBOL_GPL(acpi_unregister_irq); > + > +/** > * acpi_get_irq_source_fwhandle() - Retrieve fwhandle from IRQ resource source. > * @source: acpi_resource_source to use for the lookup. > * > diff --git a/include/linux/acpi.h b/include/linux/acpi.h > index 4b5c146..728d1ed 100644 > --- a/include/linux/acpi.h > +++ b/include/linux/acpi.h > @@ -336,6 +336,13 @@ extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); > */ > void acpi_unregister_gsi (u32 gsi); > > +/* > + * This function undoes the effect of one call to acpi_register_gsi(). > + * The irq should be the return value of acpi_register_gsi(). > + * If the irq is valid, free a linux IRQ number<->GSI mapping. > + */ > +void acpi_unregister_irq(int irq); > + > struct pci_dev; > > int acpi_pci_irq_enable (struct pci_dev *dev); > -- > 2.9.3 >
On Tue, Apr 18, 2017 at 04:58:41PM +0100, Mark Rutland wrote: > On Sat, Apr 15, 2017 at 02:40:11AM +0800, fu.wei@linaro.org wrote: > > From: Fu Wei <fu.wei@linaro.org> > > > > This patch introduces acpi_unregister_irq function to free a > > linux IRQ number<->GSI mapping by a given linux IRQ number. > > > > Even we have successfully registered the GSI, when some error occurs, we > > may need to unmap it for freeing the IRQ resource. But in some cases, we > > only have IRQ, but not GSI. > > > > This patch is the preparation for memory-mapped timer support in GTDT > > driver. > > > > Signed-off-by: Fu Wei <fu.wei@linaro.org> > > --- > > drivers/acpi/irq.c | 10 ++++++++++ > > include/linux/acpi.h | 7 +++++++ > > 2 files changed, 17 insertions(+) > > This will need comments/acks from the ACPI folk. I've now reworked the cleanup to not require this API, and will drop this patch. Thanks, Mark.
diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c index 830299a..59de777 100644 --- a/drivers/acpi/irq.c +++ b/drivers/acpi/irq.c @@ -85,6 +85,16 @@ void acpi_unregister_gsi(u32 gsi) EXPORT_SYMBOL_GPL(acpi_unregister_gsi); /** + * acpi_unregister_irq() - Free a linux IRQ number<->GSI mapping + * @irq: linux IRQ number + */ +void acpi_unregister_irq(int irq) +{ + irq_dispose_mapping(irq); +} +EXPORT_SYMBOL_GPL(acpi_unregister_irq); + +/** * acpi_get_irq_source_fwhandle() - Retrieve fwhandle from IRQ resource source. * @source: acpi_resource_source to use for the lookup. * diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 4b5c146..728d1ed 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -336,6 +336,13 @@ extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); */ void acpi_unregister_gsi (u32 gsi); +/* + * This function undoes the effect of one call to acpi_register_gsi(). + * The irq should be the return value of acpi_register_gsi(). + * If the irq is valid, free a linux IRQ number<->GSI mapping. + */ +void acpi_unregister_irq(int irq); + struct pci_dev; int acpi_pci_irq_enable (struct pci_dev *dev);