From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Christophe Leroy <christophe.leroy@c-s.fr>,
Paul Mackerras <paulus@samba.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Scott Wood <oss@buserror.net>
Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [RFC] powerpc: handle simultanneous interrupts at once
Date: Tue, 14 Mar 2017 10:42:27 +1100 [thread overview]
Message-ID: <1489448547.2174.17.camel@kernel.crashing.org> (raw)
In-Reply-To: <20170310111152.1B3BF679C4@localhost.localdomain>
On Fri, 2017-03-10 at 12:11 +0100, Christophe Leroy wrote:
> It often happens to have simultanneous interrupts, for instance
> when having double Ethernet attachment. With the current
> implementation, we suffer the cost of kernel entry/exit for each
> interrupt.
>
> This patch introduces a loop in __do_irq() to handle all interrupts
> at once before returning.
>
> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> ---
> arch/powerpc/include/asm/hw_irq.h | 6 ++++++
> arch/powerpc/kernel/irq.c | 22 +++++++++++++++-------
> 2 files changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/hw_irq.h
> b/arch/powerpc/include/asm/hw_irq.h
> index eba60416536e..d69ae5846955 100644
> --- a/arch/powerpc/include/asm/hw_irq.h
> +++ b/arch/powerpc/include/asm/hw_irq.h
> @@ -123,6 +123,11 @@ static inline void may_hard_irq_enable(void)
> __hard_irq_enable();
> }
>
> +static inline void may_hard_irq_disable(void)
> +{
> + __hard_irq_disable();
> +}
> +
> static inline bool arch_irq_disabled_regs(struct pt_regs *regs)
> {
> return !regs->softe;
> @@ -204,6 +209,7 @@ static inline bool arch_irq_disabled_regs(struct
> pt_regs *regs)
> }
>
> static inline void may_hard_irq_enable(void) { }
> +static inline void may_hard_irq_disable(void) { }
>
> #endif /* CONFIG_PPC64 */
>
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index a018f5cae899..28aca510c166 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -515,14 +515,22 @@ void __do_irq(struct pt_regs *regs)
> */
> irq = ppc_md.get_irq();
>
> - /* We can hard enable interrupts now to allow perf
> interrupts */
> - may_hard_irq_enable();
> + do {
> + /* We can hard enable interrupts now to allow perf
> interrupts */
> + may_hard_irq_enable();
> +
> + /* And finally process it */
> + if (unlikely(!irq))
> + __this_cpu_inc(irq_stat.spurious_irqs);
> + else
> + generic_handle_irq(irq);
> +
> + may_hard_irq_disable();
Not sure the above is that useful. If another interrupt is pending,
on ppc64 at least, you will have got it right at may_hard_irq_enable()
which would have caused a hard-disable for you anyway.
> - /* And finally process it */
> - if (unlikely(!irq))
> - __this_cpu_inc(irq_stat.spurious_irqs);
> - else
> - generic_handle_irq(irq);
> + irq = ppc_md.get_irq();
> + } while (irq);
> +
> + may_hard_irq_enable();
>
> trace_irq_exit(regs);
>
prev parent reply other threads:[~2017-03-13 23:43 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-10 11:11 [RFC] powerpc: handle simultanneous interrupts at once Christophe Leroy
2017-03-13 23:42 ` Benjamin Herrenschmidt [this message]
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=1489448547.2174.17.camel@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=christophe.leroy@c-s.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=oss@buserror.net \
--cc=paulus@samba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).