From: Guenter Roeck <linux@roeck-us.net>
To: afzal mohammed <afzal.mohd.ma@gmail.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Florian Fainelli <f.fainelli@gmail.com>,
Paul Burton <paulburton@kernel.org>,
linux-mips@vger.kernel.org, Ralf Baechle <ralf@linux-mips.org>,
linux-kernel@vger.kernel.org,
bcm-kernel-feedback-list@broadcom.com,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
"Maciej W. Rozycki" <macro@linux-mips.org>,
John Crispin <john@phrozen.org>, Huacai Chen <chenhc@lemote.com>,
Nathan Chancellor <natechancellor@gmail.com>,
Keguang Zhang <keguang.zhang@gmail.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] MIPS: pass non-NULL dev_id on shared request_irq()
Date: Sat, 14 Mar 2020 10:19:12 -0700 [thread overview]
Message-ID: <20200314171912.GA24092@roeck-us.net> (raw)
In-Reply-To: <20200314081312.GA4948@afzalpc>
On Sat, Mar 14, 2020 at 01:43:12PM +0530, afzal mohammed wrote:
> Recently all usages of setup_irq() was replaced by request_irq().
> request_irq() does a few sanity checks that were not done in
> setup_irq(), if they fail irq registration will fail. One of the check
> is to ensure that non-NULL dev_id is passed in the case of shared irq.
> This caused malta on qemu to hang.
>
> Fix it by passing handler as dev_id to all request_irq()'s that are
> shared. For sni, instead of passing non-NULL dev_id, remove shared irq
> flags.
>
> Fixes: ac8fd122e070 ("MIPS: Replace setup_irq() by request_irq()")
> Reported-by: Nathan Chancellor <natechancellor@gmail.com>
> Suggested-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> Signed-off-by: afzal mohammed <afzal.mohd.ma@gmail.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
> ---
>
> v2:
> * use handler for dev_id
> * remove shared irq flags for sni
>
> arch/mips/dec/setup.c | 2 +-
> arch/mips/kernel/cevt-r4k.c | 3 ++-
> arch/mips/loongson2ef/lemote-2f/irq.c | 2 +-
> arch/mips/pmcs-msp71xx/msp_time.c | 2 +-
> arch/mips/sni/a20r.c | 4 ++--
> arch/mips/sni/pcit.c | 8 ++++----
> arch/mips/sni/rm200.c | 6 +++---
> 7 files changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c
> index c8bbac0c5051..d4e868b828e5 100644
> --- a/arch/mips/dec/setup.c
> +++ b/arch/mips/dec/setup.c
> @@ -758,7 +758,7 @@ void __init arch_init_irq(void)
> /* Register the bus error interrupt. */
> if (dec_interrupt[DEC_IRQ_BUS] >= 0 && busirq_handler) {
> if (request_irq(dec_interrupt[DEC_IRQ_BUS], busirq_handler,
> - busirq_flags, "bus error", NULL))
> + busirq_flags, "bus error", busirq_handler))
> pr_err("Failed to register bus error interrupt\n");
> }
> /* Register the HALT interrupt. */
> diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
> index 64e917dfe6b2..17a9cbb8b3df 100644
> --- a/arch/mips/kernel/cevt-r4k.c
> +++ b/arch/mips/kernel/cevt-r4k.c
> @@ -292,7 +292,8 @@ int r4k_clockevent_init(void)
>
> cp0_timer_irq_installed = 1;
>
> - if (request_irq(irq, c0_compare_interrupt, flags, "timer", NULL))
> + if (request_irq(irq, c0_compare_interrupt, flags, "timer",
> + c0_compare_interrupt))
> pr_err("Failed to request irq %d (timer)\n", irq);
>
> return 0;
> diff --git a/arch/mips/loongson2ef/lemote-2f/irq.c b/arch/mips/loongson2ef/lemote-2f/irq.c
> index 34e15e8b7a8f..6f00579971a3 100644
> --- a/arch/mips/loongson2ef/lemote-2f/irq.c
> +++ b/arch/mips/loongson2ef/lemote-2f/irq.c
> @@ -109,7 +109,7 @@ void __init mach_init_irq(void)
>
> /* setup north bridge irq (bonito) */
> if (request_irq(LOONGSON_NORTH_BRIDGE_IRQ, ip6_action,
> - IRQF_SHARED | IRQF_NO_THREAD, "cascade", NULL))
> + IRQF_SHARED | IRQF_NO_THREAD, "cascade", ip6_action))
> pr_err("Failed to register north bridge cascade interrupt\n");
> /* setup source bridge irq (i8259) */
> if (request_irq(LOONGSON_SOUTH_BRIDGE_IRQ, no_action,
> diff --git a/arch/mips/pmcs-msp71xx/msp_time.c b/arch/mips/pmcs-msp71xx/msp_time.c
> index baf0da8b4c98..9c629829f447 100644
> --- a/arch/mips/pmcs-msp71xx/msp_time.c
> +++ b/arch/mips/pmcs-msp71xx/msp_time.c
> @@ -81,7 +81,7 @@ unsigned int get_c0_compare_int(void)
> /* MIPS_MT modes may want timer for second VPE */
> if ((get_current_vpe()) && !tim_installed) {
> if (request_irq(MSP_INT_VPE1_TIMER, c0_compare_interrupt, flags,
> - "timer", NULL))
> + "timer", c0_compare_interrupt))
> pr_err("Failed to register timer interrupt\n");
> tim_installed++;
> }
> diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c
> index ba966d62fb4b..0ecffb65fd6d 100644
> --- a/arch/mips/sni/a20r.c
> +++ b/arch/mips/sni/a20r.c
> @@ -222,8 +222,8 @@ void __init sni_a20r_irq_init(void)
> irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq);
> sni_hwint = a20r_hwint;
> change_c0_status(ST0_IM, IE_IRQ0);
> - if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> diff --git a/arch/mips/sni/pcit.c b/arch/mips/sni/pcit.c
> index 4a850ab03398..b331fe22c529 100644
> --- a/arch/mips/sni/pcit.c
> +++ b/arch/mips/sni/pcit.c
> @@ -244,8 +244,8 @@ void __init sni_pcit_irq_init(void)
> *(volatile u32 *)SNI_PCIT_INT_REG = 0;
> sni_hwint = sni_pcit_hwint;
> change_c0_status(ST0_IM, IE_IRQ1);
> - if (request_irq(SNI_PCIT_INT_START + 6, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(SNI_PCIT_INT_START + 6, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> @@ -259,8 +259,8 @@ void __init sni_pcit_cplus_irq_init(void)
> *(volatile u32 *)SNI_PCIT_INT_REG = 0x40000000;
> sni_hwint = sni_pcit_hwint_cplus;
> change_c0_status(ST0_IM, IE_IRQ0);
> - if (request_irq(MIPS_CPU_IRQ_BASE + 3, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(MIPS_CPU_IRQ_BASE + 3, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> diff --git a/arch/mips/sni/rm200.c b/arch/mips/sni/rm200.c
> index ba1f2fc6a43e..d84744ca871d 100644
> --- a/arch/mips/sni/rm200.c
> +++ b/arch/mips/sni/rm200.c
> @@ -473,10 +473,10 @@ void __init sni_rm200_irq_init(void)
> sni_hwint = sni_rm200_hwint;
> change_c0_status(ST0_IM, IE_IRQ0);
> if (request_irq(SNI_RM200_INT_START + 0, sni_rm200_i8259A_irq_handler,
> - IRQF_SHARED, "onboard ISA", NULL))
> + 0, "onboard ISA", NULL))
> pr_err("Failed to register onboard ISA interrupt\n");
> - if (request_irq(SNI_RM200_INT_START + 1, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(SNI_RM200_INT_START + 1, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> --
> 2.18.0
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net>
To: afzal mohammed <afzal.mohd.ma@gmail.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>,
Paul Burton <paulburton@kernel.org>,
linux-mips@vger.kernel.org, Ralf Baechle <ralf@linux-mips.org>,
linux-kernel@vger.kernel.org,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
bcm-kernel-feedback-list@broadcom.com,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
"Maciej W. Rozycki" <macro@linux-mips.org>,
John Crispin <john@phrozen.org>, Huacai Chen <chenhc@lemote.com>,
Nathan Chancellor <natechancellor@gmail.com>,
Keguang Zhang <keguang.zhang@gmail.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] MIPS: pass non-NULL dev_id on shared request_irq()
Date: Sat, 14 Mar 2020 10:19:12 -0700 [thread overview]
Message-ID: <20200314171912.GA24092@roeck-us.net> (raw)
In-Reply-To: <20200314081312.GA4948@afzalpc>
On Sat, Mar 14, 2020 at 01:43:12PM +0530, afzal mohammed wrote:
> Recently all usages of setup_irq() was replaced by request_irq().
> request_irq() does a few sanity checks that were not done in
> setup_irq(), if they fail irq registration will fail. One of the check
> is to ensure that non-NULL dev_id is passed in the case of shared irq.
> This caused malta on qemu to hang.
>
> Fix it by passing handler as dev_id to all request_irq()'s that are
> shared. For sni, instead of passing non-NULL dev_id, remove shared irq
> flags.
>
> Fixes: ac8fd122e070 ("MIPS: Replace setup_irq() by request_irq()")
> Reported-by: Nathan Chancellor <natechancellor@gmail.com>
> Suggested-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> Signed-off-by: afzal mohammed <afzal.mohd.ma@gmail.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
> ---
>
> v2:
> * use handler for dev_id
> * remove shared irq flags for sni
>
> arch/mips/dec/setup.c | 2 +-
> arch/mips/kernel/cevt-r4k.c | 3 ++-
> arch/mips/loongson2ef/lemote-2f/irq.c | 2 +-
> arch/mips/pmcs-msp71xx/msp_time.c | 2 +-
> arch/mips/sni/a20r.c | 4 ++--
> arch/mips/sni/pcit.c | 8 ++++----
> arch/mips/sni/rm200.c | 6 +++---
> 7 files changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c
> index c8bbac0c5051..d4e868b828e5 100644
> --- a/arch/mips/dec/setup.c
> +++ b/arch/mips/dec/setup.c
> @@ -758,7 +758,7 @@ void __init arch_init_irq(void)
> /* Register the bus error interrupt. */
> if (dec_interrupt[DEC_IRQ_BUS] >= 0 && busirq_handler) {
> if (request_irq(dec_interrupt[DEC_IRQ_BUS], busirq_handler,
> - busirq_flags, "bus error", NULL))
> + busirq_flags, "bus error", busirq_handler))
> pr_err("Failed to register bus error interrupt\n");
> }
> /* Register the HALT interrupt. */
> diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
> index 64e917dfe6b2..17a9cbb8b3df 100644
> --- a/arch/mips/kernel/cevt-r4k.c
> +++ b/arch/mips/kernel/cevt-r4k.c
> @@ -292,7 +292,8 @@ int r4k_clockevent_init(void)
>
> cp0_timer_irq_installed = 1;
>
> - if (request_irq(irq, c0_compare_interrupt, flags, "timer", NULL))
> + if (request_irq(irq, c0_compare_interrupt, flags, "timer",
> + c0_compare_interrupt))
> pr_err("Failed to request irq %d (timer)\n", irq);
>
> return 0;
> diff --git a/arch/mips/loongson2ef/lemote-2f/irq.c b/arch/mips/loongson2ef/lemote-2f/irq.c
> index 34e15e8b7a8f..6f00579971a3 100644
> --- a/arch/mips/loongson2ef/lemote-2f/irq.c
> +++ b/arch/mips/loongson2ef/lemote-2f/irq.c
> @@ -109,7 +109,7 @@ void __init mach_init_irq(void)
>
> /* setup north bridge irq (bonito) */
> if (request_irq(LOONGSON_NORTH_BRIDGE_IRQ, ip6_action,
> - IRQF_SHARED | IRQF_NO_THREAD, "cascade", NULL))
> + IRQF_SHARED | IRQF_NO_THREAD, "cascade", ip6_action))
> pr_err("Failed to register north bridge cascade interrupt\n");
> /* setup source bridge irq (i8259) */
> if (request_irq(LOONGSON_SOUTH_BRIDGE_IRQ, no_action,
> diff --git a/arch/mips/pmcs-msp71xx/msp_time.c b/arch/mips/pmcs-msp71xx/msp_time.c
> index baf0da8b4c98..9c629829f447 100644
> --- a/arch/mips/pmcs-msp71xx/msp_time.c
> +++ b/arch/mips/pmcs-msp71xx/msp_time.c
> @@ -81,7 +81,7 @@ unsigned int get_c0_compare_int(void)
> /* MIPS_MT modes may want timer for second VPE */
> if ((get_current_vpe()) && !tim_installed) {
> if (request_irq(MSP_INT_VPE1_TIMER, c0_compare_interrupt, flags,
> - "timer", NULL))
> + "timer", c0_compare_interrupt))
> pr_err("Failed to register timer interrupt\n");
> tim_installed++;
> }
> diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c
> index ba966d62fb4b..0ecffb65fd6d 100644
> --- a/arch/mips/sni/a20r.c
> +++ b/arch/mips/sni/a20r.c
> @@ -222,8 +222,8 @@ void __init sni_a20r_irq_init(void)
> irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq);
> sni_hwint = a20r_hwint;
> change_c0_status(ST0_IM, IE_IRQ0);
> - if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> diff --git a/arch/mips/sni/pcit.c b/arch/mips/sni/pcit.c
> index 4a850ab03398..b331fe22c529 100644
> --- a/arch/mips/sni/pcit.c
> +++ b/arch/mips/sni/pcit.c
> @@ -244,8 +244,8 @@ void __init sni_pcit_irq_init(void)
> *(volatile u32 *)SNI_PCIT_INT_REG = 0;
> sni_hwint = sni_pcit_hwint;
> change_c0_status(ST0_IM, IE_IRQ1);
> - if (request_irq(SNI_PCIT_INT_START + 6, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(SNI_PCIT_INT_START + 6, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> @@ -259,8 +259,8 @@ void __init sni_pcit_cplus_irq_init(void)
> *(volatile u32 *)SNI_PCIT_INT_REG = 0x40000000;
> sni_hwint = sni_pcit_hwint_cplus;
> change_c0_status(ST0_IM, IE_IRQ0);
> - if (request_irq(MIPS_CPU_IRQ_BASE + 3, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(MIPS_CPU_IRQ_BASE + 3, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> diff --git a/arch/mips/sni/rm200.c b/arch/mips/sni/rm200.c
> index ba1f2fc6a43e..d84744ca871d 100644
> --- a/arch/mips/sni/rm200.c
> +++ b/arch/mips/sni/rm200.c
> @@ -473,10 +473,10 @@ void __init sni_rm200_irq_init(void)
> sni_hwint = sni_rm200_hwint;
> change_c0_status(ST0_IM, IE_IRQ0);
> if (request_irq(SNI_RM200_INT_START + 0, sni_rm200_i8259A_irq_handler,
> - IRQF_SHARED, "onboard ISA", NULL))
> + 0, "onboard ISA", NULL))
> pr_err("Failed to register onboard ISA interrupt\n");
> - if (request_irq(SNI_RM200_INT_START + 1, sni_isa_irq_handler,
> - IRQF_SHARED, "ISA", NULL))
> + if (request_irq(SNI_RM200_INT_START + 1, sni_isa_irq_handler, 0, "ISA",
> + NULL))
> pr_err("Failed to register ISA interrupt\n");
> }
>
> --
> 2.18.0
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-03-15 2:23 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-04 0:55 [PATCH v3] MIPS: Replace setup_irq() by request_irq() afzal mohammed
2020-03-04 0:55 ` afzal mohammed
2020-03-04 20:31 ` Thomas Bogendoerfer
2020-03-04 20:31 ` Thomas Bogendoerfer
2020-03-05 11:57 ` [PATCH v4] " afzal mohammed
2020-03-05 11:57 ` afzal mohammed
2020-03-06 12:47 ` Thomas Bogendoerfer
2020-03-06 12:47 ` Thomas Bogendoerfer
2020-03-11 5:31 ` Nathan Chancellor
2020-03-11 5:31 ` Nathan Chancellor
2020-03-11 7:56 ` afzal mohammed
2020-03-11 7:56 ` afzal mohammed
2020-03-11 9:03 ` afzal mohammed
2020-03-11 9:03 ` afzal mohammed
2020-03-11 10:42 ` Thomas Bogendoerfer
2020-03-11 10:42 ` Thomas Bogendoerfer
2020-03-11 13:12 ` afzal mohammed
2020-03-11 13:12 ` afzal mohammed
2020-03-11 16:03 ` Thomas Bogendoerfer
2020-03-11 16:03 ` Thomas Bogendoerfer
2020-03-11 16:32 ` afzal mohammed
2020-03-11 16:32 ` afzal mohammed
2020-03-13 12:11 ` afzal mohammed
2020-03-13 12:11 ` afzal mohammed
2020-03-14 8:13 ` [PATCH v2] MIPS: pass non-NULL dev_id on shared request_irq() afzal mohammed
2020-03-14 8:13 ` afzal mohammed
2020-03-14 17:19 ` Guenter Roeck [this message]
2020-03-14 17:19 ` Guenter Roeck
2020-03-15 7:11 ` Nathan Chancellor
2020-03-15 7:11 ` Nathan Chancellor
2020-03-16 15:32 ` Thomas Bogendoerfer
2020-03-16 15:32 ` Thomas Bogendoerfer
2020-03-14 6:55 ` [PATCH v4] MIPS: Replace setup_irq() by request_irq() afzal mohammed
2020-03-14 6:55 ` afzal mohammed
2020-03-11 15:27 ` [PATCH] MIPS: pass non-NULL dev_id on shared request_irq() afzal mohammed
2020-03-11 15:27 ` afzal mohammed
2020-03-11 16:06 ` afzal mohammed
2020-03-11 16:06 ` afzal mohammed
2020-03-13 16:47 ` [PATCH v4] MIPS: Replace setup_irq() by request_irq() Guenter Roeck
2020-03-13 16:47 ` Guenter Roeck
2020-03-14 1:07 ` afzal mohammed
2020-03-14 1:07 ` afzal mohammed
2020-03-14 5:21 ` maobibo
2020-03-14 6:49 ` afzal mohammed
2020-03-14 6:49 ` afzal mohammed
2020-03-14 10:28 ` Guenter Roeck
2020-03-14 10:28 ` Guenter Roeck
2020-03-14 11:42 ` afzal mohammed
2020-03-14 11:42 ` afzal mohammed
2020-03-05 12:29 ` [PATCH v3] " afzal mohammed
2020-03-05 12:29 ` afzal mohammed
2020-03-05 12:42 ` afzal mohammed
2020-03-05 12:42 ` afzal mohammed
2020-03-04 20:38 ` kbuild test robot
2020-03-04 20:38 ` kbuild test robot
2020-03-04 20:38 ` kbuild test robot
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=20200314171912.GA24092@roeck-us.net \
--to=linux@roeck-us.net \
--cc=afzal.mohd.ma@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=chenhc@lemote.com \
--cc=f.fainelli@gmail.com \
--cc=jiaxun.yang@flygoat.com \
--cc=john@phrozen.org \
--cc=keguang.zhang@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=macro@linux-mips.org \
--cc=natechancellor@gmail.com \
--cc=paulburton@kernel.org \
--cc=ralf@linux-mips.org \
--cc=tsbogend@alpha.franken.de \
/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.