Re: [PATCH 17/18] irqchip: Replace setup_irq() by request_irq()

Paul Cercueil
2020-02-13T16:03:04Z

Hi,

Le mer., févr. 12, 2020 at 13:35, afzal mohammed
<afzal.mohd.ma@gmail.com> a écrit :
> request_irq() is preferred over setup_irq(). Existing callers of
> setup_irq() reached mostly via 'init_IRQ()' & 'time_init()', while
> memory allocators are ready by 'mm_init()'.
>
> Per tglx[1], setup_irq() existed in olden days when allocators were
> not
> ready by the time early interrupts were initialized.
>
> Hence replace setup_irq() by request_irq().
>
> Seldom remove_irq() usage has been observed coupled with setup_irq(),
> wherever that has been found, it too has been replaced by free_irq().
>
> [1] https://lkml.kernel.org/r/alpine.DEB.2.20.1710191609480.1971@nanos
>
> Signed-off-by: afzal mohammed <afzal.mohd.ma@gmail.com>

Reviewed-by: Paul Cercueil <paul@crapouillou.net>

> ---
>
> Since cc'ing cover letter to all maintainers/reviewers would be too
> many, refer for cover letter,
>
> https://lkml.kernel.org/r/cover.1581478323.git.afzal.mohd.ma@gmail.com
>
> drivers/irqchip/irq-i8259.c | 9 +++------
> drivers/irqchip/irq-ingenic.c | 11 +++++------
> 2 files changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/irqchip/irq-i8259.c b/drivers/irqchip/irq-i8259.c
> index d000870d9b6b..e9798d02b256 100644
> --- a/drivers/irqchip/irq-i8259.c
> +++ b/drivers/irqchip/irq-i8259.c
> @@ -271,11 +271,6 @@ static void init_8259A(int auto_eoi)
> /*
> * IRQ2 is cascade interrupt to second interrupt controller
> */
> -static struct irqaction irq2 = {
> - .handler = no_action,
> - .name = "cascade",
> - .flags = IRQF_NO_THREAD,
> -};
>
> static struct resource pic1_io_resource = {
> .name = "pic1",
> @@ -323,7 +318,9 @@ struct irq_domain * __init
> __init_i8259_irqs(struct device_node *node)
> if (!domain)
> panic("Failed to add i8259 IRQ domain");
>
> - setup_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, &irq2);
> + if (request_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, no_action,
> + IRQF_NO_THREAD, "cascade", NULL))
> + pr_err("request_irq() on %s failed\n", "cascade");
> register_syscore_ops(&i8259_syscore_ops);
> return domain;
> }
> diff --git a/drivers/irqchip/irq-ingenic.c
> b/drivers/irqchip/irq-ingenic.c
> index c5589ee0dfb3..5b20a0f0ece8 100644
> --- a/drivers/irqchip/irq-ingenic.c
> +++ b/drivers/irqchip/irq-ingenic.c
> @@ -58,11 +58,6 @@ static irqreturn_t intc_cascade(int irq, void
> *data)
> return IRQ_HANDLED;
> }
>
> -static struct irqaction intc_cascade_action = {
> - .handler = intc_cascade,
> - .name = "SoC intc cascade interrupt",
> -};
> -
> static int __init ingenic_intc_of_init(struct device_node *node,
> unsigned num_chips)
> {
> @@ -130,7 +125,11 @@ static int __init ingenic_intc_of_init(struct
> device_node *node,
> irq_reg_writel(gc, IRQ_MSK(32), JZ_REG_INTC_SET_MASK);
> }
>
> - setup_irq(parent_irq, &intc_cascade_action);
> + if (request_irq(parent_irq, intc_cascade, 0,
> + "SoC intc cascade interrupt", NULL)) {
> + pr_err("request_irq() on %s failed\n",
> + "SoC intc cascade interrupt");
> + }
> return 0;
>
> out_domain_remove:
> --
> 2.24.1
>