From d131a105229ef61e24f8c446eac8b7d13ace9cb5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Aug 2024 10:04:57 +0000 Subject: [PATCH] Revert "genirq: Allow irq_chip registration functions to take a const irq_chip" This reverts commit f19bf41e73317b29331787bba0f5afdeb686a760 which is commit 393e1280f765661cf39785e967676a4e57324126 upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: If02b4d096b62cb90fc84ec181c3b7168c1c30267 Signed-off-by: Greg Kroah-Hartman --- include/linux/irq.h | 7 +++---- kernel/irq/chip.c | 9 ++++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/linux/irq.h b/include/linux/irq.h index 2747b8d1dd38..c7fcd870de64 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -683,11 +683,10 @@ extern struct irq_chip no_irq_chip; extern struct irq_chip dummy_irq_chip; extern void -irq_set_chip_and_handler_name(unsigned int irq, const struct irq_chip *chip, +irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, irq_flow_handler_t handle, const char *name); -static inline void irq_set_chip_and_handler(unsigned int irq, - const struct irq_chip *chip, +static inline void irq_set_chip_and_handler(unsigned int irq, struct irq_chip *chip, irq_flow_handler_t handle) { irq_set_chip_and_handler_name(irq, chip, handle, NULL); @@ -777,7 +776,7 @@ static inline void irq_set_percpu_devid_flags(unsigned int irq) } /* Set/get chip/data for an IRQ: */ -extern int irq_set_chip(unsigned int irq, const struct irq_chip *chip); +extern int irq_set_chip(unsigned int irq, struct irq_chip *chip); extern int irq_set_handler_data(unsigned int irq, void *data); extern int irq_set_chip_data(unsigned int irq, void *data); extern int irq_set_irq_type(unsigned int irq, unsigned int type); diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 0c64601a178f..2654e6906dce 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -39,7 +39,7 @@ struct irqaction chained_action = { * @irq: irq number * @chip: pointer to irq chip description structure */ -int irq_set_chip(unsigned int irq, const struct irq_chip *chip) +int irq_set_chip(unsigned int irq, struct irq_chip *chip) { unsigned long flags; struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); @@ -47,7 +47,10 @@ int irq_set_chip(unsigned int irq, const struct irq_chip *chip) if (!desc) return -EINVAL; - desc->irq_data.chip = (struct irq_chip *)(chip ?: &no_irq_chip); + if (!chip) + chip = &no_irq_chip; + + desc->irq_data.chip = chip; irq_put_desc_unlock(desc, flags); /* * For !CONFIG_SPARSE_IRQ make the irq show up in @@ -1098,7 +1101,7 @@ irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle, EXPORT_SYMBOL_GPL(irq_set_chained_handler_and_data); void -irq_set_chip_and_handler_name(unsigned int irq, const struct irq_chip *chip, +irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, irq_flow_handler_t handle, const char *name) { irq_set_chip(irq, chip);